diff --git a/ARCs/arc-0058.md b/ARCs/arc-0058.md new file mode 100644 index 000000000..04a7dd17d --- /dev/null +++ b/ARCs/arc-0058.md @@ -0,0 +1,735 @@ +--- +arc: 58 +title: Plugin-Based Account Abstraction +description: Account abstraction using stateful applications +author: Joe Polny (@joe-p), Kyle Breeding aka krby.algo (@kylebeee) +discussions-to: https://github.com/algorandfoundation/ARCs/issues/269 +status: Draft +type: Standards Track +category: ARC +created: 2024-01-08 +requires: 4 +--- + +## Abstract + +This ARC proposes a standard for using stateful applications and rekey transactions to enable account abstraction on Algorand. The abstracted account is controlled by a single stateful application which serves as the auth address of the abstracted account. Other applications can be used as plugins to provide additional functionality to the abstracted account with fine-grained control over their permissions. This dovetails nicely with the advent of agentic AI, allowing users to bring autonomous agent functionality into their wallet with extreme sandboxing. + +## Motivation + +Manually signing transactions for every dApp interaction can be rather fatiguing for end-users, resulting in a frustrating UX. In some cases, it makes specific app designs that require many transactions borderline impossible. + +Another common point of friction for end-users in the Algorand ecosystem is ASA opt-in transactions. This is a particularly high point of friction for onboarding new accounts since they must be funded and then initiate a transaction. This standard can be used to allow mass creation of non-custodial accounts and trigger opt-ins on their behalf. + +## Specification + +### Definitions + +**External Owned Account (EOA)** - An account that is _not_ controlled by a smart contract. + +**Abstracted Account** - An account that has functionality beyond a typical keypair-based account. + +**Abstracted Account App** - The stateful application used to control the abstracted account. This app's address is the `auth-addr` of the abstracted account. + +**Plugin** - An additional application that adds functionality to the **Abstracted Account App** (and thus the **Abstracted Account**). + +**Admin** - An account, separate from the **Abstracted Account**, that controls the **Abstracted Account App**. In particular, this account can initiate rekeys, manage plugins, and transfer admin privileges. + +**Escrow** - An account the abstracted account creates and utilizes to silo assets for a given plugin. + +**Allowance** - A set of permissions related to a given escrow that permits associated plugins to request funds for use. + +**Delegation Type** - Determines who is credited with user interaction when a plugin is used. This affects the `lastUserInteraction` timestamp which can be used for account activity tracking. + +**Escrow Factory** - A global singleton contract responsible for creating escrow accounts and providing a registry of which abstracted account created each escrow. + +### Temporary State Management + +During plugin execution, the abstracted account app **MUST** temporarily store: + +- `spendingAddress`: A global state key indicating the account being rekeyed to the plugin being used. + +This state **MUST** be cleared before the transaction group completes via `arc58_verifyAuthAddr`. + +### [ARC-4](./arc-0004.md) Methods + +An Abstracted Account App that adheres to this standard **MUST** implement the following methods: + +```json +{ + "methods": [ + { + "name": "arc58_changeAdmin", + "desc": "Attempt to change the admin for this app. Some implementations MAY not support this.", + "args": [ + { + "type": "address", + "name": "newAdmin", + "desc": "The new admin" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "arc58_pluginChangeAdmin", + "desc": "Attempt to change the admin via plugin.", + "args": [ + { + "type": "uint64", + "name": "plugin", + "desc": "The app calling the plugin" + }, + { + "type": "address", + "name": "allowedCaller", + "desc": "The address that triggered the plugin" + }, + { + "type": "address", + "name": "newAdmin", + "desc": "The new admin" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "arc58_getAdmin", + "desc": "Get the admin of this app. This method SHOULD always be used rather than reading directly from state because different implementations may have different ways of determining the admin.", + "args": [], + "returns": { + "type": "address" + }, + "readonly": true + }, + { + "name": "arc58_verifyAuthAddr", + "desc": "Verify the abstracted account is rekeyed to this app", + "args": [], + "returns": { + "type": "void" + } + }, + { + "name": "arc58_rekeyTo", + "desc": "Rekey the abstracted account to another address. Primarily useful for rekeying to an EOA.", + "args": [ + { + "type": "address", + "name": "address", + "desc": "The address to rekey to" + }, + { + "type": "bool", + "name": "flash", + "desc": "Whether or not this should be a flash rekey. If true, the rekey back to the app address must be done in the same txn group as this call" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "arc58_canCall", + "desc": "Check whether the plugin can be used", + "args": [ + { + "type": "uint64", + "name": "plugin", + "desc": "The plugin to be rekeyed to" + }, + { + "type": "bool", + "name": "global", + "desc": "Whether this is callable globally" + }, + { + "type": "address", + "name": "address", + "desc": "The address that will trigger the plugin" + }, + { + "type": "byte[4]", + "name": "method", + "desc": "The method being called on the plugin, if applicable" + } + ], + "returns": { + "type": "bool", + "desc": "Whether the plugin can be called with these parameters" + }, + "readonly": true + }, + { + "name": "arc58_rekeyToPlugin", + "desc": "Temporarily rekey to an approved plugin app address", + "args": [ + { + "type": "uint64", + "name": "plugin", + "desc": "The app to rekey to" + }, + { + "type": "bool", + "name": "global", + "desc": "Whether the plugin is callable globally" + }, + { + "type": "uint64[]", + "name": "methodOffsets", + "desc": "The indices of the methods being used in the group. If the plugin has method restrictions, these indices are required to match the methods used on each subsequent call to the plugin within the group" + }, + { + "type": "(uint64,uint64)[]", + "name": "fundsRequest", + "desc": "If the plugin is using an escrow, this is the list of funds to transfer to the escrow for the plugin to be able to use during execution" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "arc58_rekeyToNamedPlugin", + "desc": "Temporarily rekey to a named plugin app address", + "args": [ + { + "type": "string", + "name": "name", + "desc": "The name of the plugin to rekey to" + }, + { + "type": "bool", + "name": "global", + "desc": "Whether the plugin is callable globally" + }, + { + "type": "uint64[]", + "name": "methodOffsets", + "desc": "The indices of the methods being used in the group. If the plugin has method restrictions, these indices are required to match the methods used on each subsequent call to the plugin within the group" + }, + { + "type": "(uint64,uint64)[]", + "name": "fundsRequest", + "desc": "If the plugin is using an escrow, this is the list of funds to transfer to the escrow for the plugin to be able to use during execution" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "arc58_addPlugin", + "desc": "Add an app to the list of approved plugins", + "args": [ + { + "type": "uint64", + "name": "app", + "desc": "The app to add" + }, + { + "type": "address", + "name": "allowedCaller", + "desc": "The address that's allowed to call the app, or the global zero address for any address" + }, + { + "type": "bool", + "name": "admin", + "desc": "Whether the plugin has permissions to change the admin account" + }, + { + "type": "uint8", + "name": "delegationType", + "desc": "The ownership of the delegation for last_interval updates" + }, + { + "type": "string", + "name": "escrow", + "desc": "The escrow account to use for the plugin, if any. If empty, no escrow will be used. If the named escrow does not exist, it will be created" + }, + { + "type": "uint64", + "name": "lastValid", + "desc": "The timestamp or round when the permission expires" + }, + { + "type": "uint64", + "name": "cooldown", + "desc": "The number of seconds or rounds that must pass before the plugin can be called again" + }, + { + "type": "(byte[4],uint64)[]", + "name": "methods", + "desc": "The methods that are allowed to be called for the plugin by the address" + }, + { + "type": "bool", + "name": "useRounds", + "desc": "Whether the plugin uses rounds for cooldowns and lastValid, defaults to timestamp" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "arc58_removePlugin", + "desc": "Remove an app from the list of approved plugins", + "args": [ + { + "type": "uint64", + "name": "app", + "desc": "The app to remove" + }, + { + "type": "address", + "name": "allowedCaller", + "desc": "The address that's allowed to call the app" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "arc58_addNamedPlugin", + "desc": "Add a named plugin", + "args": [ + { + "type": "string", + "name": "name", + "desc": "The plugin name" + }, + { + "type": "uint64", + "name": "app", + "desc": "The app to add" + }, + { + "type": "address", + "name": "allowedCaller", + "desc": "The address that's allowed to call the app, or the global zero address for any address" + }, + { + "type": "bool", + "name": "admin", + "desc": "Whether the plugin has permissions to change the admin account" + }, + { + "type": "uint8", + "name": "delegationType", + "desc": "The ownership of the delegation for last_interval updates" + }, + { + "type": "string", + "name": "escrow", + "desc": "The escrow account to use for the plugin, if any. If empty, no escrow will be used. If the named escrow does not exist, it will be created" + }, + { + "type": "uint64", + "name": "lastValid", + "desc": "The timestamp or round when the permission expires" + }, + { + "type": "uint64", + "name": "cooldown", + "desc": "The number of seconds or rounds that must pass before the plugin can be called again" + }, + { + "type": "(byte[4],uint64)[]", + "name": "methods", + "desc": "The methods that are allowed to be called for the plugin by the address" + }, + { + "type": "bool", + "name": "useRounds", + "desc": "Whether the plugin uses rounds for cooldowns and lastValid, defaults to timestamp" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "arc58_removeNamedPlugin", + "desc": "Remove a named plugin", + "args": [ + { + "type": "string", + "name": "name", + "desc": "The plugin name" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "arc58_newEscrow", + "desc": "Create a new escrow for the controlled address", + "args": [ + { + "type": "string", + "name": "escrow", + "desc": "The name of the escrow to create" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "arc58_reclaim", + "desc": "Transfer funds from an escrow back to the controlled address", + "args": [ + { + "type": "string", + "name": "escrow", + "desc": "The escrow to reclaim funds from" + }, + { + "type": "(uint64,uint64,bool)[]", + "name": "reclaims", + "desc": "The list of reclaims to make from the escrow" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "arc58_optinEscrow", + "desc": "Opt-in an escrow account to assets", + "args": [ + { + "type": "string", + "name": "escrow", + "desc": "The escrow to opt-in to" + }, + { + "type": "uint64[]", + "name": "assets", + "desc": "The list of assets to opt-in to" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "arc58_pluginOptinEscrow", + "desc": "Opt-in an escrow account to assets via a plugin / allowed caller", + "args": [ + { + "type": "uint64", + "name": "app", + "desc": "The app related to the escrow optin" + }, + { + "type": "address", + "name": "allowedCaller", + "desc": "The address allowed to call the plugin related to the escrow optin" + }, + { + "type": "uint64[]", + "name": "assets", + "desc": "The list of assets to opt-in to" + }, + { + "type": "pay", + "name": "mbrPayment", + "desc": "The payment txn that is used to pay for the asset opt-in" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "arc58_addAllowances", + "desc": "Add an allowance for an escrow account", + "args": [ + { + "type": "string", + "name": "escrow", + "desc": "The escrow to add the allowance for" + }, + { + "type": "(uint64,uint8,uint64,uint64,uint64,bool)[]", + "name": "allowances", + "desc": "The list of allowances to add" + } + ], + "returns": { + "type": "void" + } + }, + { + "name": "arc58_removeAllowances", + "desc": "Remove allowances for an escrow account", + "args": [ + { + "type": "string", + "name": "escrow", + "desc": "The escrow to remove the allowance for" + }, + { + "type": "uint64[]", + "name": "assets", + "desc": "The list of assets to remove the allowance for" + } + ], + "returns": { + "type": "void" + } + } + ] +} +``` + +### Plugins + +Plugins are applications that the Abstracted Account App **MUST** rekey to when `rekeyToPlugin` or `rekeyToNamedPlugin` is called. After a plugin has been rekeyed to, the abstracted account **MUST** be rekeyed back to the abstracted account application. When and how this rekey is done does not matter, but it **MUST** be verified by a call to `verifyAuthAddr` as the last transaction in the group OR the last transaction in the group must be an explicit rekey transaction. + +### Plugin Validation Process + +When `rekeyToPlugin` is called, the implementation **MUST** validate the entire transaction group to ensure: + +1. **Plugin Existence**: The plugin exists and is properly configured +2. **Expiration Check**: The plugin has not expired based on `lastValid` timestamp/round +3. **Cooldown Enforcement**: Sufficient time has passed since the plugin was last used +4. **Method Validation**: If method restrictions exist, each plugin call must use an allowed method +5. **Rekey Verification**: The group must contain a rekey back to the abstracted account +6. **Application Isolation**: During rekey, only calls to the specified plugin application are allowed + +### Plugin Permissions + +When adding a plugin, the admin can specify an address that is allowed to call `rekeyToPlugin` for that specific plugin. Using the zero address will allow anyone to use the plugin. If `global LatestTimeStamp` (or `global Round` if the `useRounds` argument was set to `true` at plugin install time) has passed the specified end time (or round), the `rekeyToPlugin` call **MUST** fail. If the permitted address is not the zero address and does not match the caller specified at install time, the `rekeyToPlugin` call **MUST** fail. + +In addition to expiration times, plugins can have several other security restrictions that give the user further control and security: + +- **Cooldowns** - Prevent plugins from being used more frequently than the user intended +- **Method restrictions** - Check the ARC-0004 method selector argument to restrict which methods on a compliant plugin can be utilized, also supporting cooldowns for subsets of a plugin's functionality +- **Escrow system** - Used in conjunction with these permissions to sandbox asset allocations by plugins + +### Delegation Types + +Plugins can be configured with different delegation types that determine user interaction tracking: + +- **Self Delegation (Type 0)**: When used, the plugin caller is credited with user interaction, updating `lastUserInteraction` +- **Other Types**: Implementation-specific delegation types may exist for different interaction attribution models + +The delegation type **MUST NOT** be set to "self" (0) when the allowed caller is the zero address (global), as this would create ambiguity about who should be credited with the interaction. + +### Escrows & Allowances + +Along with the Abstracted Account contract there is an escrow factory contract. This contract is meant to be a global singleton and has two responsibilities: + +- Mint escrow contracts for abstracted accounts to use +- Provide a single source of truth for correlating escrows with the Abstracted Account that created them + +The child escrow contracts themselves are rekeyed to the Abstracted Account at creation time and their only other functionality is being deleted. + +The escrow accounts act as silos for funding plugin activity. They are named and referenceable when a plugin is added to the Abstracted Account. Doing so will restrict all ASA activities to happen through the escrow instead of the Abstracted Account's main `controlled_address`. Allowances allow escrows to be given funds under certain restrictions. + +#### Escrow Factory Integration + +When a plugin is added with an escrow name: + +1. If an escrow with that name already exists, it is reused +2. If no escrow exists, the abstracted account calls the escrow factory's `new(pay)uint64` method +3. The factory creates a new escrow application and returns its ID +4. The escrow is immediately rekeyed to the abstracted account for control +5. The escrow name and application ID are stored for future reference + +#### Allowance Structure + +An allowance has the following structure: + +```typescript +export type AllowanceInfo = { + /** The type of allowance to use (0=Flat, 1=Window, 2=Drip) */ + type: SpendAllowanceType + /** The maximum size of the bucket if using drip */ + max: uint64 + /** The amount of the asset the plugin is allowed to access or per window */ + allowed: uint64 + /** The amount spent during the current or last interacted window */ + spent: uint64 + /** The rate the allowance should be expanded */ + interval: uint64 + /** The amount leftover when the bucket was last accessed */ + last: uint64 + /** The timestamp or round the allowance was added */ + start: uint64 + /** Whether to use round number or unix timestamp when evaluating this allowance */ + useRounds: boolean +} +``` + +#### Allowance Types + +There are three allowance strategies, each with different behaviors: + +**Flat (Type 0)** +- One-time allowance that depletes as used +- Example: "This escrow can spend 10 ALGO total, after that the allowance must be replaced" +- `allowed` = total spendable amount +- `spent` = amount already used +- Available = `allowed - spent` + +**Window (Type 1)** +- Periodic allowance that resets at regular intervals +- Example: "This escrow can spend 10 ALGO per month" +- `allowed` = amount per window +- `interval` = duration of each window +- `start` = when the first window began +- Resets to full allowance at the start of each new window +- Does not accumulate across windows + +**Drip (Type 2)** +- Continuous allowance that refills at a steady rate up to a maximum +- Example: "This escrow can hold up to 10 ALGO, replenishing at 1 ALGO per day" +- `allowed` = refill rate per interval +- `interval` = time between refills +- `max` = maximum bucket size +- `spent` = current amount in bucket (leftover from previous access) +- Accumulates over time up to the maximum + +#### Allowance Validation + +When a plugin requests funds through `fundsRequest`, the implementation: + +1. Calculates available funds based on allowance type and current time +2. Verifies the request amount does not exceed available funds +3. Updates the allowance state (spent amount, last access time) +4. Transfers the requested funds from controlled address to spending address + +Each allowance is stored in a box map with the key being a composite key of the escrow application ID and the asset the allowance pertains to. + +When `arc58_addPlugin` or `arc58_addNamedPlugin` are called with an escrow name provided, the Abstracted Account should call the `new(pay)uint64` method on the escrow factory contract if an escrow with the given name does not already exist and store the name and application ID for later use. + +#### Named Plugins + +The admin can optionally add a named plugin to their abstracted account application. Any name that matches the regex `/^ARC\d+$/` **MUST** implement the interface(s) described in the respective ARC. The ARC number **MUST NOT** have any leading zeros. + +### Wallet and Application Support + +#### Adding Plugins + +An application may ask a user to add a plugin to their Abstracted Account App. The wallet **MUST** show the user the requested permitted caller, end time, and plugin app ID. Wallets **MAY** have a database of known plugins to describe the plugin in a more human-friendly way, but the exact details of this implementation are outside the scope of this ARC. + +#### Viewing Plugins + +For a given Abstracted Account, a wallet **SHOULD** allow the user to view all of the plugins added to their Abstracted Account App. Wallets also **SHOULD** provide the user a way to manually add and remove plugins from their Abstracted Account App. + +#### Supporting EOA Rekeys + +If a user connects to an app with an Abstracted Account, the app **SHOULD** allow the user to easily sign transactions with an externally owned account. It is easy for the admin to manually call `rekeyTo` prior to interacting with an app, but this does not guarantee the user will rekey back to the Abstracted Account (thus breaking plugin functionality). As such, to improve user experience, applications **SHOULD** be able to send transaction groups that start with a `rekeyTo` call that rekeys to the admin account with `flash` set to true. Because `flash` is set to true, the last transaction in the group **MUST** be a rekey from the admin address to the Abstracted Account address. + +This requires wallets to be able to tell apps that the connected account is an Abstracted Account. + +## Rationale + +### App vs Logic Sig + +There have been similar proposals for reducing end-user friction, such as [ARC-47](./arc-0047.md) which enables safer usage of delegated logic signatures. The major downside of logic signatures is that they are not usable by smart contracts. This severely limits composability and potential use cases. + +### Plugins + +Rather than constantly updating the approval program of the abstracted account application to add functionality, it is safer and easier to simply add additional apps that enable the desired functionality. This also gives the end-user more control over what various dApps can do with their account at any time. + +### Plugin Permissions + +A common use case for plugins will be end-users allowing specific apps to perform actions on their account. As such, implementing this in the Abstracted Account App allows for wallets and other ecosystem tools to easily display permissions to end users. The end time is also useful to ensure a user only enables a plugin for the time that it would be useful for them. The concept of plugins is similar to approvals on EVM chains and there have been cases where old approvals became an attack vector. + +### Escrow System Design + +The escrow system provides several benefits: + +1. **Asset Isolation**: Plugins can only access pre-allocated funds, limiting potential damage +2. **Granular Control**: Different assets can have different allowance rules +3. **Flexible Allowances**: Three allowance types cover most use cases from one-time spends to ongoing subscriptions + +## Backwards Compatibility + +Existing Algorand accounts can transition to an abstracted account by creating a new abstracted account application and setting the address to their current address. This requires them to create a new account to act as the admin. + +End-users can use an abstracted account with any dApp provided they rekey the account to an externally owned account. + +## Reference Implementation & Test Cases + +Reference implementation and tests are available [here](https://github.com/algorandfoundation/ARCs/assets/arc-0058) + +### Potential Use Cases + +These are potential use cases of this ARC. These are NOT part of the ARC itself and should likely be further developed and discussed in a separate ARC. They solely exist to demonstrate what the usage of this ARC will look like. + +#### 0-ALGO Opt-In Onboarding + +Using the above reference implementation, 0-ALGO onboarding can be done via the following sequence. It should be noted that a different implementation focused specifically on this use case could be even more efficient. + +```mermaid +sequenceDiagram + participant Wallet + participant Dapp + participant Abstracted App + participant OptIn Plugin + Wallet->>Wallet: Create keypair + note over Wallet: The user should not see
nor care about the address + Wallet->>Dapp: Send public key + Dapp->>Abstracted App: createApplication({ admin: Dapp }) + Dapp->>Abstracted App: Add opt-in plugin + Dapp->>Abstracted App: changeAdmin({ admin: Alice }) + note over Dapp,Abstracted App: There could also be a specific implementation that does
the above three transactions upon create + Dapp->>Wallet: Abstracted App ID + note over Wallet: The user sees the
Abstracted App Address + par Opt-In Transaction Group + Dapp->>Abstracted App: arc58_rekeyToPlugin({ plugin: OptIn Plugin }) + Dapp->>Abstracted App: Send ASA MBR + Dapp->>OptIn Plugin: optIn(asset) + Dapp->>Abstracted App: arc58_verifyAuthAddr + end +``` + +#### Transition Existing Address + +If a user wants to transition an existing keypair-based account to an abstracted account and use the existing secret key for admin actions, they need to perform the following steps using the above reference implementation. + +```mermaid +sequenceDiagram + participant Wallet + participant Abstracted App + note over Wallet: Address: EXISTING_ADDRESS
Auth Addr: EXISTING_ADDRESS + Wallet->>Wallet: Create new keypair + note over Wallet: Address: NEW_ADDRESS
Auth Addr: NEW_ADDRESS + Wallet->>Wallet: Rekey NEW_ADDRESS to EXISTING_ADDRESS + note over Wallet: Address: NEW_ADDRESS
Auth Addr: EXISTING_ADDRESS + Wallet->>Abstracted App: createApplication({ admin: NEW_ADDRESS, controlledAddress: EXISTING_ADDRESS }) + note over Abstracted App: Address: APP_ADDRESS
Admin: NEW_ADDRESS
Controlled Address: EXISTING_ADDRESS + Wallet->>Wallet: Rekey EXISTING_ADDRESS to APP_ADDRESS + note over Wallet: Address: EXISTING_ADDRESS
Auth Addr: APP_ADDRESS +``` + +#### Postmortem Authorization + +Using this ARC, you could create an abstracted account that changes who the admin is after a certain amount of time has passed without the original admin's interaction. The admin of the account will effectively be controlled by a time-based dead man's switch. + +## Security Considerations + +By adding a plugin to an abstracted account (without an escrow), that plugin can get complete control of the account. As such, extreme diligence must be taken by the end-user to ensure they are adding safe and/or trusted plugins. The security assumptions for plugins are very similar to delegated logic signatures, with the exception that plugins can always be revoked. + +The security assumptions of plugins are also similar to EVM approvals, which are a common source of exploits and scams. Implementations of plugins on Algorand should learn from the lessons of EVM approvals. + +### Additional Security Considerations + +**Method Restrictions**: When using method restrictions, plugin developers must ensure their applications properly adhere to the `ARC-0004` standard for method routing. + +**Temporary State**: The temporary `spendingAddress` state must be properly cleared to prevent state pollution between plugin executions. + +## Copyright + +Copyright and related rights waived via CC0. diff --git a/assets/arc-0058/.algokit.toml b/assets/arc-0058/.algokit.toml new file mode 100644 index 000000000..885e1fd84 --- /dev/null +++ b/assets/arc-0058/.algokit.toml @@ -0,0 +1,10 @@ +[algokit] +min_version = "v1.12.1" + +[project] +type = 'workspace' +projects_root_path = 'projects' + +[generate.devcontainer] +description = "Generate a default 'devcontainer.json' configuration that pre-installs algokit and launches Algorand sandbox as part of codespace container provisioning." +path = ".algokit/generators/create-devcontainer" diff --git a/assets/arc-0058/.algokit/generators/create-devcontainer/copier.yaml b/assets/arc-0058/.algokit/generators/create-devcontainer/copier.yaml new file mode 100644 index 000000000..e98f33484 --- /dev/null +++ b/assets/arc-0058/.algokit/generators/create-devcontainer/copier.yaml @@ -0,0 +1,4 @@ +_tasks: + - "echo '==== Successfully generated new .devcontainer.json file 🚀 ===='" + +_templates_suffix: ".j2" diff --git a/assets/arc-0058/.algokit/generators/create-devcontainer/devcontainer.json b/assets/arc-0058/.algokit/generators/create-devcontainer/devcontainer.json new file mode 100644 index 000000000..6452c65ba --- /dev/null +++ b/assets/arc-0058/.algokit/generators/create-devcontainer/devcontainer.json @@ -0,0 +1,19 @@ +{ + "forwardPorts": [4001, 4002, 8980, 5173], + "portsAttributes": { + "4001": { + "label": "algod" + }, + "4002": { + "label": "kmd" + }, + "8980": { + "label": "indexer" + }, + "5173": { + "label": "vite" + } + }, + "postCreateCommand": "mkdir -p ~/.config/algokit && pipx install algokit && sudo chown -R codespace:codespace ~/.config/algokit", + "postStartCommand": "for i in {1..5}; do algokit localnet status > /dev/null 2>&1 && break || sleep 30; algokit localnet reset; done" +} diff --git a/assets/arc-0058/.editorconfig b/assets/arc-0058/.editorconfig new file mode 100644 index 000000000..5e550a150 --- /dev/null +++ b/assets/arc-0058/.editorconfig @@ -0,0 +1,10 @@ +[*] +charset = utf-8 +insert_final_newline = true +end_of_line = lf +indent_style = space +indent_size = 2 +tab_width = 2 +max_line_length = 140 +trim_trailing_whitespace = true +single_quote = true diff --git a/assets/arc-0058/.gitattributes b/assets/arc-0058/.gitattributes new file mode 100644 index 000000000..6313b56c5 --- /dev/null +++ b/assets/arc-0058/.gitattributes @@ -0,0 +1 @@ +* text=auto eol=lf diff --git a/assets/arc-0058/.github/workflows/arc-0058-cd.yaml b/assets/arc-0058/.github/workflows/arc-0058-cd.yaml new file mode 100644 index 000000000..ff269a01b --- /dev/null +++ b/assets/arc-0058/.github/workflows/arc-0058-cd.yaml @@ -0,0 +1,45 @@ +name: Release arc-0058 + +on: + workflow_call: + +jobs: + deploy-testnet: + runs-on: "ubuntu-latest" + + environment: contract-testnet + steps: + - name: Checkout source code + uses: actions/checkout@v4 + + - name: Use Node.js 22.x + uses: actions/setup-node@v4 + with: + node-version: '22.x' + cache: 'npm' + cache-dependency-path: '**/package-lock.json' + + - name: Set up Python 3.12 + uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Install algokit + run: pipx install algokit + + - name: Bootstrap dependencies + run: algokit project bootstrap all --project-name 'arc-0058' + + - name: Configure git + shell: bash + run: | + # set git user and email as test invoke git + git config --global user.email "actions@github.com" && git config --global user.name "github-actions" + + - name: Deploy to testnet + run: algokit project deploy testnet --project-name 'arc-0058' + env: + # This is the account that becomes the creator of the contract + DEPLOYER_MNEMONIC: ${{ secrets.DEPLOYER_MNEMONIC }} + # The dispenser account is used to ensure the deployer account is funded + DISPENSER_MNEMONIC: ${{ secrets.DISPENSER_MNEMONIC }} diff --git a/assets/arc-0058/.github/workflows/arc-0058-ci.yaml b/assets/arc-0058/.github/workflows/arc-0058-ci.yaml new file mode 100644 index 000000000..f626e3ef3 --- /dev/null +++ b/assets/arc-0058/.github/workflows/arc-0058-ci.yaml @@ -0,0 +1,72 @@ +name: Validate arc-0058 + +on: + workflow_call: + +jobs: + validate: + runs-on: "ubuntu-latest" + steps: + - name: Checkout source code + uses: actions/checkout@v4 + + - name: Use Node.js 22.x + uses: actions/setup-node@v4 + with: + node-version: '22.x' + cache: 'npm' + cache-dependency-path: "**/package-lock.json" + + - name: Set up Python 3.12 + uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Install algokit + run: pipx install algokit + + - name: Start LocalNet + run: algokit localnet start + + - name: Bootstrap dependencies + run: algokit project bootstrap all --project-name 'arc-0058' + + - name: Configure git + shell: bash + run: | + # set git user and email as test invoke git + git config --global user.email "actions@github.com" && git config --global user.name "github-actions" + + + - name: Audit dependencies + run: algokit project run audit --project-name 'arc-0058' + + + + - name: Lint and format + run: algokit project run lint --project-name 'arc-0058' + + + + - name: Run tests + shell: bash + run: | + set -o pipefail + algokit project run test --project-name 'arc-0058' + + + - name: Build smart contracts + run: algokit project run build --project-name 'arc-0058' + + - name: Scan TEAL files for issues + run: algokit project run audit-teal --project-name 'arc-0058' + + # # Uncomment to enable TEAL static analysis with snapshoting using Tealer package + # # Would first require running locally using audit-teal command and committing the snapshots into source control + # # Please note, tealer has a known bug that may result in large snapshot file sizes, track resolution here: + # # https://github.com/crytic/tealer/issues/101 + # - name: Check output stability of the smart contracts + # run: algokit project run ci-teal-diff --project-name 'arc-0058' + + - name: Run deployer against LocalNet + run: algokit project deploy localnet --project-name 'arc-0058' diff --git a/assets/arc-0058/.gitignore b/assets/arc-0058/.gitignore new file mode 100644 index 000000000..4105eb2fc --- /dev/null +++ b/assets/arc-0058/.gitignore @@ -0,0 +1,170 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Ruff (linter) +.ruff_cache/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +.idea/ +!.idea/runConfigurations + +# macOS +.DS_Store + +# Received approval test files +*.received.* + +# NPM +node_modules + diff --git a/assets/arc-0058/.vscode/settings.json b/assets/arc-0058/.vscode/settings.json new file mode 100644 index 000000000..033fd1083 --- /dev/null +++ b/assets/arc-0058/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + // Disabled due to matangover.mypy extension not supporting monorepos + // To be addressed as part of https://github.com/matangover/mypy-vscode/issues/82 + "mypy.enabled": false +} diff --git a/assets/arc-0058/README.md b/assets/arc-0058/README.md new file mode 100644 index 000000000..33aa792c4 --- /dev/null +++ b/assets/arc-0058/README.md @@ -0,0 +1,22 @@ +# arc-0058 + +Welcome to your new AlgoKit project! + +This is your workspace root. A `workspace` in AlgoKit is an orchestrated collection of standalone projects (backends, smart contracts, frontend apps and etc). + +By default, `projects_root_path` parameter is set to `projects`. Which instructs AlgoKit CLI to create a new directory under `projects` directory when new project is instantiated via `algokit init` at the root of the workspace. + +## Getting Started + +To get started refer to `README.md` files in respective sub-projects in the `projects` directory. + +To learn more about algokit, visit [documentation](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/algokit.md). + +### GitHub Codespaces + +To get started execute: + +1. `algokit generate devcontainer` - invoking this command from the root of this repository will create a `devcontainer.json` file with all the configuration needed to run this project in a GitHub codespace. [Run the repository inside a codespace](https://docs.github.com/en/codespaces/getting-started/quickstart) to get started. +2. `algokit init` - invoke this command inside a github codespace to launch an interactive wizard to guide you through the process of creating a new AlgoKit project + +Powered by [Copier templates](https://copier.readthedocs.io/en/stable/). diff --git a/assets/arc-0058/arc-0058.code-workspace b/assets/arc-0058/arc-0058.code-workspace new file mode 100644 index 000000000..89e542de0 --- /dev/null +++ b/assets/arc-0058/arc-0058.code-workspace @@ -0,0 +1,32 @@ +{ + "folders": [ + { + "path": "./", + "name": "ROOT" + }, + { + "path": "projects/arc-0058" + } + ], + "settings": { + "files.exclude": { + "projects/": true + }, + "jest.disabledWorkspaceFolders": [ + "ROOT", + "projects" + ] + }, + "extensions": { + "recommendations": [ + "joshx.workspace-terminals" + ] + }, + "tasks": { + "version": "2.0.0", + "tasks": [] + }, + "launch": { + "configurations": [] + } +} \ No newline at end of file diff --git a/assets/arc-0058/projects/.gitkeep b/assets/arc-0058/projects/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/assets/arc-0058/projects/arc-0058/.algokit.toml b/assets/arc-0058/projects/arc-0058/.algokit.toml new file mode 100644 index 000000000..cc5965491 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/.algokit.toml @@ -0,0 +1,51 @@ +[algokit] +min_version = "v2.6.0" + +[generate.smart-contract] +description = "Generate a new smart contract for existing project" +path = ".algokit/generators/create_contract" + +[generate.env-file] +description = "Generate a new generic or Algorand network specific .env file" +path = ".algokit/generators/create_env_file" + +[project] +type = 'contract' +name = 'arc-0058' +artifacts = 'smart_contracts/artifacts' + +[project.deploy] +command = "npm run deploy:ci" +environment_secrets = [ + "DEPLOYER_MNEMONIC", + "DISPENSER_MNEMONIC", +] + +[project.deploy.localnet] +environment_secrets = [] + +[project.run] +# Commands intended for use locally and in CI +build = { commands = [ + 'npm run build', +], description = 'Build all smart contracts in the project' } +test = { commands = [ + 'npm run test', +], description = 'Run smart contract tests using vitest' } +audit = { commands = [ + 'npm run audit', +], description = 'Audit with better-npm-audit' } +lint = { commands = [ + 'npm run lint', + 'npm run format', +], description = 'Perform linting' } +audit-teal = { commands = [ + # 🚨 IMPORTANT 🚨: For strict TEAL validation, remove --exclude statements. The default starter contract is not for production. Ensure thorough testing and adherence to best practices in smart contract development. This is not a replacement for a professional audit. + 'algokit task analyze smart_contracts/artifacts --recursive --force --exclude rekey-to --exclude is-updatable --exclude missing-fee-check --exclude is-deletable --exclude can-close-asset --exclude can-close-account --exclude unprotected-deletable --exclude unprotected-updatable', +], description = 'Audit TEAL files' } + +# Commands intented for CI only, prefixed with `ci-` by convention +ci-teal-diff = { commands = [ + 'git add -N ./smart_contracts/artifacts', + 'git diff --exit-code --minimal ./smart_contracts/artifacts', +], description = 'Check TEAL files for differences' } diff --git a/assets/arc-0058/projects/arc-0058/.algokit/.copier-answers.yml b/assets/arc-0058/projects/arc-0058/.algokit/.copier-answers.yml new file mode 100644 index 000000000..e68a9967c --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/.algokit/.copier-answers.yml @@ -0,0 +1,9 @@ +# Changes here will be overwritten by Copier; NEVER EDIT MANUALLY +_commit: 0.3.2 +_src_path: gh:algorandfoundation/algokit-typescript-template +author_email: kyle.breeding@algorand.foundation +author_name: Kyle Breeding +contract_name: abstracted_account +preset_name: production +project_name: arc-0058 + diff --git a/assets/arc-0058/projects/arc-0058/.algokit/generators/create_contract/copier.yaml b/assets/arc-0058/projects/arc-0058/.algokit/generators/create_contract/copier.yaml new file mode 100644 index 000000000..82f2c4a42 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/.algokit/generators/create_contract/copier.yaml @@ -0,0 +1,15 @@ +_tasks: + - "echo '==== Successfully initialized new smart contract 🚀 ===='" + +contract_name: + type: str + help: Name of your new contract. + placeholder: "my-new-contract" + default: "my-new-contract" + +include_tests: + type: bool + help: Should we include testing files? + default: 'yes' + +_templates_suffix: ".j2" diff --git a/assets/arc-0058/projects/arc-0058/.algokit/generators/create_contract/smart_contracts/{{ contract_name }}/contract.algo.ts.j2 b/assets/arc-0058/projects/arc-0058/.algokit/generators/create_contract/smart_contracts/{{ contract_name }}/contract.algo.ts.j2 new file mode 100644 index 000000000..344c1a17d --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/.algokit/generators/create_contract/smart_contracts/{{ contract_name }}/contract.algo.ts.j2 @@ -0,0 +1,7 @@ +import { Contract } from '@algorandfoundation/algorand-typescript' + +export class {{ contract_name.split('_')|map('capitalize')|join }} extends Contract { + {% if preset_name != 'starter' %}public {% endif %}hello(name: string): string { + return `Hello, ${name}` + } +} diff --git a/assets/arc-0058/projects/arc-0058/.algokit/generators/create_contract/smart_contracts/{{ contract_name }}/deploy-config.ts.j2 b/assets/arc-0058/projects/arc-0058/.algokit/generators/create_contract/smart_contracts/{{ contract_name }}/deploy-config.ts.j2 new file mode 100644 index 000000000..4626980f4 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/.algokit/generators/create_contract/smart_contracts/{{ contract_name }}/deploy-config.ts.j2 @@ -0,0 +1,33 @@ +import { AlgorandClient } from '@algorandfoundation/algokit-utils' +import { {{ contract_name.split('_')|map('capitalize')|join }}Factory } from '../artifacts/{{ contract_name }}/{{ contract_name.split('_')|map('capitalize')|join }}Client' + +// Below is a showcase of various deployment options you can use in TypeScript Client +export async function deploy() { + console.log('=== Deploying {{ contract_name.split('_')|map('capitalize')|join }} ===') + + const algorand = AlgorandClient.fromEnvironment() + const deployer = await algorand.account.fromEnvironment('DEPLOYER') + + const factory = algorand.client.getTypedAppFactory({{ contract_name.split('_')|map('capitalize')|join }}Factory, { + defaultSender: deployer.addr, + }) + + const { appClient, result } = await factory.deploy({ onUpdate: 'append', onSchemaBreak: 'append' }) + + // If app was just created fund the app account + if (['create', 'replace'].includes(result.operationPerformed)) { + await algorand.send.payment({ + amount: (1).algo(), + sender: deployer.addr, + receiver: appClient.appAddress, + }) + } + + const method = 'hello' + const response = await appClient.send.hello({ + args: { name: 'world' }, + }) + console.log( + `Called ${method} on ${appClient.appClient.appName} (${appClient.appClient.appId}) with name = world, received: ${response.return}`, + ) +} diff --git a/assets/arc-0058/projects/arc-0058/.algokit/generators/create_contract/smart_contracts/{{ contract_name }}/{% if include_tests %}contract.e2e.spec.ts{% endif %}.j2 b/assets/arc-0058/projects/arc-0058/.algokit/generators/create_contract/smart_contracts/{{ contract_name }}/{% if include_tests %}contract.e2e.spec.ts{% endif %}.j2 new file mode 100644 index 000000000..146e27020 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/.algokit/generators/create_contract/smart_contracts/{{ contract_name }}/{% if include_tests %}contract.e2e.spec.ts{% endif %}.j2 @@ -0,0 +1,36 @@ +import { Config } from '@algorandfoundation/algokit-utils' +import { algorandFixture } from '@algorandfoundation/algokit-utils/testing' +import { Address } from 'algosdk' +import { beforeAll, beforeEach, describe, expect, test } from 'vitest' +import { {{ contract_name.split('_')|map('capitalize')|join }}Factory } from '../artifacts/{{ contract_name }}/{{ contract_name.split('_')|map('capitalize')|join }}Client' + +describe('{{ contract_name.split('_')|map('capitalize')|join }} contract', () => { + const localnet = algorandFixture() + beforeAll(() => { + Config.configure({ + debug: true, + // traceAll: true, + }) + }) + beforeEach(localnet.newScope) + + const deploy = async (account: Address) => { + const factory = localnet.algorand.client.getTypedAppFactory({{ contract_name.split('_')|map('capitalize')|join }}Factory, { + defaultSender: account, + }) + + const { appClient } = await factory.deploy({ onUpdate: 'append', onSchemaBreak: 'append' }) + return { client: appClient } + } + + test('says hello', async () => { + const { testAccount } = localnet.context + const { client } = await deploy(testAccount) + + const result = await client.send.hello({ args: { name: 'World' } }) + + expect(result.return).toBe('Hello World') + }) + +}) + diff --git a/assets/arc-0058/projects/arc-0058/.algokit/generators/create_contract/smart_contracts/{{ contract_name }}/{% if include_tests %}contract.spec.ts{% endif %}.j2 b/assets/arc-0058/projects/arc-0058/.algokit/generators/create_contract/smart_contracts/{{ contract_name }}/{% if include_tests %}contract.spec.ts{% endif %}.j2 new file mode 100644 index 000000000..e7a7414b2 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/.algokit/generators/create_contract/smart_contracts/{{ contract_name }}/{% if include_tests %}contract.spec.ts{% endif %}.j2 @@ -0,0 +1,14 @@ +import { TestExecutionContext } from '@algorandfoundation/algorand-typescript-testing' +import { describe, expect, it } from 'vitest' +import { {{ contract_name.split('_')|map('capitalize')|join }} } from './contract.algo' + +describe('{{ contract_name.split('_')|map('capitalize')|join }} contract', () => { + const ctx = new TestExecutionContext() + it('Logs the returned value when sayHello is called', () => { + const contract = ctx.contract.create({{ contract_name.split('_')|map('capitalize')|join }}) + + const result = contract.hello('Sally') + + expect(result).toBe('Hello Sally') + }) +}) diff --git a/assets/arc-0058/projects/arc-0058/.algokit/generators/create_env_file/copier.yaml b/assets/arc-0058/projects/arc-0058/.algokit/generators/create_env_file/copier.yaml new file mode 100644 index 000000000..afa2cace0 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/.algokit/generators/create_env_file/copier.yaml @@ -0,0 +1,49 @@ +_tasks: + - "echo '==== Successfully generated new .env file 🚀 ===='" + +target_network: + type: str + help: Name of your target network. + choices: + - mainnet + - testnet + - localnet + - custom + default: "localnet" + when: "{{ not use_generic_env }}" + +custom_network_name: + type: str + help: Name of your custom Algorand network. + placeholder: "custom" + when: "{{ not use_generic_env and target_network == 'custom' }}" + +is_localnet: + type: bool + help: Whether to deploy on localnet. + placeholder: "true" + default: "{{ target_network == 'localnet' and not use_generic_env }}" + when: 'false' + +is_testnet: + type: bool + help: Whether to deploy on testnet. + placeholder: "true" + default: "{{ target_network == 'testnet' and not use_generic_env }}" + when: 'false' + +is_mainnet: + type: bool + help: Whether to deploy on mainnet. + placeholder: "true" + default: "{{ target_network == 'mainnet' and not use_generic_env }}" + when: 'false' + +is_customnet: + type: bool + help: Whether to deploy on custom network. + placeholder: "true" + default: "{{ target_network == 'custom' and not use_generic_env }}" + when: 'false' + +_templates_suffix: ".j2" diff --git a/assets/arc-0058/projects/arc-0058/.algokit/generators/create_env_file/{% if is_customnet %}.env.{{custom_network_name}}{% endif %} b/assets/arc-0058/projects/arc-0058/.algokit/generators/create_env_file/{% if is_customnet %}.env.{{custom_network_name}}{% endif %} new file mode 100644 index 000000000..cfc9f21ec --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/.algokit/generators/create_env_file/{% if is_customnet %}.env.{{custom_network_name}}{% endif %} @@ -0,0 +1,7 @@ +# this file contains algorand network settings for interacting with testnet via algonode +ALGOD_TOKEN={YOUR_ALGOD_TOKEN} +ALGOD_SERVER={YOUR_ALGOD_SERVER_URL} +ALGOD_PORT={YOUR_ALGOD_PORT} +INDEXER_TOKEN={YOUR_INDEXER_TOKEN} +INDEXER_SERVER={YOUR_INDEXER_SERVER_URL} +INDEXER_PORT={YOUR_INDEXER_PORT} diff --git a/assets/arc-0058/projects/arc-0058/.algokit/generators/create_env_file/{% if is_localnet %}.env.localnet{% endif %} b/assets/arc-0058/projects/arc-0058/.algokit/generators/create_env_file/{% if is_localnet %}.env.localnet{% endif %} new file mode 100644 index 000000000..fcbf442dd --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/.algokit/generators/create_env_file/{% if is_localnet %}.env.localnet{% endif %} @@ -0,0 +1,7 @@ +# this file should contain environment variables specific to algokit localnet +ALGOD_TOKEN=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +ALGOD_SERVER=http://localhost +ALGOD_PORT=4001 +INDEXER_TOKEN=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +INDEXER_SERVER=http://localhost +INDEXER_PORT=8980 diff --git a/assets/arc-0058/projects/arc-0058/.algokit/generators/create_env_file/{% if is_mainnet %}.env.mainnet{% endif %} b/assets/arc-0058/projects/arc-0058/.algokit/generators/create_env_file/{% if is_mainnet %}.env.mainnet{% endif %} new file mode 100644 index 000000000..bb9a78733 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/.algokit/generators/create_env_file/{% if is_mainnet %}.env.mainnet{% endif %} @@ -0,0 +1,3 @@ +# this file contains algorand network settings for interacting with testnet via algonode +ALGOD_SERVER=https://mainnet-api.algonode.cloud +INDEXER_SERVER=https://mainnet-idx.algonode.cloud diff --git a/assets/arc-0058/projects/arc-0058/.algokit/generators/create_env_file/{% if is_testnet %}.env.testnet{% endif %} b/assets/arc-0058/projects/arc-0058/.algokit/generators/create_env_file/{% if is_testnet %}.env.testnet{% endif %} new file mode 100644 index 000000000..eeea43d7f --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/.algokit/generators/create_env_file/{% if is_testnet %}.env.testnet{% endif %} @@ -0,0 +1,3 @@ +# this file contains algorand network settings for interacting with testnet via algonode +ALGOD_SERVER=https://testnet-api.algonode.cloud +INDEXER_SERVER=https://testnet-idx.algonode.cloud diff --git a/assets/arc-0058/projects/arc-0058/.editorconfig b/assets/arc-0058/projects/arc-0058/.editorconfig new file mode 100644 index 000000000..0a71b0756 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/.editorconfig @@ -0,0 +1,7 @@ +root=true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true diff --git a/assets/arc-0058/projects/arc-0058/.gitignore b/assets/arc-0058/projects/arc-0058/.gitignore new file mode 100644 index 000000000..25494bf34 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/.gitignore @@ -0,0 +1,62 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +# Dependency directories +node_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# Editor/OS directories and files +.DS_Store +*.suo + +# IntelliJ family +.idea +!.idea/ +.idea/* +!.idea/runConfigurations/ + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +# Compiled code +dist/ +build/ + +# Coverage report +coverage + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# Received approval test files +*.received.* + +# AlgoKit +debug_traces/ +.algokit/static-analysis/ # Replace with .algokit/static-analysis/tealer/ to enable snapshot checks in CI +.algokit/sources diff --git a/assets/arc-0058/projects/arc-0058/.idea/runConfigurations/Build_Smart_Contract_application.xml b/assets/arc-0058/projects/arc-0058/.idea/runConfigurations/Build_Smart_Contract_application.xml new file mode 100644 index 000000000..c182f6ef7 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/.idea/runConfigurations/Build_Smart_Contract_application.xml @@ -0,0 +1,16 @@ + + + + diff --git a/assets/arc-0058/projects/arc-0058/.idea/runConfigurations/Build_Smart_Contract_application____LocalNet.xml b/assets/arc-0058/projects/arc-0058/.idea/runConfigurations/Build_Smart_Contract_application____LocalNet.xml new file mode 100644 index 000000000..d9fcbc348 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/.idea/runConfigurations/Build_Smart_Contract_application____LocalNet.xml @@ -0,0 +1,18 @@ + + + + diff --git a/assets/arc-0058/projects/arc-0058/.idea/runConfigurations/Build___Deploy_Smart_Contract_application.xml b/assets/arc-0058/projects/arc-0058/.idea/runConfigurations/Build___Deploy_Smart_Contract_application.xml new file mode 100644 index 000000000..beca23fee --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/.idea/runConfigurations/Build___Deploy_Smart_Contract_application.xml @@ -0,0 +1,18 @@ + + + + diff --git a/assets/arc-0058/projects/arc-0058/.idea/runConfigurations/Deploy_Built_Smart_Contract_application.xml b/assets/arc-0058/projects/arc-0058/.idea/runConfigurations/Deploy_Built_Smart_Contract_application.xml new file mode 100644 index 000000000..17b8154ef --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/.idea/runConfigurations/Deploy_Built_Smart_Contract_application.xml @@ -0,0 +1,16 @@ + + + + diff --git a/assets/arc-0058/projects/arc-0058/.idea/runConfigurations/Reset_AlgoKit_LocalNet.xml b/assets/arc-0058/projects/arc-0058/.idea/runConfigurations/Reset_AlgoKit_LocalNet.xml new file mode 100644 index 000000000..7f1236a4f --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/.idea/runConfigurations/Reset_AlgoKit_LocalNet.xml @@ -0,0 +1,17 @@ + + + + diff --git a/assets/arc-0058/projects/arc-0058/.idea/runConfigurations/Start_AlgoKit_LocalNet.xml b/assets/arc-0058/projects/arc-0058/.idea/runConfigurations/Start_AlgoKit_LocalNet.xml new file mode 100644 index 000000000..f699a7ac4 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/.idea/runConfigurations/Start_AlgoKit_LocalNet.xml @@ -0,0 +1,17 @@ + + + + diff --git a/assets/arc-0058/projects/arc-0058/.idea/runConfigurations/Stop_AlgoKit_LocalNet.xml b/assets/arc-0058/projects/arc-0058/.idea/runConfigurations/Stop_AlgoKit_LocalNet.xml new file mode 100644 index 000000000..e510cbce2 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/.idea/runConfigurations/Stop_AlgoKit_LocalNet.xml @@ -0,0 +1,17 @@ + + + + diff --git a/assets/arc-0058/projects/arc-0058/.npmrc b/assets/arc-0058/projects/arc-0058/.npmrc new file mode 100644 index 000000000..c42da845b --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/.npmrc @@ -0,0 +1 @@ +engine-strict = true diff --git a/assets/arc-0058/projects/arc-0058/.pre-commit-config.yaml b/assets/arc-0058/projects/arc-0058/.pre-commit-config.yaml new file mode 100644 index 000000000..a687bff29 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/.pre-commit-config.yaml @@ -0,0 +1,26 @@ +repos: + - repo: local + hooks: + - repo: local + hooks: + - id: prettier + name: Prettier + entry: npm run format + language: system + - repo: local + hooks: + - id: vitest + name: Vitest + entry: npm run test + language: system + # # Uncomment to enable TEAL static analysis using Tealer package + # - id: tealer + # name: tealer + # description: "Run AlgoKit `Tealer` for TEAL static analysis" + # entry: algokit + # language: system + # args: [project, run, "audit-teal"] + # require_serial: false + # additional_dependencies: [] + # minimum_pre_commit_version: "0" + # files: '^.*\.teal$' diff --git a/assets/arc-0058/projects/arc-0058/.prettierignore b/assets/arc-0058/projects/arc-0058/.prettierignore new file mode 100644 index 000000000..8ca71b1a1 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/.prettierignore @@ -0,0 +1,13 @@ +# don't ever format node_modules +node_modules +# don't lint format output (make sure it's set to your correct build folder name) +dist +build +# don't format nyc coverage output +coverage +# don't format generated types +**/generated/types.d.ts +**/generated/types.ts +# don't format ide files +.idea +smart_contracts/artifacts diff --git a/assets/arc-0058/projects/arc-0058/.prettierrc.js b/assets/arc-0058/projects/arc-0058/.prettierrc.js new file mode 100644 index 000000000..c484d0e14 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/.prettierrc.js @@ -0,0 +1,10 @@ +module.exports = { + singleQuote: true, + jsxSingleQuote: false, + semi: false, + tabWidth: 2, + trailingComma: 'all', + printWidth: 120, + endOfLine: 'lf', + arrowParens: 'always', +} diff --git a/assets/arc-0058/projects/arc-0058/.tours/getting-started-with-your-algokit-project.tour b/assets/arc-0058/projects/arc-0058/.tours/getting-started-with-your-algokit-project.tour new file mode 100644 index 000000000..ab71a74df --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/.tours/getting-started-with-your-algokit-project.tour @@ -0,0 +1,56 @@ +{ + "$schema": "https://aka.ms/codetour-schema", + "title": "Getting Started with Your AlgoKit Project", + "steps": [ + { + "file": "README.md", + "description": "Welcome to your brand new AlgoKit template-based project. In this tour, we will guide you through the main features and capabilities included in the template.", + "line": 3 + }, + { + "file": "README.md", + "description": "Start by ensuring you have followed the setup of pre-requisites.", + "line": 9 + }, + { + "file": ".algokit.toml", + "description": "This is the main configuration file used by algokit-cli to manage the project. The default template includes a starter 'Hello World' contract that is deployed via the `algokit-utils` package. To create a new smart contract, you can use the [`algokit generate`](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/features/generate.md) command and invoke a pre-bundled generator template by running `algokit generate smart-contract` (see how it is defined in the `.algokit.toml`, you can create your own generators if needed). This action will create a new folder in the `smart_contracts` directory, named after your project. Each folder contains a `contract.algo.ts` file, which is the entry point for your contract implementation, and `deployConfig.ts` file, that perform the deployment of the contract. Additionally you can define custom commands to run (similar to `npm` scripts), see definitions under `[project]` section in `.algokit.toml`.", + "line": 1 + }, + { + "file": "smart_contracts/hello_world/deploy-config.ts", + "description": "The default deployment scripts invoke a sample method on the starter contract that demonstrates how to interact with your deployed Algorand on-chain applications using the [`AlgoKit Typed Clients`](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/features/generate.md#1-typed-clients) feature. The invocation if deploy is aliased in `.algokit.toml` file, allowing simple deployments via `algokit project deploy` command.", + "line": 32 + }, + { + "file": "smart_contracts/abstracted_account/contact.spec.ts", + "description": "The default tests provided demonstrate an example of setting up in-memory fast unit tests with the Algorand TypeScript testing library that mocks AVM functionality.", + "line": 5 + }, + { + "file": "smart_contracts/abstracted_account/contact.e2e.spec.ts", + "description": "The default tests provided demonstrate an example of setting up an end-to-end test with fixtures, and testing smart contract calls against a LocalNet network via an AlgoKit typed client.", + "line": 7 + }, + { + "file": ".env.localnet.template", + "description": "Environment files are a crucial mechanism that allows you to set up the [`algokit deploy`](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/features/deploy.md) feature to simplify deploying your contracts in CI/CD environments (please note we still recommend careful evaluation when it comes to deployment to MainNet). Clone the file and remove the `.template` suffix to apply the changes to deployment scripts and launch configurations. The network prefix `localnet|testnet|mainnet` is primarily optimized for `algokit deploy`. The order of loading the variables is `.env.{network}` < `.env`.", + "line": 2 + }, + { + "file": ".vscode/launch.json", + "description": "Refer to the pre-bundled Visual Studio launch configurations, offering various options on how to execute the build and deployment of your smart contracts. Alternatively execute `algokit project run` to see list of available custom commands.", + "line": 5 + }, + { + "file": ".vscode/extensions.json", + "description": "We highly recommend installing the recommended extensions to get the most out of this template starter project in your VSCode IDE.", + "line": 3 + }, + { + "file": "smart_contracts/index.ts", + "description": "Uncomment the following line to enable artifacts required for the [AlgoKit AVM Debugger](https://github.com/algorandfoundation/algokit-avm-vscode-debugger) that run for every single call rather than just failures. This VSCode plugin is available on the [VSCode Extension Marketplace](https://marketplace.visualstudio.com/items?itemName=algorandfoundation.algokit-avm-vscode-debugger) for every call. A new folder will be automatically created in the `.algokit` directory with source maps of all TEAL contracts in this workspace, as well as traces that will appear in a folder at the root of the workspace. You can then use the traces as entry points to trigger the debug extension. Make sure to have the `.algokit.toml` file available at the root of the workspace.", + "line": 13 + } + ] +} diff --git a/assets/arc-0058/projects/arc-0058/.vscode/extensions.json b/assets/arc-0058/projects/arc-0058/.vscode/extensions.json new file mode 100644 index 000000000..cb7119273 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/.vscode/extensions.json @@ -0,0 +1,10 @@ +{ + "recommendations": [ + "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode", + "vitest.explorer", + "editorconfig.editorconfig", + "vsls-contrib.codetour", + "algorandfoundation.algokit-avm-vscode-debugger" + ] +} diff --git a/assets/arc-0058/projects/arc-0058/.vscode/launch.json b/assets/arc-0058/projects/arc-0058/.vscode/launch.json new file mode 100644 index 000000000..093ebb1d3 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/.vscode/launch.json @@ -0,0 +1,58 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Build & Deploy contracts", + "type": "node", + "request": "launch", + "runtimeExecutable": "npm", + "runtimeArgs": ["run", "deploy"], + "cwd": "${workspaceFolder}/smart_contracts", + "console": "integratedTerminal", + "skipFiles": ["/**", "node_modules/**"], + "preLaunchTask": "Build contracts (+ LocalNet)", + "env": { + "ALGOD_TOKEN": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "ALGOD_SERVER": "http://localhost", + "ALGOD_PORT": "4001", + "INDEXER_TOKEN": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "INDEXER_SERVER": "http://localhost", + "INDEXER_PORT": "8980" + } + }, + { + "name": "Deploy contracts", + "type": "node", + "request": "launch", + "runtimeExecutable": "npm", + "runtimeArgs": ["run", "deploy"], + "cwd": "${workspaceFolder}/smart_contracts", + "console": "integratedTerminal", + "skipFiles": ["/**", "node_modules/**"], + "env": { + "ALGOD_TOKEN": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "ALGOD_SERVER": "http://localhost", + "ALGOD_PORT": "4001", + "INDEXER_TOKEN": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "INDEXER_SERVER": "http://localhost", + "INDEXER_PORT": "8980" + } + }, + { + "name": "Build contracts", + "request": "launch", + "runtimeExecutable": "npm", + "runtimeArgs": ["run", "build"], + "cwd": "${workspaceFolder}", + "console": "integratedTerminal", + "skipFiles": ["/**", "node_modules/**"], + }, + { + "type": "avm", + "request": "launch", + "name": "Debug AVM executions", + "simulateTraceFile": "${workspaceFolder}/${command:PickSimulateTraceFile}", + "stopOnEntry": true + } + ] +} diff --git a/assets/arc-0058/projects/arc-0058/.vscode/settings.json b/assets/arc-0058/projects/arc-0058/.vscode/settings.json new file mode 100644 index 000000000..b829961af --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/.vscode/settings.json @@ -0,0 +1,18 @@ +{ + "files.eol": "\n", + "editor.formatOnSave": true, + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.codeActionsOnSave": { + "source.organizeImports": "explicit" + }, + "jest.enable": false, + "files.associations": { + ".github/**/*.yml": "github-actions-workflow" + }, + "eslint.enable": true, + "eslint.validate": ["typescript"], + "eslint.options": { + "extensions": [".ts"] + }, + "eslint.workingDirectories": ["./smart_contracts"] + } diff --git a/assets/arc-0058/projects/arc-0058/.vscode/tasks.json b/assets/arc-0058/projects/arc-0058/.vscode/tasks.json new file mode 100644 index 000000000..55310abcf --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/.vscode/tasks.json @@ -0,0 +1,69 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "Build contracts", + "type": "npm", + "script": "build", + "path": "${workspaceFolder}", + "options": { + "cwd": "${workspaceFolder}" + }, + "group": { + "kind": "build", + "isDefault": true + }, + "problemMatcher": [] + }, + { + "label": "Build contracts (+ LocalNet)", + "type": "npm", + "script": "build", + "path": "${workspaceFolder}", + "options": { + "cwd": "${workspaceFolder}" + }, + "dependsOn": "Start AlgoKit LocalNet", + "problemMatcher": [] + }, + { + "label": "Start AlgoKit LocalNet", + "command": "algokit", + "args": ["localnet", "start"], + "type": "shell", + "options": { + "cwd": "${workspaceFolder}" + }, + "problemMatcher": [] + }, + { + "label": "Stop AlgoKit LocalNet", + "command": "algokit", + "args": ["localnet", "stop"], + "type": "shell", + "options": { + "cwd": "${workspaceFolder}" + }, + "problemMatcher": [] + }, + { + "label": "Reset AlgoKit LocalNet", + "command": "algokit", + "args": ["localnet", "reset"], + "type": "shell", + "options": { + "cwd": "${workspaceFolder}" + }, + "problemMatcher": [] + }, + { + "label": "Analyze TEAL contracts with AlgoKit Tealer integration", + "command": "algokit", + "args": ["task", "analyze", "${workspaceFolder}/.algokit", "--recursive", "--force"], + "options": { + "cwd": "${workspaceFolder}" + }, + "problemMatcher": [] + } + ] +} diff --git a/assets/arc-0058/projects/arc-0058/README.md b/assets/arc-0058/projects/arc-0058/README.md new file mode 100644 index 000000000..c25df8eb4 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/README.md @@ -0,0 +1,160 @@ +# arc-0058 + +This project has been generated using AlgoKit. See below for default getting started instructions. + +# Setup + +### Pre-requisites + +- [Nodejs 22](https://nodejs.org/en/download) or later +- [AlgoKit CLI 2.5](https://github.com/algorandfoundation/algokit-cli?tab=readme-ov-file#install) or later +- [Docker](https://www.docker.com/) (only required for LocalNet) +- [Puya Compiler 4.4.4](https://pypi.org/project/puyapy/) or later + +> For interactive tour over the codebase, download [vsls-contrib.codetour](https://marketplace.visualstudio.com/items?itemName=vsls-contrib.codetour) extension for VS Code, then open the [`.codetour.json`](./.tours/getting-started-with-your-algokit-project.tour) file in code tour extension. + +### Initial Setup + +#### 1. Clone the Repository +Start by cloning this repository to your local machine. + +#### 2. Install Pre-requisites +Ensure the following pre-requisites are installed and properly configured: + +- **Docker**: Required for running a local Algorand network. +- **AlgoKit CLI**: Essential for project setup and operations. Verify installation with `algokit --version`, expecting `2.6.0` or later. + +#### 3. Bootstrap Your Local Environment +Run the following commands within the project folder: + +- **Setup Project**: Execute `algokit project bootstrap all` to install dependencies and setup npm dependencies. +- **Configure environment**: Execute `algokit generate env-file -a target_network localnet` to create a `.env.localnet` file with default configuration for `localnet`. +- **Start LocalNet**: Use `algokit localnet start` to initiate a local Algorand network. + +### Development Workflow + +#### Terminal +Directly manage and interact with your project using AlgoKit commands: + +1. **Build Contracts**: `algokit project run build` compiles all smart contracts. You can also specify a specific contract by passing the name of the contract folder as an extra argument. +For example: `algokit project run build -- hello_world` will only build the `hello_world` contract. +2. **Deploy**: Use `algokit project deploy localnet` to deploy contracts to the local network. You can also specify a specific contract by passing the name of the contract folder as an extra argument. +For example: `algokit project deploy localnet -- hello_world` will only deploy the `hello_world` contract. + +#### VS Code +For a seamless experience with breakpoint debugging and other features: + +1. **Open Project**: In VS Code, open the repository root. +2. **Install Extensions**: Follow prompts to install recommended extensions. +3. **Debugging**: + - Use `F5` to start debugging. + +#### JetBrains IDEs +While primarily optimized for VS Code, JetBrains IDEs are supported: + +1. **Open Project**: In your JetBrains IDE, open the repository root. +2. **Automatic Setup**: The IDE should configure the Node.js environment. +3. **Debugging**: Use `Shift+F10` or `Ctrl+R` to start debugging. Note: Windows users may encounter issues with pre-launch tasks due to a known bug. See [JetBrains forums](https://youtrack.jetbrains.com/issue/IDEA-277486/Shell-script-configuration-cannot-run-as-before-launch-task) for workarounds. + +## AlgoKit Workspaces and Project Management +This project supports both standalone and monorepo setups through AlgoKit workspaces. Leverage [`algokit project run`](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/features/project/run.md) commands for efficient monorepo project orchestration and management across multiple projects within a workspace. + +## AlgoKit Generators + +This template provides a set of [algokit generators](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/features/generate.md) that allow you to further modify the project instantiated from the template to fit your needs, as well as giving you a base to build your own extensions to invoke via the `algokit generate` command. + +### Generate Smart Contract + +By default the template creates a single `HelloWorld` contract under abstracted_account folder in the `smart_contracts` directory. To add a new contract: + +1. From the root of the project (`../`) execute `algokit generate smart-contract`. This will create a new starter smart contract and deployment configuration file under `{your_contract_name}` subfolder in the `smart_contracts` directory. +2. Each contract potentially has different creation parameters and deployment steps. Hence, you need to define your deployment logic in `deploy-config.ts` file. +3. Technically, you need to reference your contract deployment logic in the `index.ts` file. However, by default, `index.ts` will auto import all TypeScript deployment files under `smart_contracts` directory. If you want to manually import specific contracts, modify the default code provided by the template in `index.ts` file. + +> Please note, above is just a suggested convention tailored for the base configuration and structure of this template. The default code supplied by the template in the `index.ts` file is tailored for the suggested convention. You are free to modify the structure and naming conventions as you see fit. + +### Generate '.env' files + +By default the template instance does not contain any env files to deploy to different networks. Using [`algokit project deploy`](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/features/project/deploy.md) against `localnet` | `testnet` | `mainnet` will use default values for `algod` and `indexer` unless overwritten via `.env` or `.env.{target_network}`. + +To generate a new `.env` or `.env.{target_network}` file, run `algokit generate env-file` + +### Debugging Smart Contracts + +This project is optimized to work with AlgoKit AVM Debugger extension. To activate it: + +Refer to the commented header in the `index.ts` file in the `smart_contracts` folder.Since you have opted in to include VSCode launch configurations in your project, you can also use the `Debug TEAL via AlgoKit AVM Debugger` launch configuration to interactively select an available trace file and launch the debug session for your smart contract. + + +For information on using and setting up the `AlgoKit AVM Debugger` VSCode extension refer [here](https://github.com/algorandfoundation/algokit-avm-vscode-debugger). To install the extension from the VSCode Marketplace, use the following link: [AlgoKit AVM Debugger extension](https://marketplace.visualstudio.com/items?itemName=algorandfoundation.algokit-avm-vscode-debugger).### Continuous Integration / Continuous Deployment (CI/CD) + +This project uses [GitHub Actions](https://docs.github.com/en/actions/learn-github-actions/understanding-github-actions) to define CI/CD workflows, which are located in the [.github/workflows](`../../.github/workflows`) folder. + +> Please note, if you instantiated the project with --workspace flag in `algokit init` it will automatically attempt to move the contents of the `.github` folder to the root of the workspace. + +### AlgoKit Workspaces + +To define custom `algokit project run` commands refer to [documentation](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/features/project/run.md). This allows orchestration of commands spanning across multiple projects within an algokit workspace based project (monorepo). + +#### Setting up GitHub for CI/CD workflow and TestNet deployment + + 1. Every time you have a change to your smart contract, and when you first initialize the project you need to [build the contract](#initial-setup) and then commit the `smart_contracts/artifacts` folder so the [output stability](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/articles/output_stability.md) tests pass + 2. Decide what values you want to use for the `allowUpdate` and `allowDelete` parameters specified in [`deploy-config.ts`](./smart_contracts/abstracted_account/deploy-config.ts). + When deploying to LocalNet these values are both set to `true` for convenience. But for non-LocalNet networks + they are more conservative and use `false` + These default values will allow the smart contract to be deployed initially, but will not allow the app to be updated or deleted if is changed and the build will instead fail. + To help you decide it may be helpful to read the [AlgoKit Utils app deployment documentation](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/docs/capabilities/app-deploy.md) or the [AlgoKit smart contract deployment architecture](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/architecture-decisions/2023-01-12_smart-contract-deployment.md#upgradeable-and-deletable-contracts). + 3. Create a [Github Environment](https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment#creating-an-environment) named `Test`. + Note: If you have a private repository and don't have GitHub Enterprise then Environments won't work and you'll need to convert the GitHub Action to use a different approach. Ignore this step if you picked `Starter` preset. + 4. Create or obtain a mnemonic for an Algorand account for use on TestNet to deploy apps, referred to as the `DEPLOYER` account. + 5. Store the mnemonic as a [secret](https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment#environment-secrets) `DEPLOYER_MNEMONIC` + in the Test environment created in step 3. + 6. The account used to deploy the smart contract will require enough funds to create the app, and also fund it. There are two approaches available here: + * Either, ensure the account is funded outside of CI/CD. + In Testnet, funds can be obtained by using the [Algorand TestNet dispenser](https://bank.testnet.algorand.network/) and we recommend provisioning 50 ALGOs. + * Or, fund the account as part of the CI/CD process by using a `DISPENSER_MNEMONIC` GitHub Environment secret to point to a separate `DISPENSER` account that you maintain ALGOs in (similarly, you need to provision ALGOs into this account using the [TestNet dispenser](https://bank.testnet.algorand.network/)). + +#### Continuous Integration + +For pull requests and pushes to `main` branch against this repository the following checks are automatically performed by GitHub Actions: + - NPM dependencies are audited using [better-npm-audit](https://github.com/jeemok/better-npm-audit#readme) + - Code formatting is performed using [Prettier](https://prettier.io/) + - Linting is checked using [ESLint](https://eslint.org/) +- The base framework for testing is [vitest](https://vitest.dev/), and the project includes two separate kinds of tests: +- - `Algorand TypeScript` smart contract unit tests, that are run using [`algorand-typescript-testing`](https://github.com/algorandfoundation/algorand-typescript-testing), which are executed in a Node.js intepreter emulating major AVM behaviour +- - End-to-end (e2e) `AppClient` tests that are run against `algokit localnet` and test the behaviour in a real network environment + - Smart contract artifacts are built + - Smart contract artifacts are checked for [output stability](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/articles/output_stability.md). + - Smart contract is deployed to a AlgoKit LocalNet instance + +> NOTE: By default smart contract artifacts are compiled with `--debug-level` set to 0, to change this, modify the compiler invocation under the `build` script in `package.json` + +#### Continuous Deployment + +For pushes to `main` branch, after the above checks pass, the following deployment actions are performed: + - The smart contract(s) are deployed to TestNet using [AlgoNode](https://algonode.io). + +> Please note deployment is also performed via `algokit deploy` command which can be invoked both via CI as seen on this project, or locally. For more information on how to use `algokit deploy` please see [AlgoKit documentation](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/features/deploy.md). + +# Tools + +This project makes use of Algorand TypeScript to build Algorand smart contracts. The following tools are in use: + +- [Algorand](https://www.algorand.com/) - Layer 1 Blockchain; [Developer portal](https://dev.algorand.co/), [Why Algorand?](https://dev.algorand.co/getting-started/why-algorand/) +- [AlgoKit](https://github.com/algorandfoundation/algokit-cli) - One-stop shop tool for developers building on the Algorand network; [docs](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/algokit.md), [intro tutorial](https://github.com/algorandfoundation/algokit-cli/blob/main/docs/tutorials/intro.md) +- [Algorand TypeScript](https://github.com/algorandfoundation/puya-ts/) - A semantically and syntactically compatible, typed TypeScript language that works with standard TypeScript tooling and allows you to express smart contracts (apps) and smart signatures (logic signatures) for deployment on the Algorand Virtual Machine (AVM); [docs](https://github.com/algorandfoundation/puya-ts/), [examples](https://github.com/algorandfoundation/puya-ts/tree/main/examples) +- [AlgoKit Utils](https://github.com/algorandfoundation/algokit-utils-ts) - A set of core Algorand utilities that make it easier to build solutions on Algorand. +- [NPM](https://www.npmjs.com/): TypeScript packaging and dependency management. +- [TypeScript](https://www.typescriptlang.org/): Strongly typed programming language that builds on JavaScript +- [ts-node-dev](https://github.com/wclr/ts-node-dev): TypeScript development execution environment- [Prettier](https://prettier.io/): A code formatter.- [ESLint](https://eslint.org/): A JavaScript / TypeScript linter. +- [vitest](https://vitest.dev/): Automated testing. +- [better-npm-audit](https://github.com/jeemok/better-npm-audit#readme): Tool for scanning JavaScript / TypeScript environments for packages with known vulnerabilities. +- [pre-commit](https://pre-commit.com/): A framework for managing and maintaining multi-language pre-commit hooks, to enable pre-commit you need to run `pre-commit install` in the root of the repository. This will install the pre-commit hooks and run them against modified files when committing. If any of the hooks fail, the commit will be aborted. To run the hooks on all files, use `pre-commit run --all-files`. + + +It has also been configured to have a productive dev experience out of the box in [VS Code](https://code.visualstudio.com/), see the [.vscode](./.vscode) folder. + + + +It has also been configured to have a productive dev experience out of the box in [Jetbrains IDEs](https://www.jetbrains.com/ides/), see the [.idea](./.idea) folder. + diff --git a/assets/arc-0058/projects/arc-0058/eslint.config.mjs b/assets/arc-0058/projects/arc-0058/eslint.config.mjs new file mode 100644 index 000000000..4d2428a33 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/eslint.config.mjs @@ -0,0 +1,18 @@ +import eslint from '@eslint/js' +import tseslint from 'typescript-eslint' +import globals from 'globals' + +export default tseslint.config( + eslint.configs.recommended, + tseslint.configs.recommended, + { + languageOptions: { + globals: { + ...globals.node, + }, + }, + rules: { + '@typescript-eslint/explicit-member-accessibility': 'warn', + }, + }, +); diff --git a/assets/arc-0058/projects/arc-0058/jest.config.js b/assets/arc-0058/projects/arc-0058/jest.config.js new file mode 100644 index 000000000..45b355708 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/jest.config.js @@ -0,0 +1,10 @@ +/** @type {import('ts-jest').JestConfigWithTsJest} */ +module.exports = { + preset: 'ts-jest', + testEnvironment: 'node', + testTimeout: 60000, + // temporary fix for bigint serialization issue + // https://github.com/wormholelabs-xyz/wormhole-sdk-ts/commit/afab351e7ba90ec9abccdaf9edd220fe363f2399#diff-860bd1f15d1e0bafcfc6f62560524f588e6d6bf56d4ab1b0f6f8146461558730R15 + maxWorkers: "50%", + workerThreads: true, +}; diff --git a/assets/arc-0058/projects/arc-0058/package-lock.json b/assets/arc-0058/projects/arc-0058/package-lock.json new file mode 100644 index 000000000..49c6e30a0 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/package-lock.json @@ -0,0 +1,9027 @@ +{ + "name": "smart_contracts", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "smart_contracts", + "version": "1.0.0", + "dependencies": { + "@algorandfoundation/algorand-typescript": "^1.0.1", + "@jest/globals": "^29.7.0", + "jest": "^29.7.0", + "ts-jest": "^29.4.0" + }, + "devDependencies": { + "@algorandfoundation/algokit-client-generator": "^6.0.1-beta.2", + "@algorandfoundation/algokit-utils": "^9.1.2", + "@algorandfoundation/algokit-utils-debug": "^1.0.4", + "@algorandfoundation/algorand-typescript-testing": "^1.0.1", + "@algorandfoundation/puya-ts": "^1.0.1", + "@eslint/js": "^9.18.0", + "@rollup/plugin-typescript": "^12.1.2", + "@tsconfig/node22": "^22.0.0", + "@vitest/coverage-v8": "^2.1.8", + "algosdk": "^3.4.0", + "better-npm-audit": "^3.11.0", + "dotenv": "^16.4.7", + "eslint": "^9.18.0", + "prettier": "^3.4.2", + "ts-node-dev": "^2.0.0", + "typescript": "^5.7.3", + "typescript-eslint": "^8.19.1", + "vitest": "^2.1.8" + }, + "engines": { + "node": ">=22.0", + "npm": ">=9.0" + } + }, + "node_modules/@algorandfoundation/algokit-client-generator": { + "version": "6.0.1-beta.3", + "resolved": "https://registry.npmjs.org/@algorandfoundation/algokit-client-generator/-/algokit-client-generator-6.0.1-beta.3.tgz", + "integrity": "sha512-M8/S1pZotIY7uzljXImSdo7+W3mzXKszy92tTA65yp0XEv/0frs4tX/EECGQpgRKz8z6W+NJlf1WZbLQY5ipZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.4.1", + "change-case": "^5.4.4", + "commander": "^14.0.0", + "jsonschema": "^1.5.0" + }, + "bin": { + "algokit-client-generator": "bin/cli.mjs", + "algokitgen": "bin/cli.mjs" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "@algorandfoundation/algokit-utils": "^9.0.0", + "algosdk": "^3.2.0" + } + }, + "node_modules/@algorandfoundation/algokit-utils": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@algorandfoundation/algokit-utils/-/algokit-utils-9.1.2.tgz", + "integrity": "sha512-gZTg9H5FAce+QcT79y8Eun8by+MtlgocYjIUvP2ahh2O0U0HCcTSjVux5lQZj5+EsSaL3sR0p+BmjXnPAMplbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "algosdk": "^3.0.0" + } + }, + "node_modules/@algorandfoundation/algokit-utils-debug": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@algorandfoundation/algokit-utils-debug/-/algokit-utils-debug-1.0.4.tgz", + "integrity": "sha512-Sx1M6DTRUcgrOc5Q289G1K3xKf/8JzGXnB6LD7DXEnpnkNLenHForlqHH5vAsN1RY6H2viwYSxEFmKItqY9WDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^6.0.3" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "@algorandfoundation/algokit-utils": "^9.0.0", + "algosdk": "^3.0.0" + } + }, + "node_modules/@algorandfoundation/algorand-typescript": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@algorandfoundation/algorand-typescript/-/algorand-typescript-1.0.1.tgz", + "integrity": "sha512-XRn1D2/wU66j878/MmSS2kIkq8M8EgECiMeLMzatFIztVZclh3R3z+4CvXbF/WzluWUXCC7cyYmRWttrvqfYTQ==", + "peerDependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@algorandfoundation/algorand-typescript-testing": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@algorandfoundation/algorand-typescript-testing/-/algorand-typescript-testing-1.0.1.tgz", + "integrity": "sha512-KXgvxnmQh8JdJN1v6b187Oxn09pAsKbzTviVymguwhKTRDuhkzwwBHmMzwq21PV+3RU9xa1zDQ5kTDp016+tRg==", + "dev": true, + "dependencies": { + "@algorandfoundation/algorand-typescript": "1.0.1", + "@algorandfoundation/puya-ts": "1.0.1", + "elliptic": "^6.6.1", + "js-sha256": "^0.11.0", + "js-sha3": "^0.9.3", + "js-sha512": "^0.9.0", + "tweetnacl": "^1.0.3", + "upath": "^2.0.1" + } + }, + "node_modules/@algorandfoundation/puya-ts": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@algorandfoundation/puya-ts/-/puya-ts-1.0.1.tgz", + "integrity": "sha512-rTDLzp8ER0O5ueVWb/rrDQ17qGXFaqi+QG/4bRg0gCoJkCYkRhH19XDFn4VlPTD/E2MUepPl5qWduZe+h1Zy3g==", + "bundleDependencies": [ + "vscode-jsonrpc", + "vscode-languageserver", + "vscode-languageserver-textdocument" + ], + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@algorandfoundation/algorand-typescript": "1.0.1", + "arcsecond": "^5.0.0", + "argparse": "^2.0.1", + "chalk": "^5.4.1", + "change-case": "^5.4.4", + "cross-spawn": "7.0.6", + "glob": "^11.0.3", + "minimatch": "^10.0.3", + "pathe": "^2.0.3", + "polytype": "^0.17.0", + "signal-exit": "^4.1.0", + "tar": "^7.4.3", + "tslib": "^2.8.1", + "typescript": "^5.8.3", + "vscode-jsonrpc": "^8.2.0", + "vscode-languageserver": "^9.0.1", + "vscode-languageserver-textdocument": "^1.0.12", + "vscode-uri": "^3.1.0", + "which": "^5.0.0" + }, + "bin": { + "download-puya-binary": "bin/download-puya-binary.mjs", + "puya-ts": "bin/run-cli.mjs", + "puyats": "bin/run-cli.mjs", + "puyats-ls": "bin/puyats-ls.mjs" + } + }, + "node_modules/@algorandfoundation/puya-ts/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.4.tgz", + "integrity": "sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.4.tgz", + "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.4", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.4", + "@babel/types": "^7.28.4", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", + "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.3", + "@babel/types": "^7.28.2", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", + "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.4" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.4.tgz", + "integrity": "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.4", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", + "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "license": "MIT" + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz", + "integrity": "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.0.tgz", + "integrity": "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz", + "integrity": "sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.0.tgz", + "integrity": "sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz", + "integrity": "sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz", + "integrity": "sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz", + "integrity": "sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz", + "integrity": "sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz", + "integrity": "sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz", + "integrity": "sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz", + "integrity": "sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz", + "integrity": "sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz", + "integrity": "sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz", + "integrity": "sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz", + "integrity": "sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz", + "integrity": "sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz", + "integrity": "sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz", + "integrity": "sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz", + "integrity": "sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz", + "integrity": "sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz", + "integrity": "sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz", + "integrity": "sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz", + "integrity": "sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz", + "integrity": "sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz", + "integrity": "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.0.tgz", + "integrity": "sha512-WUFvV4WoIwW8Bv0KeKCIIEgdSiFOsulyN0xrMu+7z43q/hkOLXjvb5u7UC9jDxvRzcrbEmuZBX5yJZz1741jog==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.16.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.16.0.tgz", + "integrity": "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "9.37.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.37.0.tgz", + "integrity": "sha512-jaS+NJ+hximswBG6pjNX0uEJZkrT0zwpVi3BA3vX22aFGjJjmgSTSmPpZCRKmoBL5VY/M6p0xsSJx7rk7sy5gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.0.tgz", + "integrity": "sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.16.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/console/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/core/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/core/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "license": "MIT", + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@jest/reporters/node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/reporters/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@jest/reporters/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rollup/plugin-typescript": { + "version": "12.1.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-12.1.4.tgz", + "integrity": "sha512-s5Hx+EtN60LMlDBvl5f04bEiFZmAepk27Q+mr85L/00zPDn1jtzlTV6FWn81MaIwqfWzKxmOJrBWHU6vtQyedQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.1.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.14.0||^3.0.0||^4.0.0", + "tslib": "*", + "typescript": ">=3.7.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + }, + "tslib": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.4.tgz", + "integrity": "sha512-BTm2qKNnWIQ5auf4deoetINJm2JzvihvGb9R6K/ETwKLql/Bb3Eg2H1FBp1gUb4YGbydMA3jcmQTR73q7J+GAA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.4.tgz", + "integrity": "sha512-P9LDQiC5vpgGFgz7GSM6dKPCiqR3XYN1WwJKA4/BUVDjHpYsf3iBEmVz62uyq20NGYbiGPR5cNHI7T1HqxNs2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.4.tgz", + "integrity": "sha512-QRWSW+bVccAvZF6cbNZBJwAehmvG9NwfWHwMy4GbWi/BQIA/laTIktebT2ipVjNncqE6GLPxOok5hsECgAxGZg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.4.tgz", + "integrity": "sha512-hZgP05pResAkRJxL1b+7yxCnXPGsXU0fG9Yfd6dUaoGk+FhdPKCJ5L1Sumyxn8kvw8Qi5PvQ8ulenUbRjzeCTw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.4.tgz", + "integrity": "sha512-xmc30VshuBNUd58Xk4TKAEcRZHaXlV+tCxIXELiE9sQuK3kG8ZFgSPi57UBJt8/ogfhAF5Oz4ZSUBN77weM+mQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.4.tgz", + "integrity": "sha512-WdSLpZFjOEqNZGmHflxyifolwAiZmDQzuOzIq9L27ButpCVpD7KzTRtEG1I0wMPFyiyUdOO+4t8GvrnBLQSwpw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.4.tgz", + "integrity": "sha512-xRiOu9Of1FZ4SxVbB0iEDXc4ddIcjCv2aj03dmW8UrZIW7aIQ9jVJdLBIhxBI+MaTnGAKyvMwPwQnoOEvP7FgQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.4.tgz", + "integrity": "sha512-FbhM2p9TJAmEIEhIgzR4soUcsW49e9veAQCziwbR+XWB2zqJ12b4i/+hel9yLiD8pLncDH4fKIPIbt5238341Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.4.tgz", + "integrity": "sha512-4n4gVwhPHR9q/g8lKCyz0yuaD0MvDf7dV4f9tHt0C73Mp8h38UCtSCSE6R9iBlTbXlmA8CjpsZoujhszefqueg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.4.tgz", + "integrity": "sha512-u0n17nGA0nvi/11gcZKsjkLj1QIpAuPFQbR48Subo7SmZJnGxDpspyw2kbpuoQnyK+9pwf3pAoEXerJs/8Mi9g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.4.tgz", + "integrity": "sha512-0G2c2lpYtbTuXo8KEJkDkClE/+/2AFPdPAbmaHoE870foRFs4pBrDehilMcrSScrN/fB/1HTaWO4bqw+ewBzMQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.4.tgz", + "integrity": "sha512-teSACug1GyZHmPDv14VNbvZFX779UqWTsd7KtTM9JIZRDI5NUwYSIS30kzI8m06gOPB//jtpqlhmraQ68b5X2g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.4.tgz", + "integrity": "sha512-/MOEW3aHjjs1p4Pw1Xk4+3egRevx8Ji9N6HUIA1Ifh8Q+cg9dremvFCUbOX2Zebz80BwJIgCBUemjqhU5XI5Eg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.4.tgz", + "integrity": "sha512-1HHmsRyh845QDpEWzOFtMCph5Ts+9+yllCrREuBR/vg2RogAQGGBRC8lDPrPOMnrdOJ+mt1WLMOC2Kao/UwcvA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.4.tgz", + "integrity": "sha512-seoeZp4L/6D1MUyjWkOMRU6/iLmCU2EjbMTyAG4oIOs1/I82Y5lTeaxW0KBfkUdHAWN7j25bpkt0rjnOgAcQcA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.4.tgz", + "integrity": "sha512-Wi6AXf0k0L7E2gteNsNHUs7UMwCIhsCTs6+tqQ5GPwVRWMaflqGec4Sd8n6+FNFDw9vGcReqk2KzBDhCa1DLYg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.4.tgz", + "integrity": "sha512-dtBZYjDmCQ9hW+WgEkaffvRRCKm767wWhxsFW3Lw86VXz/uJRuD438/XvbZT//B96Vs8oTA8Q4A0AfHbrxP9zw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.4.tgz", + "integrity": "sha512-1ox+GqgRWqaB1RnyZXL8PD6E5f7YyRUJYnCqKpNzxzP0TkaUh112NDrR9Tt+C8rJ4x5G9Mk8PQR3o7Ku2RKqKA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.4.tgz", + "integrity": "sha512-8GKr640PdFNXwzIE0IrkMWUNUomILLkfeHjXBi/nUvFlpZP+FA8BKGKpacjW6OUUHaNI6sUURxR2U2g78FOHWQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.4.tgz", + "integrity": "sha512-AIy/jdJ7WtJ/F6EcfOb2GjR9UweO0n43jNObQMb6oGxkYTfLcnN7vYYpG+CN3lLxrQkzWnMOoNSHTW54pgbVxw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.4.tgz", + "integrity": "sha512-UF9KfsH9yEam0UjTwAgdK0anlQ7c8/pWPU2yVjyWcF1I1thABt6WXE47cI71pGiZ8wGvxohBoLnxM04L/wj8mQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.4.tgz", + "integrity": "sha512-bf9PtUa0u8IXDVxzRToFQKsNCRz9qLYfR/MpECxl4mRoWYjAeFjgxj1XdZr2M/GNVpT05p+LgQOHopYDlUu6/w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "license": "MIT" + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node22": { + "version": "22.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node22/-/node22-22.0.2.tgz", + "integrity": "sha512-Kmwj4u8sDRDrMYRoN9FDEcXD8UpBSaPQQ24Gz+Gamqfm7xxn+GBR7ge/Z7pK8OXNGyUzbSwJj+TH6B+DS/epyA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.7.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.7.1.tgz", + "integrity": "sha512-CmyhGZanP88uuC5GpWU9q+fI61j2SkhO3UGMUdfYRE6Bcy0ccyzn1Rqj9YAB/ZY4kOXmNf0ocah5GtphmLMP6Q==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.14.0" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "license": "MIT" + }, + "node_modules/@types/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/strip-json-comments": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz", + "integrity": "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/yargs": { + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.0.tgz", + "integrity": "sha512-hA8gxBq4ukonVXPy0OKhiaUh/68D0E88GSmtC1iAEnGaieuDi38LhS7jdCHRLi6ErJBNDGCzvh5EnzdPwUc0DA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.46.0", + "@typescript-eslint/type-utils": "8.46.0", + "@typescript-eslint/utils": "8.46.0", + "@typescript-eslint/visitor-keys": "8.46.0", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.46.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.0.tgz", + "integrity": "sha512-n1H6IcDhmmUEG7TNVSspGmiHHutt7iVKtZwRppD7e04wha5MrkV1h3pti9xQLcCMt6YWsncpoT0HMjkH1FNwWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.46.0", + "@typescript-eslint/types": "8.46.0", + "@typescript-eslint/typescript-estree": "8.46.0", + "@typescript-eslint/visitor-keys": "8.46.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.0.tgz", + "integrity": "sha512-OEhec0mH+U5Je2NZOeK1AbVCdm0ChyapAyTeXVIYTPXDJ3F07+cu87PPXcGoYqZ7M9YJVvFnfpGg1UmCIqM+QQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.46.0", + "@typescript-eslint/types": "^8.46.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.0.tgz", + "integrity": "sha512-lWETPa9XGcBes4jqAMYD9fW0j4n6hrPtTJwWDmtqgFO/4HF4jmdH/Q6wggTw5qIT5TXjKzbt7GsZUBnWoO3dqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.46.0", + "@typescript-eslint/visitor-keys": "8.46.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.0.tgz", + "integrity": "sha512-WrYXKGAHY836/N7zoK/kzi6p8tXFhasHh8ocFL9VZSAkvH956gfeRfcnhs3xzRy8qQ/dq3q44v1jvQieMFg2cw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.46.0.tgz", + "integrity": "sha512-hy+lvYV1lZpVs2jRaEYvgCblZxUoJiPyCemwbQZ+NGulWkQRy0HRPYAoef/CNSzaLt+MLvMptZsHXHlkEilaeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.46.0", + "@typescript-eslint/typescript-estree": "8.46.0", + "@typescript-eslint/utils": "8.46.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.0.tgz", + "integrity": "sha512-bHGGJyVjSE4dJJIO5yyEWt/cHyNwga/zXGJbJJ8TiO01aVREK6gCTu3L+5wrkb1FbDkQ+TKjMNe9R/QQQP9+rA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.0.tgz", + "integrity": "sha512-ekDCUfVpAKWJbRfm8T1YRrCot1KFxZn21oV76v5Fj4tr7ELyk84OS+ouvYdcDAwZL89WpEkEj2DKQ+qg//+ucg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.46.0", + "@typescript-eslint/tsconfig-utils": "8.46.0", + "@typescript-eslint/types": "8.46.0", + "@typescript-eslint/visitor-keys": "8.46.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.0.tgz", + "integrity": "sha512-nD6yGWPj1xiOm4Gk0k6hLSZz2XkNXhuYmyIrOWcHoPuAhjT9i5bAG+xbWPgFeNR8HPHHtpNKdYUXJl/D3x7f5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.46.0", + "@typescript-eslint/types": "8.46.0", + "@typescript-eslint/typescript-estree": "8.46.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.0.tgz", + "integrity": "sha512-FrvMpAK+hTbFy7vH5j1+tMYHMSKLE6RzluFJlkFNKD0p9YsUT75JlBSmr5so3QRzvMwU5/bIEdeNrxm8du8l3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.46.0", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vitest/coverage-v8": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.9.tgz", + "integrity": "sha512-Z2cOr0ksM00MpEfyVE8KXIYPEcBFxdbLSs56L8PO0QQMxt/6bDj45uQfxoc96v05KW3clk7vvgP0qfDit9DmfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "@bcoe/v8-coverage": "^0.2.3", + "debug": "^4.3.7", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^5.0.6", + "istanbul-reports": "^3.1.7", + "magic-string": "^0.30.12", + "magicast": "^0.3.5", + "std-env": "^3.8.0", + "test-exclude": "^7.0.1", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@vitest/browser": "2.1.9", + "vitest": "2.1.9" + }, + "peerDependenciesMeta": { + "@vitest/browser": { + "optional": true + } + } + }, + "node_modules/@vitest/expect": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.9.tgz", + "integrity": "sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "2.1.9", + "@vitest/utils": "2.1.9", + "chai": "^5.1.2", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.9.tgz", + "integrity": "sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "2.1.9", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.12" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/mocker/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/@vitest/pretty-format": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.9.tgz", + "integrity": "sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.9.tgz", + "integrity": "sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "2.1.9", + "pathe": "^1.1.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.9.tgz", + "integrity": "sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "2.1.9", + "magic-string": "^0.30.12", + "pathe": "^1.1.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.9.tgz", + "integrity": "sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^3.0.2" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.9.tgz", + "integrity": "sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "2.1.9", + "loupe": "^3.1.2", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "devOptional": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/algorand-msgpack": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/algorand-msgpack/-/algorand-msgpack-1.1.0.tgz", + "integrity": "sha512-08k7pBQnkaUB5p+jL7f1TRaUIlTSDE0cesFu1mD7llLao+1cAhtvvZmGE3OnisTd0xOn118QMw74SRqddqaYvw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 14" + } + }, + "node_modules/algosdk": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/algosdk/-/algosdk-3.5.2.tgz", + "integrity": "sha512-frhGtZl1JvfrLRKmMvUm880wj4OiWsWo2FhbreNWh7pdFsKuWPj60fV682wt/CYefLI70iwHavPOwGBkTVt0VA==", + "dev": true, + "license": "MIT", + "dependencies": { + "algorand-msgpack": "^1.1.0", + "hi-base32": "^0.5.1", + "js-sha256": "^0.9.0", + "js-sha3": "^0.8.0", + "js-sha512": "^0.8.0", + "json-bigint": "^1.0.0", + "tweetnacl": "^1.0.3", + "vlq": "^2.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/algosdk/node_modules/js-sha256": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", + "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==", + "dev": true, + "license": "MIT" + }, + "node_modules/algosdk/node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/algosdk/node_modules/js-sha512": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha512/-/js-sha512-0.8.0.tgz", + "integrity": "sha512-PWsmefG6Jkodqt+ePTvBZCSMFgN7Clckjd0O7su3I0+BW2QWUTJNzjktHsztGLhncP2h8mcF9V9Y2Ha59pAViQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/arcsecond": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/arcsecond/-/arcsecond-5.0.0.tgz", + "integrity": "sha512-J/fHdyadnsIencRsM6oUSsraCKG+Ni9Udcgr/eusxjTzX3SEQtCUQSpP0YtImFPfIK6DdT1nqwN0ng4FqNmwgA==", + "dev": true, + "license": "MIT" + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "license": "MIT", + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.8.16", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.16.tgz", + "integrity": "sha512-OMu3BGQ4E7P1ErFsIPpbJh0qvDudM/UuJeHgkAvfWe+0HFJCXh+t/l8L6fVLR55RI/UbKrVLnAXZSVwd9ysWYw==", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/better-npm-audit": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/better-npm-audit/-/better-npm-audit-3.11.0.tgz", + "integrity": "sha512-/Pt05DK6HQaRjWDc5McsCkJBZYfhgQGneKnxzPJExtRq38NttO1Hm30m0GVQeZogE94LVNBVrhWwVsoCo+at3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^8.0.0", + "dayjs": "^1.10.6", + "lodash.get": "^4.4.2", + "semver": "^7.6.3", + "table": "^6.7.1" + }, + "bin": { + "better-npm-audit": "index.js" + }, + "engines": { + "node": ">= 8.12" + } + }, + "node_modules/better-npm-audit/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/bignumber.js": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", + "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true, + "license": "MIT" + }, + "node_modules/browserslist": { + "version": "4.26.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.3.tgz", + "integrity": "sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.8.9", + "caniuse-lite": "^1.0.30001746", + "electron-to-chromium": "^1.5.227", + "node-releases": "^2.0.21", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "license": "MIT", + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001749", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001749.tgz", + "integrity": "sha512-0rw2fJOmLfnzCRbkm8EyHL8SvI2Apu5UbnQuTsJ0ClgrH8hcwFooJ1s5R0EP8o8aVrFu8++ae29Kt9/gZAZp/Q==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chai": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", + "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/change-case": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", + "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "license": "MIT" + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "license": "MIT" + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/commander": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.1.tgz", + "integrity": "sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/create-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/create-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/dayjs": { + "version": "1.11.18", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.18.tgz", + "integrity": "sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/dedent": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.0.tgz", + "integrity": "sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==", + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "devOptional": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dynamic-dedupe": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz", + "integrity": "sha512-ssuANeD+z97meYOqd50e04Ze5qp4bPqo8cCkI4TRjZkzAUgIDTrXV1R8QCdINpiI+hw14+rYazvTRdQrz0/rFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "xtend": "^4.0.0" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.234", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.234.tgz", + "integrity": "sha512-RXfEp2x+VRYn8jbKfQlRImzoJU01kyDvVPBmG39eU2iuRVhuS6vQNocB8J0/8GrIMLnPzgz4eW6WiRnJkTuNWg==", + "license": "ISC" + }, + "node_modules/elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz", + "integrity": "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.0", + "@esbuild/android-arm": "0.25.0", + "@esbuild/android-arm64": "0.25.0", + "@esbuild/android-x64": "0.25.0", + "@esbuild/darwin-arm64": "0.25.0", + "@esbuild/darwin-x64": "0.25.0", + "@esbuild/freebsd-arm64": "0.25.0", + "@esbuild/freebsd-x64": "0.25.0", + "@esbuild/linux-arm": "0.25.0", + "@esbuild/linux-arm64": "0.25.0", + "@esbuild/linux-ia32": "0.25.0", + "@esbuild/linux-loong64": "0.25.0", + "@esbuild/linux-mips64el": "0.25.0", + "@esbuild/linux-ppc64": "0.25.0", + "@esbuild/linux-riscv64": "0.25.0", + "@esbuild/linux-s390x": "0.25.0", + "@esbuild/linux-x64": "0.25.0", + "@esbuild/netbsd-arm64": "0.25.0", + "@esbuild/netbsd-x64": "0.25.0", + "@esbuild/openbsd-arm64": "0.25.0", + "@esbuild/openbsd-x64": "0.25.0", + "@esbuild/sunos-x64": "0.25.0", + "@esbuild/win32-arm64": "0.25.0", + "@esbuild/win32-ia32": "0.25.0", + "@esbuild/win32-x64": "0.25.0" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.37.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.37.0.tgz", + "integrity": "sha512-XyLmROnACWqSxiGYArdef1fItQd47weqB7iwtfr9JHwRrqIXZdcFMvvEcL9xHCmL0SNsOvF0c42lWyM1U5dgig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.4.0", + "@eslint/core": "^0.16.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.37.0", + "@eslint/plugin-kit": "^0.4.0", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/expect-type": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.2.tgz", + "integrity": "sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", + "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.0.3", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hi-base32": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/hi-base32/-/hi-base32-0.5.1.tgz", + "integrity": "sha512-EmBBpvdYh/4XxsnUybsPag6VikPYnN30td+vQk+GI3qpahVEG9+gTkG0aXVxTjBqQ5T6ijbWIu77O+C5WFWsnA==", + "dev": true, + "license": "MIT" + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "license": "MIT" + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", + "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "license": "MIT", + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jest-config/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "license": "MIT", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "license": "MIT", + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jest-runtime/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-snapshot/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-watcher/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-sha256": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.11.1.tgz", + "integrity": "sha512-o6WSo/LUvY2uC4j7mO50a2ms7E/EAdbP0swigLV+nzHKTTaYnaLIWJ02VdXrsJX0vGedDESQnLsOekr94ryfjg==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-sha3": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.9.3.tgz", + "integrity": "sha512-BcJPCQeLg6WjEx3FE591wVAevlli8lxsxm9/FzV4HXkV49TmBH38Yvrpce6fjbADGMKFrBMGTqrVz3qPIZ88Gg==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-sha512": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/js-sha512/-/js-sha512-0.9.0.tgz", + "integrity": "sha512-mirki9WS/SUahm+1TbAPkqvbCiCfOAAsyXeHxK1UkullnJVVqoJG2pL9ObvT05CN+tM7fxhfYm0NbXn+1hWoZg==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonschema": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.5.0.tgz", + "integrity": "sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/loupe": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", + "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.19", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", + "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/magicast": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", + "source-map-js": "^1.2.0" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "license": "ISC" + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true, + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", + "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "license": "MIT" + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "license": "MIT" + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.23", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.23.tgz", + "integrity": "sha512-cCmFDMSm26S6tQSDpBCg/NR8NENrVPhAJSf+XbxBG4rPFaaonlEoE9wHQmun+cls499TQGSb7ZyPBRlzgKfpeg==", + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", + "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathval": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", + "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/polytype": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/polytype/-/polytype-0.17.0.tgz", + "integrity": "sha512-Q1y07MZqHPlGRJs8qI8bnxrQs+W3r24v25cmhbQV/lC9VNNtd+smi/2m3CUHNBDTfLtl+6SpA0EsL/J1oVsEag==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve.exports": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/rollup": { + "version": "4.52.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.4.tgz", + "integrity": "sha512-CLEVl+MnPAiKh5pl4dEWSyMTpuflgNQiLGhMv8ezD5W/qP8AKvmYpCOKRRNOh7oRKnauBZ4SyeYkMS+1VSyKwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.52.4", + "@rollup/rollup-android-arm64": "4.52.4", + "@rollup/rollup-darwin-arm64": "4.52.4", + "@rollup/rollup-darwin-x64": "4.52.4", + "@rollup/rollup-freebsd-arm64": "4.52.4", + "@rollup/rollup-freebsd-x64": "4.52.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.52.4", + "@rollup/rollup-linux-arm-musleabihf": "4.52.4", + "@rollup/rollup-linux-arm64-gnu": "4.52.4", + "@rollup/rollup-linux-arm64-musl": "4.52.4", + "@rollup/rollup-linux-loong64-gnu": "4.52.4", + "@rollup/rollup-linux-ppc64-gnu": "4.52.4", + "@rollup/rollup-linux-riscv64-gnu": "4.52.4", + "@rollup/rollup-linux-riscv64-musl": "4.52.4", + "@rollup/rollup-linux-s390x-gnu": "4.52.4", + "@rollup/rollup-linux-x64-gnu": "4.52.4", + "@rollup/rollup-linux-x64-musl": "4.52.4", + "@rollup/rollup-openharmony-arm64": "4.52.4", + "@rollup/rollup-win32-arm64-msvc": "4.52.4", + "@rollup/rollup-win32-ia32-msvc": "4.52.4", + "@rollup/rollup-win32-x64-gnu": "4.52.4", + "@rollup/rollup-win32-x64-msvc": "4.52.4", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", + "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-length/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-length/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/table": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", + "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/table/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/table/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/table/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.1.tgz", + "integrity": "sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==", + "dev": true, + "license": "ISC", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/test-exclude": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", + "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^10.4.1", + "minimatch": "^9.0.4" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/test-exclude/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/test-exclude/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/test-exclude/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinypool": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", + "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/tinyrainbow": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", + "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", + "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "license": "BSD-3-Clause" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/ts-jest": { + "version": "29.4.5", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.5.tgz", + "integrity": "sha512-HO3GyiWn2qvTQA4kTgjDcXiMwYQt68a1Y8+JuLRVpdIzm+UOLSHgl/XqR4c6nzJkq5rOkjc02O2I7P7l/Yof0Q==", + "license": "MIT", + "dependencies": { + "bs-logger": "^0.2.6", + "fast-json-stable-stringify": "^2.1.0", + "handlebars": "^4.7.8", + "json5": "^2.2.3", + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.7.3", + "type-fest": "^4.41.0", + "yargs-parser": "^21.1.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/transform": "^29.0.0 || ^30.0.0", + "@jest/types": "^29.0.0 || ^30.0.0", + "babel-jest": "^29.0.0 || ^30.0.0", + "jest": "^29.0.0 || ^30.0.0", + "jest-util": "^29.0.0 || ^30.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/transform": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jest-util": { + "optional": true + } + } + }, + "node_modules/ts-jest/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node-dev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ts-node-dev/-/ts-node-dev-2.0.0.tgz", + "integrity": "sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^3.5.1", + "dynamic-dedupe": "^0.3.0", + "minimist": "^1.2.6", + "mkdirp": "^1.0.4", + "resolve": "^1.0.0", + "rimraf": "^2.6.1", + "source-map-support": "^0.5.12", + "tree-kill": "^1.2.2", + "ts-node": "^10.4.0", + "tsconfig": "^7.0.0" + }, + "bin": { + "ts-node-dev": "lib/bin.js", + "tsnd": "lib/bin.js" + }, + "engines": { + "node": ">=0.8.0" + }, + "peerDependencies": { + "node-notifier": "*", + "typescript": "*" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/tsconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz", + "integrity": "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/strip-bom": "^3.0.0", + "@types/strip-json-comments": "0.0.30", + "strip-bom": "^3.0.0", + "strip-json-comments": "^2.0.0" + } + }, + "node_modules/tsconfig/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/tsconfig/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "dev": true, + "license": "Unlicense" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.46.0.tgz", + "integrity": "sha512-6+ZrB6y2bT2DX3K+Qd9vn7OFOJR+xSLDj+Aw/N3zBwUt27uTw2sw2TE2+UcY1RiyBZkaGbTkVg9SSdPNUG6aUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.46.0", + "@typescript-eslint/parser": "8.46.0", + "@typescript-eslint/typescript-estree": "8.46.0", + "@typescript-eslint/utils": "8.46.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/undici-types": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.14.0.tgz", + "integrity": "sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==", + "license": "MIT" + }, + "node_modules/upath": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", + "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/vite": { + "version": "5.4.20", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.20.tgz", + "integrity": "sha512-j3lYzGC3P+B5Yfy/pfKNgVEg4+UtcIJcVRt2cDjIOmhLourAqPqf8P7acgxeiSgUB7E3p2P8/3gNIgDLpwzs4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.9.tgz", + "integrity": "sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.7", + "es-module-lexer": "^1.5.4", + "pathe": "^1.1.2", + "vite": "^5.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vitest": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.9.tgz", + "integrity": "sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "2.1.9", + "@vitest/mocker": "2.1.9", + "@vitest/pretty-format": "^2.1.9", + "@vitest/runner": "2.1.9", + "@vitest/snapshot": "2.1.9", + "@vitest/spy": "2.1.9", + "@vitest/utils": "2.1.9", + "chai": "^5.1.2", + "debug": "^4.3.7", + "expect-type": "^1.1.0", + "magic-string": "^0.30.12", + "pathe": "^1.1.2", + "std-env": "^3.8.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.1", + "tinypool": "^1.0.1", + "tinyrainbow": "^1.2.0", + "vite": "^5.0.0", + "vite-node": "2.1.9", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/node": "^18.0.0 || >=20.0.0", + "@vitest/browser": "2.1.9", + "@vitest/ui": "2.1.9", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/vlq": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-2.0.4.tgz", + "integrity": "sha512-aodjPa2wPQFkra1G8CzJBTHXhgk3EVSwxSWXNPr1fgdFLUb8kvLV1iEb6rFgasIsjP82HWI6dsb5Io26DDnasA==", + "dev": true, + "license": "MIT" + }, + "node_modules/vscode-jsonrpc": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", + "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/vscode-languageserver": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz", + "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "vscode-languageserver-protocol": "3.17.5" + }, + "bin": { + "installServerIntoExtension": "bin/installServerIntoExtension" + } + }, + "node_modules/vscode-languageserver-protocol": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", + "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", + "dev": true, + "license": "MIT", + "dependencies": { + "vscode-jsonrpc": "8.2.0", + "vscode-languageserver-types": "3.17.5" + } + }, + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", + "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", + "dev": true, + "license": "MIT" + }, + "node_modules/vscode-languageserver-types": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", + "dev": true, + "license": "MIT" + }, + "node_modules/vscode-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/assets/arc-0058/projects/arc-0058/package.json b/assets/arc-0058/projects/arc-0058/package.json new file mode 100644 index 000000000..02bbf138c --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/package.json @@ -0,0 +1,52 @@ +{ + "name": "smart_contracts", + "version": "1.0.0", + "description": "Smart contract deployer", + "main": "smart_contracts/index.ts", + "scripts": { + "build": "algokit compile ts smart_contracts --puya-path=puya --output-source-map --out-dir artifacts && algokit generate client smart_contracts/artifacts --output {app_spec_dir}/{contract_name}Client.ts", + "deploy": "ts-node-dev --transpile-only --watch .env -r dotenv/config smart_contracts/index.ts", + "deploy:ci": "ts-node --transpile-only -r dotenv/config smart_contracts/index.ts", + "lint": "eslint smart_contracts", + "lint:fix": "eslint smart_contracts --fix", + "audit": "better-npm-audit audit", + "format": "prettier --write .", + "test-vitest": "vitest run --coverage", + "test": "npm run build && jest", + "test:watch": "vitest watch", + "check-types": "tsc --noEmit" + }, + "engines": { + "node": ">=22.0", + "npm": ">=9.0" + }, + "dependencies": { + "@algorandfoundation/algorand-typescript": "^1.0.1", + "@jest/globals": "^29.7.0", + "jest": "^29.7.0", + "ts-jest": "^29.4.0" + }, + "devDependencies": { + "@algorandfoundation/algokit-client-generator": "^6.0.1-beta.2", + "@algorandfoundation/algokit-utils": "^9.1.2", + "@algorandfoundation/algokit-utils-debug": "^1.0.4", + "@algorandfoundation/algorand-typescript-testing": "^1.0.1", + "@algorandfoundation/puya-ts": "^1.0.1", + "@eslint/js": "^9.18.0", + "@rollup/plugin-typescript": "^12.1.2", + "@tsconfig/node22": "^22.0.0", + "@vitest/coverage-v8": "^2.1.8", + "algosdk": "^3.4.0", + "better-npm-audit": "^3.11.0", + "dotenv": "^16.4.7", + "eslint": "^9.18.0", + "prettier": "^3.4.2", + "ts-node-dev": "^2.0.0", + "typescript": "^5.7.3", + "typescript-eslint": "^8.19.1", + "vitest": "^2.1.8" + }, + "overrides": { + "esbuild": "0.25.0" + } +} diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/abstracted_account/constants.ts b/assets/arc-0058/projects/arc-0058/smart_contracts/abstracted_account/constants.ts new file mode 100644 index 000000000..a59d6b187 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/abstracted_account/constants.ts @@ -0,0 +1,30 @@ +import { uint64 } from "@algorandfoundation/algorand-typescript" + +export const AbstractAccountGlobalStateKeysAdmin = 'admin' +export const AbstractAccountGlobalStateKeysControlledAddress = 'controlled_address' +export const AbstractAccountGlobalStateKeysLastUserInteraction = 'last_user_interaction' +export const AbstractAccountGlobalStateKeysLastChange = 'last_change' +export const AbstractAccountGlobalStateKeysEscrowFactory = 'escrow_factory' +export const AbstractAccountGlobalStateKeysSpendingAddress = 'spending_address' +export const AbstractAccountGlobalStateKeysCurrentPlugin = 'current_plugin' +export const AbstractAccountGlobalStateKeysRekeyIndex = 'rekey_index' + +export const AbstractAccountBoxPrefixPlugins = 'p' +export const AbstractAccountBoxPrefixNamedPlugins = 'n' +export const AbstractAccountBoxPrefixEscrows = 'e' +export const AbstractAccountBoxPrefixAllowances = 'a' +export const AbstractAccountBoxPrefixExecutions = 'x' + +export const BoxCostPerBox: uint64 = 2_500 +export const BoxCostPerByte: uint64 = 400 + +export const MethodRestrictionByteLength: uint64 = 20 +export const DynamicOffsetAndLength: uint64 = 4 +export const DynamicOffset: uint64 = 2 +export const DynamicLength: uint64 = 2 + +export const MinPluginMBR: uint64 = 38_900 +export const MinNamedPluginMBR: uint64 = 21_700 +export const MinEscrowsMBR: uint64 = 6_500 +export const MinAllowanceMBR: uint64 = 27_700 +export const MinExecutionsMBR: uint64 = 20_500 \ No newline at end of file diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/abstracted_account/contract.algo.ts b/assets/arc-0058/projects/arc-0058/smart_contracts/abstracted_account/contract.algo.ts new file mode 100644 index 000000000..55ecfbdae --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/abstracted_account/contract.algo.ts @@ -0,0 +1,1244 @@ +import { Contract, GlobalState, BoxMap, assert, uint64, Account, TransactionType, Application, abimethod, gtxn, itxn, OnCompleteAction, Bytes, bytes, assertMatch, clone } from '@algorandfoundation/algorand-typescript' +import { abiCall, Address, methodSelector, Uint8 } from '@algorandfoundation/algorand-typescript/arc4'; +import { btoi, Global, len, Txn } from '@algorandfoundation/algorand-typescript/op' +import { ERR_ADMIN_ONLY, ERR_ADMIN_PLUGINS_CANNOT_USE_ESCROWS, ERR_ALLOWANCE_ALREADY_EXISTS, ERR_ALLOWANCE_DOES_NOT_EXIST, ERR_ALLOWANCE_EXCEEDED, ERR_CANNOT_CALL_OTHER_APPS_DURING_REKEY, ERR_ESCROW_ALREADY_EXISTS, ERR_ESCROW_DOES_NOT_EXIST, ERR_ESCROW_LOCKED, ERR_ESCROW_NAME_REQUIRED, ERR_ESCROW_REQUIRED_TO_BE_SET_AS_DEFAULT, ERR_EXECUTION_EXPIRED, ERR_EXECUTION_KEY_DOES_NOT_EXIST, ERR_EXECUTION_KEY_NOT_FOUND, ERR_EXECUTION_KEY_UPDATE_MUST_MATCH_FIRST_VALID, ERR_EXECUTION_KEY_UPDATE_MUST_MATCH_LAST_VALID, ERR_EXECUTION_NOT_READY, ERR_GROUP_NOT_FOUND, ERR_INVALID_METHOD_SIGNATURE_LENGTH, ERR_INVALID_ONCOMPLETE, ERR_INVALID_SENDER_ARG, ERR_INVALID_SENDER_VALUE, ERR_MALFORMED_OFFSETS, ERR_METHOD_ON_COOLDOWN, ERR_MISSING_REKEY_BACK, ERR_ONLY_ADMIN_CAN_CHANGE_ADMIN, ERR_PLUGIN_DOES_NOT_EXIST, ERR_PLUGIN_EXPIRED, ERR_PLUGIN_ON_COOLDOWN, ERR_SENDER_MUST_BE_ADMIN_OR_CONTROLLED_ADDRESS, ERR_SENDER_MUST_BE_ADMIN_PLUGIN, ERR_USING_EXECUTION_KEY_REQUIRES_GLOBAL, ERR_ZERO_ADDRESS_DELEGATION_TYPE } from './errors'; +import { AbstractAccountBoxMBRData, AddAllowanceInfo, AllowanceInfo, AllowanceKey, DelegationTypeSelf, EscrowInfo, EscrowReclaim, ExecutionInfo, FundsRequest, MethodInfo, MethodRestriction, MethodValidation, PluginInfo, PluginKey, PluginValidation, SpendAllowanceTypeDrip, SpendAllowanceTypeFlat, SpendAllowanceTypeWindow } from './types'; +import { EscrowFactory } from '../escrow/factory.algo'; +import { AbstractAccountBoxPrefixAllowances, AbstractAccountBoxPrefixEscrows, AbstractAccountBoxPrefixExecutions, AbstractAccountBoxPrefixNamedPlugins, AbstractAccountBoxPrefixPlugins, AbstractAccountGlobalStateKeysAdmin, AbstractAccountGlobalStateKeysControlledAddress, AbstractAccountGlobalStateKeysCurrentPlugin, AbstractAccountGlobalStateKeysEscrowFactory, AbstractAccountGlobalStateKeysLastChange, AbstractAccountGlobalStateKeysLastUserInteraction, AbstractAccountGlobalStateKeysRekeyIndex, AbstractAccountGlobalStateKeysSpendingAddress, BoxCostPerByte, MethodRestrictionByteLength, MinAllowanceMBR, MinEscrowsMBR, MinExecutionsMBR, MinNamedPluginMBR, MinPluginMBR } from './constants'; +import { ERR_INVALID_PAYMENT } from '../utils/errors'; +import { ERR_FORBIDDEN } from '../escrow/errors'; +import { ARC58WalletIDsByAccountsMbr, NewCostForARC58 } from '../escrow/constants'; +import { emptyAllowanceInfo, emptyEscrowInfo, emptyExecutionInfo, emptyPluginInfo } from './utils'; + +export class AbstractedAccount extends Contract { + + /** The admin of the abstracted account. This address can add plugins and initiate rekeys */ + admin = GlobalState({ key: AbstractAccountGlobalStateKeysAdmin }) + /** The address this app controls */ + controlledAddress = GlobalState({ key: AbstractAccountGlobalStateKeysControlledAddress }); + /** The last time the contract was interacted with in unix time */ + lastUserInteraction = GlobalState({ key: AbstractAccountGlobalStateKeysLastUserInteraction }) + /** The last time state has changed on the abstracted account (not including lastCalled for cooldowns) in unix time */ + lastChange = GlobalState({ key: AbstractAccountGlobalStateKeysLastChange }) + /** the escrow account factory to use for allowances */ + escrowFactory = GlobalState({ key: AbstractAccountGlobalStateKeysEscrowFactory }) + /** [TEMPORARY STATE FIELD] The spending address for the currently active plugin */ + spendingAddress = GlobalState({ key: AbstractAccountGlobalStateKeysSpendingAddress }) + /** [TEMPORARY STATE FIELD] The current plugin key being used */ + currentPlugin = GlobalState({ key: AbstractAccountGlobalStateKeysCurrentPlugin }) + /** [TEMPORARY STATE FIELD] The index of the transaction that created the rekey sandwich */ + rekeyIndex = GlobalState({ initialValue: 0, key: AbstractAccountGlobalStateKeysRekeyIndex }) + + /** Plugins that add functionality to the controlledAddress and the account that has permission to use it. */ + plugins = BoxMap({ keyPrefix: AbstractAccountBoxPrefixPlugins }); + /** Plugins that have been given a name for discoverability */ + namedPlugins = BoxMap({ keyPrefix: AbstractAccountBoxPrefixNamedPlugins }); + /** the escrows that this wallet has created for specific callers with allowances */ + escrows = BoxMap({ keyPrefix: AbstractAccountBoxPrefixEscrows }) + /** The Allowances for plugins installed on the smart contract with useAllowance set to true */ + allowances = BoxMap({ keyPrefix: AbstractAccountBoxPrefixAllowances }) // 38_500 + /** execution keys */ + executions = BoxMap, ExecutionInfo>({ keyPrefix: AbstractAccountBoxPrefixExecutions }) + + private updateLastUserInteraction() { + this.lastUserInteraction.value = Global.latestTimestamp + } + + private updateLastChange() { + this.lastChange.value = Global.latestTimestamp + } + + private pluginsMbr(escrow: string, methodCount: uint64): uint64 { + return MinPluginMBR + ( + BoxCostPerByte * ((MethodRestrictionByteLength * methodCount) + Bytes(escrow).length) + ); + } + + private namedPluginsMbr(name: string): uint64 { + return MinNamedPluginMBR + (BoxCostPerByte * Bytes(name).length); + } + + private escrowsMbr(escrow: string): uint64 { + return MinEscrowsMBR + (BoxCostPerByte * Bytes(escrow).length); + } + + private allowancesMbr(escrow: string): uint64 { + return MinAllowanceMBR + (BoxCostPerByte * Bytes(escrow).length); + } + + private executionsMbr(groups: uint64): uint64 { + return MinExecutionsMBR + (BoxCostPerByte * (groups * 32)); + } + + private maybeNewEscrow(escrow: string): uint64 { + if (escrow === '') { + return 0; + } + + return this.escrows(escrow).exists + ? this.escrows(escrow).value.id + : this.newEscrow(escrow); + } + + private newEscrow(escrow: string): uint64 { + if (this.controlledAddress.value !== Global.currentApplicationAddress) { + itxn + .payment({ + sender: this.controlledAddress.value, + receiver: Global.currentApplicationAddress, + amount: this.escrowsMbr(escrow) + }) + .submit() + } + + const id = abiCall({ + sender: this.controlledAddress.value, + appId: this.escrowFactory.value, + args: [ + itxn.payment({ + sender: this.controlledAddress.value, + amount: NewCostForARC58 + Global.minBalance, + receiver: this.escrowFactory.value.address + }), + ] + }).returnValue + + this.escrows(escrow).value = { id, locked: false } + + return id; + } + + private pluginCallAllowed(plugin: uint64, caller: Account, escrow: string, method: bytes<4>): boolean { + const key: PluginKey = { plugin, caller, escrow } + + if (!this.plugins(key).exists) { + return false; + } + + const { methods, useRounds, lastCalled, cooldown, useExecutionKey } = this.plugins(key).value as Readonly + + if (useExecutionKey) { + return false + } + + let methodAllowed = methods.length > 0 ? false : true; + for (let i: uint64 = 0; i < methods.length; i += 1) { + if (methods[i].selector === method) { + methodAllowed = true; + break; + } + } + + const epochRef = useRounds ? Global.round : Global.latestTimestamp; + + return ( + lastCalled >= epochRef && + (epochRef - lastCalled) >= cooldown && + methodAllowed + ) + } + + private txnRekeysBack(txn: gtxn.Transaction): boolean { + // this check is for manual rekeyTo calls, it only ever uses the controlled address so its okay to hardcode it here + if ( + txn.sender === this.controlledAddress.value && + txn.rekeyTo === Global.currentApplicationAddress + ) { + return true; + } + + return ( + txn.type === TransactionType.ApplicationCall + && txn.appId === Global.currentApplicationId + && txn.numAppArgs === 1 + && txn.onCompletion === OnCompleteAction.NoOp + && txn.appArgs(0) === methodSelector('arc58_verifyAuthAddress()void') + ) + } + + private assertRekeysBack(): void { + let rekeysBack = false; + for (let i: uint64 = (Txn.groupIndex + 1); i < Global.groupSize; i += 1) { + const txn = gtxn.Transaction(i) + + if (this.txnRekeysBack(txn)) { + rekeysBack = true; + break; + } + } + + assert(rekeysBack, ERR_MISSING_REKEY_BACK); + } + + private pluginCheck(key: PluginKey): PluginValidation { + + const exists = this.plugins(key).exists; + if (!exists) { + return { + exists: false, + expired: true, + onCooldown: true, + hasMethodRestrictions: false, + } + } + + const { useRounds, lastValid, cooldown, lastCalled, methods } = this.plugins(key).value as Readonly + const epochRef = useRounds ? Global.round : Global.latestTimestamp; + + return { + exists, + expired: epochRef > lastValid, + onCooldown: (epochRef - lastCalled) < cooldown, + hasMethodRestrictions: methods.length > 0, + } + } + + /** + * Guarantee that our txn group is valid in a single loop over all txns in the group + * + * @param key the box key for the plugin were checking + * @param methodOffsets the indices of the methods being used in the group + */ + private assertValidGroup(key: PluginKey, methodOffsets: uint64[]): void { + + const { useRounds, useExecutionKey } = this.plugins(key).value + + if (useExecutionKey && !(Txn.sender === this.admin.value)) { + assert(this.executions(Txn.lease).exists, ERR_EXECUTION_KEY_NOT_FOUND); + assert(this.executions(Txn.lease).value.firstValid <= Global.round, ERR_EXECUTION_NOT_READY); + assert(this.executions(Txn.lease).value.lastValid >= Global.round, ERR_EXECUTION_EXPIRED); + + const groups = this.executions(Txn.lease).value.groups as Readonly[]>; + + let foundGroup = false; + for (let i: uint64 = 0; i < groups.length; i += 1) { + if (groups[i] === Global.groupId) { + foundGroup = true; + } + } + + assert(foundGroup, ERR_GROUP_NOT_FOUND); + this.executions(Txn.lease).delete(); + } + + const initialCheck = this.pluginCheck(key); + + assert(initialCheck.exists, ERR_PLUGIN_DOES_NOT_EXIST); + assert(!initialCheck.expired, ERR_PLUGIN_EXPIRED); + assert(!initialCheck.onCooldown, ERR_PLUGIN_ON_COOLDOWN); + + const epochRef = useRounds + ? Global.round + : Global.latestTimestamp; + + let rekeysBack = false; + let methodIndex: uint64 = 0; + + for (let i: uint64 = (Txn.groupIndex + 1); i < Global.groupSize; i += 1) { + const txn = gtxn.Transaction(i) + + if (this.txnRekeysBack(txn)) { + rekeysBack = true; + break; + } + + if (txn.type !== TransactionType.ApplicationCall) { + continue; + } + + assert(txn.appId.id === key.plugin, ERR_CANNOT_CALL_OTHER_APPS_DURING_REKEY); + assert(txn.onCompletion === OnCompleteAction.NoOp, ERR_INVALID_ONCOMPLETE); + // ensure the first arg to a method call is the app id itself + // index 1 is used because arg[0] is the method selector + assert(txn.numAppArgs > 1, ERR_INVALID_SENDER_ARG); + assert(Application(btoi(txn.appArgs(1))) === Global.currentApplicationId, ERR_INVALID_SENDER_VALUE); + + const { expired, onCooldown, hasMethodRestrictions } = this.pluginCheck(key); + + assert(!expired, ERR_PLUGIN_EXPIRED); + assert(!onCooldown, ERR_PLUGIN_ON_COOLDOWN); + + if (hasMethodRestrictions) { + assert(methodIndex < methodOffsets.length, ERR_MALFORMED_OFFSETS); + const { methodAllowed, methodOnCooldown } = this.methodCheck(key, txn, methodOffsets[methodIndex]); + assert(methodAllowed && !methodOnCooldown, ERR_METHOD_ON_COOLDOWN); + } + + this.plugins(key).value.lastCalled = epochRef + methodIndex += 1; + } + + assert(rekeysBack, ERR_MISSING_REKEY_BACK); + } + + /** + * Checks if the method call is allowed + * + * @param key the box key for the plugin were checking + * @param caller the address that triggered the plugin or global address + * @param offset the index of the method being used + * @returns whether the method call is allowed + */ + private methodCheck(key: PluginKey, txn: gtxn.ApplicationCallTxn, offset: uint64): MethodValidation { + + assert(len(txn.appArgs(0)) === 4, ERR_INVALID_METHOD_SIGNATURE_LENGTH) + const selectorArg = txn.appArgs(0).toFixed({ length: 4 }) + + const { useRounds } = this.plugins(key).value + const { selector, cooldown, lastCalled } = this.plugins(key).value.methods[offset] + + const hasCooldown = cooldown > 0 + + const epochRef = useRounds ? Global.round : Global.latestTimestamp + const methodOnCooldown = (epochRef - lastCalled) < cooldown + + if (selector === selectorArg && (!hasCooldown || !methodOnCooldown)) { + // update the last called round for the method + if (hasCooldown) { + const lastCalled = useRounds ? Global.round : Global.latestTimestamp; + this.plugins(key).value.methods[offset].lastCalled = lastCalled + } + + return { + methodAllowed: true, + methodOnCooldown + } + } + + return { + methodAllowed: false, + methodOnCooldown: true + } + } + + private transferFunds(escrow: string, fundsRequests: FundsRequest[]): void { + const escrowID = this.escrows(escrow).value.id; + const escrowAddress = Application(escrowID).address; + + for (let i: uint64 = 0; i < fundsRequests.length; i += 1) { + + const allowanceKey: AllowanceKey = { + escrow, + asset: fundsRequests[i].asset + } + + this.verifyAllowance(allowanceKey, fundsRequests[i]); + + if (fundsRequests[i].asset !== 0) { + itxn + .assetTransfer({ + sender: this.controlledAddress.value, + assetReceiver: escrowAddress, + assetAmount: fundsRequests[i].amount, + xferAsset: fundsRequests[i].asset + }) + .submit(); + } else { + itxn + .payment({ + sender: this.controlledAddress.value, + receiver: escrowAddress, + amount: fundsRequests[i].amount + }) + .submit(); + } + } + } + + private verifyAllowance(key: AllowanceKey, fundRequest: FundsRequest): void { + assert(this.allowances(key).exists, ERR_ALLOWANCE_DOES_NOT_EXIST); + const { type, spent, amount, last, max, interval, start, useRounds } = this.allowances(key).value + const newLast = useRounds ? Global.round : Global.latestTimestamp; + + if (type === SpendAllowanceTypeFlat) { + const leftover: uint64 = amount - spent; + assert(leftover >= fundRequest.amount, ERR_ALLOWANCE_EXCEEDED); + this.allowances(key).value.spent += fundRequest.amount + } else if (type === SpendAllowanceTypeWindow) { + const currentWindowStart = this.getLatestWindowStart(useRounds, start, interval) + + if (currentWindowStart > last) { + assert(amount >= fundRequest.amount, ERR_ALLOWANCE_EXCEEDED); + this.allowances(key).value.spent = fundRequest.amount + } else { + // calc the remaining amount available in the current window + const leftover: uint64 = amount - spent; + assert(leftover >= fundRequest.amount, ERR_ALLOWANCE_EXCEEDED); + this.allowances(key).value.spent += fundRequest.amount + } + } else if (type === SpendAllowanceTypeDrip) { + const epochRef = useRounds ? Global.round : Global.latestTimestamp; + const passed: uint64 = epochRef - last + // in this context: + // amount represents our accrual rate + // spent represents the last leftover amount available + const accrued: uint64 = spent + ((passed / interval) * amount) + const available: uint64 = accrued > max ? max : accrued + + assert(available >= fundRequest.amount, ERR_ALLOWANCE_EXCEEDED); + this.allowances(key).value.spent = (available - fundRequest.amount) + } + this.allowances(key).value.last = newLast + } + + private getLatestWindowStart(useRounds: boolean, start: uint64, interval: uint64): uint64 { + if (useRounds) { + return Global.round - ((Global.round - start) % interval) + } + return Global.latestTimestamp - ((Global.latestTimestamp - start) % interval) + } + + /** + * What the value of this.address.value.authAddr should be when this.controlledAddress + * is able to be controlled by this app. It will either be this.app.address or zeroAddress + */ + private getAuthAddress(): Account { + return ( + this.spendingAddress.value === this.controlledAddress.value + && this.controlledAddress.value === Global.currentApplicationAddress + ) ? Global.zeroAddress : Global.currentApplicationAddress + } + + /** + * Create an abstracted account application. + * This is not part of ARC58 and implementation specific. + * + * @param controlledAddress The address of the abstracted account. If zeroAddress, then the address of the contract account will be used + * @param admin The admin for this app + */ + @abimethod({ onCreate: 'require' }) + createApplication(controlledAddress: Address, admin: Address, escrowFactory: Application): void { + assert( + Txn.sender === controlledAddress.native + || Txn.sender === admin.native, + ERR_SENDER_MUST_BE_ADMIN_OR_CONTROLLED_ADDRESS + ); + assert(admin !== controlledAddress); + + this.admin.value = admin.native; + this.controlledAddress.value = controlledAddress.native === Global.zeroAddress ? Global.currentApplicationAddress : controlledAddress.native; + this.escrowFactory.value = escrowFactory; + this.spendingAddress.value = Global.zeroAddress; + this.updateLastUserInteraction() + this.updateLastChange() + } + + /** + * Register the abstracted account with the escrow factory. + * This allows apps to correlate the account with the app without needing + * it to be explicitly provided. + */ + register(escrow: string): void { + let app: uint64 = 0 + if (escrow !== '') { + assert(this.escrows(escrow).exists, ERR_ESCROW_DOES_NOT_EXIST) + app = this.escrows(escrow).value.id + } + + abiCall({ + appId: this.escrowFactory.value, + args: [ + itxn.payment({ + receiver: this.escrowFactory.value.address, + amount: ARC58WalletIDsByAccountsMbr + }), + app + ] + }) + } + + /** + * Attempt to change the admin for this app. Some implementations MAY not support this. + * + * @param newAdmin The new admin + */ + arc58_changeAdmin(newAdmin: Address): void { + assert(Txn.sender === this.admin.value, ERR_ONLY_ADMIN_CAN_CHANGE_ADMIN); + this.admin.value = newAdmin.native; + this.updateLastUserInteraction() + this.updateLastChange() + } + + /** + * Attempt to change the admin via plugin. + * + * @param plugin The app calling the plugin + * @param allowedCaller The address that triggered the plugin + * @param newAdmin The new admin + * + */ + arc58_pluginChangeAdmin(newAdmin: Address): void { + const key = clone(this.currentPlugin.value) + const { plugin, escrow } = key + + assert(escrow === '', ERR_ADMIN_PLUGINS_CANNOT_USE_ESCROWS); + assert(Txn.sender === Application(plugin).address, ERR_SENDER_MUST_BE_ADMIN_PLUGIN); + assert( + this.controlledAddress.value.authAddress === Application(plugin).address, + 'This plugin is not in control of the account' + ); + + assert( + this.plugins(key).exists && this.plugins(key).value.admin, + 'This plugin does not have admin privileges' + ); + + this.admin.value = newAdmin.native; + if (this.plugins(key).value.delegationType === DelegationTypeSelf) { + this.updateLastUserInteraction(); + } + this.updateLastChange() + } + + /** + * Get the admin of this app. This method SHOULD always be used rather than reading directly from state + * because different implementations may have different ways of determining the admin. + */ + @abimethod({ readonly: true }) + arc58_getAdmin(): Address { + return new Address(this.admin.value); + } + + /** + * Verify the abstracted account is rekeyed to this app + */ + arc58_verifyAuthAddress(): void { + assert(this.spendingAddress.value.authAddress === this.getAuthAddress()); + this.spendingAddress.value = Global.zeroAddress + this.currentPlugin.value = { plugin: 0, caller: Global.currentApplicationAddress, escrow: '' } + this.rekeyIndex.value = 0 + } + + /** + * Rekey the abstracted account to another address. Primarily useful for rekeying to an EOA. + * + * @param address The address to rekey to + * @param flash Whether or not this should be a flash rekey. If true, the rekey back to the app address must done in the same txn group as this call + */ + arc58_rekeyTo(address: Address, flash: boolean): void { + assert(Txn.sender === this.admin.value, ERR_ADMIN_ONLY); + + itxn + .payment({ + sender: this.controlledAddress.value, + receiver: address.native, + rekeyTo: address.native, + note: 'rekeying abstracted account' + }) + .submit(); + + if (flash) this.assertRekeysBack(); + + this.updateLastUserInteraction(); + } + + /** + * check whether the plugin can be used + * + * @param plugin the plugin to be rekeyed to + * @param global whether this is callable globally + * @param address the address that will trigger the plugin + * @param method the method being called on the plugin, if applicable + * @returns whether the plugin can be called with these parameters + */ + @abimethod({ readonly: true }) + arc58_canCall( + plugin: uint64, + global: boolean, + address: Address, + escrow: string, + method: bytes<4> + ): boolean { + if (global) { + this.pluginCallAllowed(plugin, Global.zeroAddress, escrow, method); + } + return this.pluginCallAllowed(plugin, address.native, escrow, method); + } + + /** + * Temporarily rekey to an approved plugin app address + * + * @param plugin The app to rekey to + * @param global Whether the plugin is callable globally + * @param methodOffsets The indices of the methods being used in the group if the plugin has method restrictions these indices are required to match the methods used on each subsequent call to the plugin within the group + * @param fundsRequest If the plugin is using an escrow, this is the list of funds to transfer to the escrow for the plugin to be able to use during execution + * + */ + arc58_rekeyToPlugin( + plugin: uint64, + global: boolean, + escrow: string, + methodOffsets: uint64[], + fundsRequest: FundsRequest[] + ): void { + const pluginApp = Application(plugin) + const caller = global ? Global.zeroAddress : Txn.sender + const key: PluginKey = { plugin, caller, escrow } + + assert(this.plugins(key).exists, ERR_PLUGIN_DOES_NOT_EXIST) + this.currentPlugin.value = clone(key) + + if (escrow !== '') { + assert(this.escrows(escrow).exists, ERR_ESCROW_DOES_NOT_EXIST) + const escrowID = this.escrows(escrow).value.id + const spendingApp = Application(escrowID) + this.spendingAddress.value = spendingApp.address + this.transferFunds(escrow, fundsRequest) + } else { + this.spendingAddress.value = this.controlledAddress.value + } + + this.assertValidGroup(key, methodOffsets) + + itxn + .payment({ + sender: this.spendingAddress.value, + receiver: this.spendingAddress.value, + rekeyTo: pluginApp.address, + note: 'rekeying to plugin app' + }) + .submit(); + + /** track the index of the transaction that triggered the rekey */ + this.rekeyIndex.value = Txn.groupIndex + + if (this.plugins(key).value.delegationType === DelegationTypeSelf) { + this.updateLastUserInteraction(); + } + } + + /** + * Temporarily rekey to a named plugin app address + * + * @param name The name of the plugin to rekey to + * @param global Whether the plugin is callable globally + * @param methodOffsets The indices of the methods being used in the group if the plugin has method restrictions these indices are required to match the methods used on each subsequent call to the plugin within the group + * @param fundsRequest If the plugin is using an escrow, this is the list of funds to transfer to the escrow for the plugin to be able to use during execution + * + */ + arc58_rekeyToNamedPlugin( + name: string, + global: boolean, + escrow: string, + methodOffsets: uint64[], + fundsRequest: FundsRequest[]): void { + this.arc58_rekeyToPlugin( + this.namedPlugins(name).value.plugin, + global, + escrow, + methodOffsets, + fundsRequest + ); + } + + /** + * Add an app to the list of approved plugins + * + * @param app The app to add + * @param allowedCaller The address of that's allowed to call the app + * or the global zero address for any address + * @param admin Whether the plugin has permissions to change the admin account + * @param delegationType the ownership of the delegation for last_interval updates + * @param escrow The escrow account to use for the plugin, if any. If empty, no escrow will be used, if the named escrow does not exist, it will be created + * @param lastValid The timestamp or round when the permission expires + * @param cooldown The number of seconds or rounds that must pass before the plugin can be called again + * @param methods The methods that are allowed to be called for the plugin by the address + * @param useRounds Whether the plugin uses rounds for cooldowns and lastValid, defaults to timestamp + */ + arc58_addPlugin( + plugin: uint64, + caller: Address, + escrow: string, + admin: boolean, + delegationType: Uint8, + lastValid: uint64, + cooldown: uint64, + methods: MethodRestriction[], + useRounds: boolean, + useExecutionKey: boolean, + defaultToEscrow: boolean + ): void { + assert(Txn.sender === this.admin.value, ERR_ADMIN_ONLY); + assert( + !( + delegationType === DelegationTypeSelf && + caller.native === Global.zeroAddress + ), + ERR_ZERO_ADDRESS_DELEGATION_TYPE + ) + assert( + !( + useExecutionKey && + caller.native !== Global.zeroAddress + ), + ERR_USING_EXECUTION_KEY_REQUIRES_GLOBAL + ) + + let escrowKey: string = escrow + if (defaultToEscrow) { + assert(escrow !== '', ERR_ESCROW_REQUIRED_TO_BE_SET_AS_DEFAULT) + escrowKey = '' + } + + const key: PluginKey = { plugin, caller: caller.native, escrow: escrowKey } + + let methodInfos: MethodInfo[] = [] + for (let i: uint64 = 0; i < methods.length; i += 1) { + methodInfos.push({ ...methods[i], lastCalled: 0 }) + } + + const epochRef = useRounds ? Global.round : Global.latestTimestamp; + + if (this.controlledAddress.value !== Global.currentApplicationAddress) { + itxn + .payment({ + sender: this.controlledAddress.value, + receiver: Global.currentApplicationAddress, + amount: this.pluginsMbr(escrowKey, methodInfos.length) + }) + .submit() + } + + const escrowID = this.maybeNewEscrow(escrow); + + this.plugins(key).value = { + escrow: escrowID, + admin, + delegationType, + lastValid, + cooldown, + methods: clone(methodInfos), + useRounds, + useExecutionKey, + lastCalled: 0, + start: epochRef, + } + + this.updateLastUserInteraction(); + this.updateLastChange(); + } + + /** + * Remove an app from the list of approved plugins + * + * @param app The app to remove + * @param allowedCaller The address that's allowed to call the app + */ + arc58_removePlugin(plugin: uint64, caller: Address, escrow: string): void { + assert(Txn.sender === this.admin.value, ERR_ADMIN_ONLY); + + const key: PluginKey = { plugin, caller: caller.native, escrow } + assert(this.plugins(key).exists, ERR_PLUGIN_DOES_NOT_EXIST) + + const methodsLength: uint64 = this.plugins(key).value.methods.length + + this.plugins(key).delete(); + + if (this.controlledAddress.value !== Global.currentApplicationAddress) { + itxn + .payment({ + receiver: this.controlledAddress.value, + amount: this.pluginsMbr(escrow, methodsLength) + }) + .submit() + } + + this.updateLastUserInteraction(); + this.updateLastChange(); + } + + /** + * Add a named plugin + * + * @param name The plugin name + * @param app The app to add + * @param allowedCaller The address that's allowed to call the app + * or the global zero address for any address + * @param admin Whether the plugin has permissions to change the admin account + * @param delegationType the ownership of the delegation for last_interval updates + * @param escrow The escrow account to use for the plugin, if any. If empty, no escrow will be used, if the named escrow does not exist, it will be created + * @param lastValid The timestamp or round when the permission expires + * @param cooldown The number of seconds or rounds that must pass before the plugin can be called again + * @param methods The methods that are allowed to be called for the plugin by the address + * @param useRounds Whether the plugin uses rounds for cooldowns and lastValid, defaults to timestamp + */ + arc58_addNamedPlugin( + name: string, + plugin: uint64, + caller: Address, + escrow: string, + admin: boolean, + delegationType: Uint8, + lastValid: uint64, + cooldown: uint64, + methods: MethodRestriction[], + useRounds: boolean, + useExecutionKey: boolean, + defaultToEscrow: boolean + ): void { + assert(Txn.sender === this.admin.value, ERR_ADMIN_ONLY); + assert(!this.namedPlugins(name).exists); + assert( + !( + delegationType === DelegationTypeSelf && + caller.native === Global.zeroAddress + ), + ERR_ZERO_ADDRESS_DELEGATION_TYPE + ) + assert( + !( + useExecutionKey && + caller.native !== Global.zeroAddress + ), + ERR_USING_EXECUTION_KEY_REQUIRES_GLOBAL + ) + + let escrowKey: string = escrow + if (defaultToEscrow) { + assert(escrow !== '', ERR_ESCROW_REQUIRED_TO_BE_SET_AS_DEFAULT) + escrowKey = '' + } + + const key: PluginKey = { plugin, caller: caller.native, escrow: escrowKey } + this.namedPlugins(name).value = clone(key) + + let methodInfos: MethodInfo[] = [] + for (let i: uint64 = 0; i < methods.length; i += 1) { + methodInfos.push({ ...methods[i], lastCalled: 0 }) + } + + if (this.controlledAddress.value !== Global.currentApplicationAddress) { + itxn + .payment({ + sender: this.controlledAddress.value, + receiver: Global.currentApplicationAddress, + amount: this.pluginsMbr(escrowKey, methodInfos.length) + this.namedPluginsMbr(name) + }) + .submit() + } + + const escrowID = this.maybeNewEscrow(escrow); + + const epochRef = useRounds ? Global.round : Global.latestTimestamp; + + this.plugins(key).value = { + escrow: escrowID, + admin, + delegationType, + lastValid, + cooldown, + methods: clone(methodInfos), + useRounds, + useExecutionKey, + lastCalled: 0, + start: epochRef + } + + this.updateLastUserInteraction(); + this.updateLastChange(); + } + + /** + * Remove a named plugin + * + * @param name The plugin name + */ + arc58_removeNamedPlugin(name: string): void { + assert(Txn.sender === this.admin.value, ERR_ADMIN_ONLY); + assert(this.namedPlugins(name).exists, ERR_PLUGIN_DOES_NOT_EXIST); + const app = clone(this.namedPlugins(name).value) + assert(this.plugins(app).exists, ERR_PLUGIN_DOES_NOT_EXIST); + + const methodsLength: uint64 = this.plugins(app).value.methods.length + + this.namedPlugins(name).delete(); + this.plugins(app).delete(); + + if (this.controlledAddress.value !== Global.currentApplicationAddress) { + itxn + .payment({ + receiver: this.controlledAddress.value, + amount: this.namedPluginsMbr(name) + this.pluginsMbr(app.escrow, methodsLength) + }) + .submit() + } + + this.updateLastUserInteraction(); + this.updateLastChange(); + } + + /** + * Create a new escrow for the controlled address + * + * @param escrow The name of the escrow to create + */ + arc58_newEscrow(escrow: string): uint64 { + assert(Txn.sender === this.admin.value, ERR_ADMIN_ONLY); + assert(!this.escrows(escrow).exists, ERR_ESCROW_ALREADY_EXISTS); + assert(escrow !== '', ERR_ESCROW_NAME_REQUIRED); + return this.newEscrow(escrow); + } + + /** + * Lock or Unlock an escrow account + * + * @param escrow The escrow to lock or unlock + */ + arc58_toggleEscrowLock(escrow: string): EscrowInfo { + assert(Txn.sender === this.admin.value, ERR_ADMIN_ONLY); + assert(this.escrows(escrow).exists, ERR_ESCROW_DOES_NOT_EXIST); + + this.escrows(escrow).value.locked = !this.escrows(escrow).value.locked; + + this.updateLastUserInteraction(); + this.updateLastChange(); + + return this.escrows(escrow).value; + } + + /** + * Transfer funds from an escrow back to the controlled address. + * + * @param escrow The escrow to reclaim funds from + * @param reclaims The list of reclaims to make from the escrow + */ + arc58_reclaim(escrow: string, reclaims: EscrowReclaim[]): void { + assert(Txn.sender === this.admin.value, ERR_FORBIDDEN); + assert(this.escrows(escrow).exists, ERR_ESCROW_DOES_NOT_EXIST); + const sender = Application(this.escrows(escrow).value.id).address + + for (let i: uint64 = 0; i < reclaims.length; i += 1) { + if (reclaims[i].asset === 0) { + const pmt = itxn.payment({ + sender, + receiver: this.controlledAddress.value, + amount: reclaims[i].amount + }) + + if (reclaims[i].closeOut) { + pmt.set({ closeRemainderTo: this.controlledAddress.value }); + } + + pmt.submit(); + } else { + const xfer = itxn.assetTransfer({ + sender, + assetReceiver: this.controlledAddress.value, + assetAmount: reclaims[i].amount, + xferAsset: reclaims[i].asset + }) + + if (reclaims[i].closeOut) { + xfer.set({ assetCloseTo: this.controlledAddress.value }); + } + + xfer.submit(); + } + } + } + + /** + * Opt-in an escrow account to assets + * + * @param escrow The escrow to opt-in to + * @param assets The list of assets to opt-in to + */ + arc58_optinEscrow(escrow: string, assets: uint64[]): void { + assert(Txn.sender === this.admin.value, ERR_FORBIDDEN); + assert(this.escrows(escrow).exists, ERR_ESCROW_DOES_NOT_EXIST) + const escrowID = this.escrows(escrow).value.id + const escrowAddress = Application(escrowID).address + assert(!this.escrows(escrow).value.locked, ERR_ESCROW_LOCKED) + + itxn + .payment({ + sender: this.controlledAddress.value, + receiver: escrowAddress, + amount: Global.assetOptInMinBalance * assets.length + }) + .submit(); + + for (let i: uint64 = 0; i < assets.length; i += 1) { + assert( + this.allowances({ escrow, asset: assets[i] }).exists, + ERR_ALLOWANCE_DOES_NOT_EXIST + ); + + itxn + .assetTransfer({ + sender: escrowAddress, + assetReceiver: escrowAddress, + assetAmount: 0, + xferAsset: assets[i] + }) + .submit(); + } + } + + /** + * Opt-in an escrow account to assets via a plugin / allowed caller + * + * @param app The app related to the escrow optin + * @param allowedCaller The address allowed to call the plugin related to the escrow optin + * @param assets The list of assets to opt-in to + * @param mbrPayment The payment txn that is used to pay for the asset opt-in + */ + arc58_pluginOptinEscrow( + plugin: uint64, + caller: Address, + escrow: string, + assets: uint64[], + mbrPayment: gtxn.PaymentTxn + ): void { + const key: PluginKey = { plugin, caller: caller.native, escrow } + + assert(this.plugins(key).exists, ERR_PLUGIN_DOES_NOT_EXIST) + assert(this.escrows(escrow).exists, ERR_ESCROW_DOES_NOT_EXIST) + assert(!this.escrows(escrow).value.locked, ERR_ESCROW_LOCKED) + + const escrowID = this.escrows(escrow).value.id + + assert( + Txn.sender === Application(plugin).address || + Txn.sender === caller.native || + caller.native === Global.zeroAddress, + ERR_FORBIDDEN + ) + + const escrowAddress = Application(escrowID).address + + assertMatch( + mbrPayment, + { + receiver: this.controlledAddress.value, + amount: Global.assetOptInMinBalance * assets.length + }, + ERR_INVALID_PAYMENT + ) + + itxn + .payment({ + sender: this.controlledAddress.value, + receiver: escrowAddress, + amount: Global.assetOptInMinBalance * assets.length + }) + .submit(); + + for (let i: uint64 = 0; i < assets.length; i += 1) { + assert( + this.allowances({ escrow, asset: assets[i] }).exists, + ERR_ALLOWANCE_DOES_NOT_EXIST + ); + + itxn + .assetTransfer({ + sender: escrowAddress, + assetReceiver: escrowAddress, + assetAmount: 0, + xferAsset: assets[i] + }) + .submit(); + } + } + + /** + * Add an allowance for an escrow account + * + * @param escrow The escrow to add the allowance for + * @param allowances The list of allowances to add + */ + arc58_addAllowances(escrow: string, allowances: AddAllowanceInfo[]): void { + assert(Txn.sender === this.admin.value, ERR_ADMIN_ONLY); + assert(this.escrows(escrow).exists, ERR_ESCROW_DOES_NOT_EXIST); + assert(!this.escrows(escrow).value.locked, ERR_ESCROW_LOCKED); + + if (this.controlledAddress.value !== Global.currentApplicationAddress) { + itxn + .payment({ + sender: this.controlledAddress.value, + receiver: Global.currentApplicationAddress, + amount: this.allowancesMbr(escrow) * allowances.length + }) + .submit() + } + + for (let i: uint64 = 0; i < allowances.length; i += 1) { + const { asset, type, amount, max, interval, useRounds } = allowances[i]; + const key: AllowanceKey = { escrow, asset } + assert(!this.allowances(key).exists, ERR_ALLOWANCE_ALREADY_EXISTS); + const start = useRounds ? Global.round : Global.latestTimestamp; + + this.allowances(key).value = { + type, + spent: 0, + amount, + last: 0, + max, + interval, + start, + useRounds + } + } + + this.updateLastUserInteraction(); + this.updateLastChange(); + } + + /** + * Remove an allowances for an escrow account + * + * @param escrow The escrow to remove the allowance for + * @param assets The list of assets to remove the allowance for + */ + arc58_removeAllowances(escrow: string, assets: uint64[]): void { + assert(Txn.sender === this.admin.value, ERR_ADMIN_ONLY); + assert(this.escrows(escrow).exists, ERR_ESCROW_DOES_NOT_EXIST); + assert(!this.escrows(escrow).value.locked, ERR_ESCROW_LOCKED); + + if (this.controlledAddress.value !== Global.currentApplicationAddress) { + itxn + .payment({ + receiver: this.controlledAddress.value, + amount: this.allowancesMbr(escrow) * assets.length + }) + .submit() + } + + for (let i: uint64 = 0; i < assets.length; i += 1) { + const key: AllowanceKey = { + escrow, + asset: assets[i] + } + assert(this.allowances(key).exists, ERR_ALLOWANCE_DOES_NOT_EXIST) + this.allowances(key).delete() + } + + this.updateLastUserInteraction() + this.updateLastChange() + } + + arc58_addExecutionKey(lease: bytes<32>, groups: bytes<32>[], firstValid: uint64, lastValid: uint64): void { + assert(Txn.sender === this.admin.value, ERR_ADMIN_ONLY) + if (!this.executions(lease).exists) { + this.executions(lease).value = { + groups: clone(groups), + firstValid, + lastValid + } + } else { + assert(this.executions(lease).value.firstValid === firstValid, ERR_EXECUTION_KEY_UPDATE_MUST_MATCH_FIRST_VALID) + assert(this.executions(lease).value.lastValid === lastValid, ERR_EXECUTION_KEY_UPDATE_MUST_MATCH_LAST_VALID) + + this.executions(lease).value.groups = [...clone(this.executions(lease).value.groups), ...clone(groups)] + } + + this.updateLastUserInteraction() + this.updateLastChange() + } + + arc58_removeExecutionKey(lease: bytes<32>): void { + assert(this.executions(lease).exists, ERR_EXECUTION_KEY_DOES_NOT_EXIST) + assert(Txn.sender === this.admin.value || this.executions(lease).value.lastValid < Global.round, ERR_ADMIN_ONLY) + + this.executions(lease).delete() + + this.updateLastUserInteraction() + this.updateLastChange() + } + + @abimethod({ readonly: true }) + arc58_getPlugins(keys: PluginKey[]): PluginInfo[] { + let plugins: PluginInfo[] = [] + for (let i: uint64 = 0; i < keys.length; i += 1) { + if (this.plugins(keys[i]).exists) { + plugins.push(this.plugins(keys[i]).value) + continue + } + plugins.push(emptyPluginInfo()) + } + return plugins + } + + @abimethod({ readonly: true }) + arc58_getNamedPlugins(names: string[]): PluginInfo[] { + let plugins: PluginInfo[] = [] + for (let i: uint64 = 0; i < names.length; i += 1) { + if (this.namedPlugins(names[i]).exists) { + const nameKey = clone(this.namedPlugins(names[i]).value) + if (this.plugins(nameKey).exists) { + plugins.push(this.plugins(nameKey).value) + continue + } + plugins.push(emptyPluginInfo()) + continue + } + plugins.push(emptyPluginInfo()) + } + return plugins + } + + @abimethod({ readonly: true }) + arc58_getEscrows(escrows: string[]): EscrowInfo[] { + let result: EscrowInfo[] = [] + for (let i: uint64 = 0; i < escrows.length; i += 1) { + if (this.escrows(escrows[i]).exists) { + result.push(this.escrows(escrows[i]).value) + continue + } + result.push(emptyEscrowInfo()) + } + return result + } + + @abimethod({ readonly: true }) + arc58_getAllowances(escrow: string, assets: uint64[]): AllowanceInfo[] { + let result: AllowanceInfo[] = [] + for (let i: uint64 = 0; i < assets.length; i += 1) { + const key: AllowanceKey = { escrow, asset: assets[i] } + if (this.allowances(key).exists) { + result.push(this.allowances(key).value) + continue + } + result.push(emptyAllowanceInfo()) + } + return result + } + + @abimethod({ readonly: true }) + arc58_getExecutions(leases: bytes<32>[]): ExecutionInfo[] { + let result: ExecutionInfo[] = [] + for (let i: uint64 = 0; i < leases.length; i += 1) { + if (this.executions(leases[i]).exists) { + result.push(this.executions(leases[i]).value) + continue + } + result.push(emptyExecutionInfo()) + } + return result + } + + @abimethod({ readonly: true }) + mbr( + escrow: string, + methodCount: uint64, + plugin: string, + groups: uint64, + ): AbstractAccountBoxMBRData { + const escrows = this.escrowsMbr(escrow) + + return { + plugins: this.pluginsMbr(escrow, methodCount), + namedPlugins: this.namedPluginsMbr(plugin), + escrows, + allowances: this.allowancesMbr(escrow), + executions: this.executionsMbr(groups), + escrowExists: this.escrows(escrow).exists, + newEscrowMintCost: ( + NewCostForARC58 + + Global.minBalance + + ARC58WalletIDsByAccountsMbr + + escrows + ) + } + } +} diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/abstracted_account/errors.ts b/assets/arc-0058/projects/arc-0058/smart_contracts/abstracted_account/errors.ts new file mode 100644 index 000000000..db0bf4164 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/abstracted_account/errors.ts @@ -0,0 +1,47 @@ + +export const ERR_SENDER_MUST_BE_ADMIN_OR_CONTROLLED_ADDRESS = 'sender must be either controlledAddress or admin' +export const ERR_ADMIN_ONLY = 'admin only' +export const ERR_ADMIN_CANNOT_BE_CONTROLLED = 'admin and controlled address cannot be the same' +export const ERR_ONLY_ADMIN_CAN_UPDATE = 'only an admin can update the application' +export const ERR_ONLY_ADMIN_CAN_CHANGE_ADMIN = 'only admin can change the admin account' +export const ERR_ONLY_ADMIN_CAN_REKEY = 'only admin can rekey the account' +export const ERR_ONLY_ADMIN_CAN_ADD_PLUGIN = 'only admin can add a plugin' +export const ERR_ONLY_ADMIN_CAN_ADD_METHOD_RESTRICTION = 'only admin can add a method restriction' +export const ERR_NAMED_PLUGIN_ALREADY_EXISTS = 'plugin with this name already exists' +export const ERR_ONLY_ADMIN_OR_REVOCATION_APP_CAN_REMOVE_PLUGIN = 'only admin can remove plugins' +export const ERR_SENDER_NOT_ALLOWED_TO_CALL_PLUGIN = 'this sender is not allowed to trigger this plugin' +export const ERR_PLUGIN_DOES_NOT_CONTROL_WALLET = 'this plugin is not in control of the account' +export const ERR_PLUGIN_DOES_NOT_HAVE_ADMIN_PRIVILEGES = 'this plugin does not have admin privileges' +export const ERR_PLUGIN_DOES_NOT_EXIST = 'plugin does not exist' +export const ERR_NOT_USING_ALLOWANCE = 'not using allowance for this plugin' +export const ERR_PLUGIN_EXPIRED = 'plugin expired' +export const ERR_PLUGIN_ON_COOLDOWN = 'plugin on cooldown' +export const ERR_INVALID_PLUGIN_CALL = 'invalid plugin call' +export const ERR_CANNOT_CALL_OTHER_APPS_DURING_REKEY = 'cannot call other apps during rekey' +export const ERR_INVALID_ONCOMPLETE = 'invalid oncomplete must be no op' +export const ERR_INVALID_SENDER_ARG = 'invalid sender must be this app id' +export const ERR_INVALID_SENDER_VALUE = 'invalid sender app id' +export const ERR_METHOD_ON_COOLDOWN = 'method on cooldown' +export const ERR_MISSING_REKEY_BACK = 'missing rekey back' +export const ERR_MALFORMED_OFFSETS = 'malformed method offsets' +export const ERR_INVALID_METHOD_SIGNATURE_LENGTH = 'invalid method signature length' +export const ERR_SENDER_MUST_BE_ADMIN_PLUGIN = 'sender must be admin plugin' +export const ERR_ZERO_ADDRESS_DELEGATION_TYPE = 'delegation type must not be self for global plugins' +export const ERR_ALLOWANCE_ALREADY_EXISTS = 'allowance already exists' +export const ERR_ALLOWANCE_DOES_NOT_EXIST = 'allowance does not exist' +export const ERR_ALLOWANCE_EXCEEDED = 'allowance exceeded' +export const ERR_ESCROW_DOES_NOT_EXIST = 'escrow does not exist' +export const ERR_NOT_USING_ESCROW = 'not using escrow for this plugin' +export const ERR_ESCROW_ALREADY_EXISTS = 'escrow already exists' +export const ERR_EXECUTION_KEY_DOES_NOT_EXIST = 'execution key does not exist' +export const ERR_EXECUTION_KEY_UPDATE_MUST_MATCH_FIRST_VALID = 'execution key update must match first valid' +export const ERR_EXECUTION_KEY_UPDATE_MUST_MATCH_LAST_VALID = 'execution key update must match last valid' +export const ERR_ESCROW_LOCKED = 'Escrow is locked' +export const ERR_ESCROW_NAME_REQUIRED = 'Escrow name is required' +export const ERR_ESCROW_REQUIRED_TO_BE_SET_AS_DEFAULT = 'escrow must be set if defaultToEscrow is true' +export const ERR_USING_EXECUTION_KEY_REQUIRES_GLOBAL = 'using execution key requires global plugin' +export const ERR_ADMIN_PLUGINS_CANNOT_USE_ESCROWS = 'admin plugins cannot use escrows' +export const ERR_GROUP_NOT_FOUND = 'Group not found' +export const ERR_EXECUTION_EXPIRED = 'Execution key expired' +export const ERR_EXECUTION_NOT_READY = 'Execution key not ready' +export const ERR_EXECUTION_KEY_NOT_FOUND = 'Execution key not found' \ No newline at end of file diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/abstracted_account/get_plugin_txns.test.ts b/assets/arc-0058/projects/arc-0058/smart_contracts/abstracted_account/get_plugin_txns.test.ts new file mode 100644 index 000000000..953ddb843 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/abstracted_account/get_plugin_txns.test.ts @@ -0,0 +1,184 @@ +/* eslint-disable prefer-destructuring */ +import { describe, test, expect } from '@jest/globals'; + +const BRANCHING_OPCODES = ['b', 'bz', 'bnz', 'callsub', 'retsub', 'match', 'switch']; +const MAX_AVM_VERSION = 10; +const STATIC_OPS = [ + 'pushint', + 'pushbytes', + 'bytecblock', + 'intcblock', + 'bytec_0', + 'bytec_1', + 'bytec_2', + 'bytec_3', + 'intc_0', + 'intc_1', + 'intc_2', + 'intc_3', +]; + +function getPluginTxns(teal: string): Record[] { + const txns: Record[] = []; + let inTxn = false; + const ops: string[] = []; + + const programVersion = parseInt(teal.match(/(?<=#pragma version) \d+/)![0], 10); + + // Must check program version because newer AVM versions might have new branching or itxn opcodes + if (programVersion > MAX_AVM_VERSION) { + throw new Error(`Unsupported program version: ${programVersion}`); + } + + // Get all of the lines of non comment code + // This should be the decompiled TEAL + const lines = teal + .split('\n') + .map((line) => line.trim()) + .filter((line) => !line.startsWith('//') && line.length > 0); + + let currentTxn: Record = {}; + + lines.forEach((line) => { + const opcode = line.split(' ')[0]; + if (opcode === 'itxn_begin' || opcode === 'itxn_next' || opcode === 'itxn_submit') { + // Only push the txn if it has a sender + // In the future we could explicitly check if it's the abstracted account address or dynamic + if (Object.keys(currentTxn).length > 0 && currentTxn.Sender) { + txns.push(currentTxn); + } + if (opcode !== 'itxn_submit') inTxn = true; + ops.length = 0; + currentTxn = {}; + return; + } + + if (inTxn) { + // Do not allow branching because it will make it much harder to perform static analysis + if (BRANCHING_OPCODES.includes(opcode)) { + throw new Error(`Branching opcode ${opcode} found when composing inner transaction`); + } + + if (opcode === 'itxn_field') { + const field = line.split(' ')[1]; + + const lastOpLine = ops.at(-1)!; + const lastOp = lastOpLine.split(' ')[0]; + ops.length = 0; + + if (!STATIC_OPS.includes(lastOp)) { + currentTxn[field] = 'dynamic'; + return; + } + + let value: string; + + if (lastOp.startsWith('intc') || lastOp.startsWith('bytec')) { + value = lastOpLine.split(' // ')[1]; + } else { + value = lastOpLine.split(' ')[1]; + } + + currentTxn[field] = lastOp.includes('int') ? parseInt(value, 10) : value; + } else { + ops.push(line); + } + } + }); + + return txns; +} + +describe('getPluginTxns', () => { + test('pay', () => { + const teal = ` + #pragma version 10 + + itxn_begin + + pushbytes 0xdeadbeef + itxn_field Sender + + pushint 0 + itxn_field TypeEnum + + pushint 1 + itxn_field Amount + + itxn_submit + `; + + const txns = getPluginTxns(teal); + expect(txns.length).toBe(1); + expect(txns[0]).toEqual({ TypeEnum: 0, Sender: '0xdeadbeef', Amount: 1 }); + }); + + test('dynamic pay', () => { + const teal = ` + #pragma version 10 + + itxn_begin + + bytecblock 4 // 0xdeadbeef + itxn_field Sender + + intc_1 // 0 + itxn_field TypeEnum + + pushint 1 + pushint 1 + + + itxn_field Amount + + itxn_submit + `; + + const txns = getPluginTxns(teal); + expect(txns.length).toBe(1); + expect(txns[0]).toEqual({ TypeEnum: 0, Sender: '0xdeadbeef', Amount: 'dynamic' }); + }); + + test('branch', () => { + const teal = ` + #pragma version 10 + + itxn_begin + + pushbytes 0xdeadbeef + itxn_field Sender + + callsub malicious_subroutine + + pushint 0 + itxn_field TypeEnum + + pushint 1 + itxn_field Amount + + itxn_submit + `; + + expect(() => getPluginTxns(teal)).toThrowError('Branching opcode callsub found when composing inner transaction'); + }); + + test('future TEAL', () => { + const teal = ` + #pragma version 999 + + itxn_begin + + pushbytes 0xdeadbeef + itxn_field Sender + + pushint 0 + itxn_field TypeEnum + + pushint 1 + itxn_field Amount + + itxn_submit + `; + + expect(() => getPluginTxns(teal)).toThrowError('Unsupported program version: 999'); + }); +}); diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/abstracted_account/permissions.test.ts b/assets/arc-0058/projects/arc-0058/smart_contracts/abstracted_account/permissions.test.ts new file mode 100644 index 000000000..abbff54a7 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/abstracted_account/permissions.test.ts @@ -0,0 +1,1554 @@ +import { describe, test, beforeAll, beforeEach, expect } from '@jest/globals'; +import { algorandFixture } from '@algorandfoundation/algokit-utils/testing'; +import * as algokit from '@algorandfoundation/algokit-utils'; +import algosdk, { makeBasicAccountTransactionSigner } from 'algosdk'; +import { ERR_ALLOWANCE_EXCEEDED, ERR_CANNOT_CALL_OTHER_APPS_DURING_REKEY, ERR_MALFORMED_OFFSETS, ERR_METHOD_ON_COOLDOWN, ERR_PLUGIN_DOES_NOT_EXIST, ERR_PLUGIN_EXPIRED, ERR_PLUGIN_ON_COOLDOWN } from './errors'; +import { AbstractedAccountClient, AbstractedAccountFactory, EscrowInfo } from '../artifacts/abstracted_account/AbstractedAccountClient'; +import { OptInPluginClient, OptInPluginFactory } from '../artifacts/plugins/optin/OptInPluginClient'; +import { EscrowFactoryFactory } from '../artifacts/escrow/EscrowFactoryClient'; +import { PayPluginClient, PayPluginFactory } from '../artifacts/plugins/pay/PayPluginClient'; +import { getABIEncodedValue } from '@algorandfoundation/algokit-utils/types/app-arc56'; + +const ZERO_ADDRESS = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY5HFKQ'; + +const PluginInfoAbiType = algosdk.ABIType.from('(bool,uint8,uint64,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,uint64,uint64)') +type PluginInfoTuple = [boolean, bigint, bigint, bigint, bigint, [string, bigint, bigint][], boolean, boolean, number, number] + +const EscrowInfoAbiType = algosdk.ABIType.from('(uint64,bool)'); + +const AllowanceInfoAbiType = algosdk.ABIType.from('(uint8,uint64,uint64,uint64,uint64,uint64,uint64,bool)'); +type AllowanceInfoTuple = [bigint, bigint, bigint, bigint, bigint, bigint, bigint, boolean]; + + +algokit.Config.configure({ populateAppCallResources: true }); + +describe('ARC58 Plugin Permissions', () => { + /** Alice's externally owned account (ie. a keypair account she has in Pera) */ + let aliceEOA: algosdk.Account; + /** The client for Alice's abstracted account */ + let abstractedAccountClient: AbstractedAccountClient; + /** The client for the dummy plugin */ + let optInPluginClient: OptInPluginClient; + /** The client for the pay plugin */ + let payPluginClient: PayPluginClient; + /** The account that will be calling the plugin */ + let caller: algosdk.Account; + /** optin plugin app id */ + let plugin: bigint; + /** pay plugin app id */ + let payPlugin: bigint; + /** The suggested params for transactions */ + let suggestedParams: algosdk.SuggestedParams; + /** The maximum uint64 value. Used to indicate a never-expiring plugin */ + const MAX_UINT64 = BigInt('18446744073709551615'); + /** a created asset id to use */ + let asset: bigint; + /** the name of the escrow in use during this test */ + let escrow: string = ''; + + const fixture = algorandFixture(); + + async function callPayPlugin( + caller: algosdk.Account, + payClient: PayPluginClient, + receiver: string, + asset: bigint, + amount: bigint, + offsets: number[] = [], + global: boolean = true, + ) { + const payPluginTxn = ( + await (payClient + .createTransaction + .pay({ + sender: caller.addr, + signer: makeBasicAccountTransactionSigner(caller), + args: { + wallet: abstractedAccountClient.appId, + rekeyBack: true, + receiver, + asset, + amount + }, + extraFee: (1_000).microAlgos() + })) + ).transactions[0]; + + await abstractedAccountClient + .newGroup() + .arc58RekeyToPlugin({ + sender: caller.addr, + signer: makeBasicAccountTransactionSigner(caller), + args: { + plugin: payPlugin, + global, + escrow, + methodOffsets: offsets, + fundsRequest: [[asset, amount]] + }, + extraFee: (2000).microAlgos() + }) + .addTransaction(payPluginTxn, makeBasicAccountTransactionSigner(caller)) + .arc58VerifyAuthAddress({ + sender: caller.addr, + signer: makeBasicAccountTransactionSigner(caller), + args: {} + }) + .send(); + } + + async function callOptinPlugin( + caller: algosdk.Account, + receiver: string, + suggestedParams: algosdk.SuggestedParams, + pluginClient: OptInPluginClient, + asset: bigint, + offsets: number[] = [], + global: boolean = true + ) { + const mbrPayment = algosdk.makePaymentTxnWithSuggestedParamsFromObject({ + sender: caller.addr, + receiver, + amount: 100_000, + suggestedParams, + }); + + const optInGroup = ( + await (pluginClient + .createTransaction + .optInToAsset({ + sender: caller.addr, + signer: makeBasicAccountTransactionSigner(caller), + args: { + wallet: abstractedAccountClient.appId, + rekeyBack: true, + assets: [asset], + mbrPayment + }, + extraFee: (1_000).microAlgos() + })) + ).transactions; + + await abstractedAccountClient + .newGroup() + .arc58RekeyToPlugin({ + sender: caller.addr, + signer: makeBasicAccountTransactionSigner(caller), + args: { + plugin, + global, + escrow, + methodOffsets: offsets, + fundsRequest: [] + }, + extraFee: (2000).microAlgos() + }) + // Add the mbr payment + .addTransaction(optInGroup[0], makeBasicAccountTransactionSigner(caller)) // mbrPayment + // Add the opt-in plugin call + .addTransaction(optInGroup[1], makeBasicAccountTransactionSigner(caller)) // optInToAsset + .arc58VerifyAuthAddress({ + sender: caller.addr, + signer: makeBasicAccountTransactionSigner(caller), + args: {} + }) + .send(); + } + + beforeEach(async () => { + await fixture.beforeEach(); + + const { algorand } = fixture.context; + + const escrowFactory = new EscrowFactoryFactory({ + defaultSender: aliceEOA.addr, + defaultSigner: makeBasicAccountTransactionSigner(aliceEOA), + algorand + }) + + const escrowFactoryResults = await escrowFactory.send.create.bare() + + await escrowFactoryResults.appClient.appClient.fundAppAccount({ amount: (100_000).microAlgos() }); + + const minter = new AbstractedAccountFactory({ + defaultSender: aliceEOA.addr, + defaultSigner: makeBasicAccountTransactionSigner(aliceEOA), + algorand + }); + + const results = await minter.send.create.createApplication({ + args: { + admin: aliceEOA.addr.toString(), + controlledAddress: ZERO_ADDRESS, + escrowFactory: escrowFactoryResults.appClient.appId, + }, + }); + abstractedAccountClient = results.appClient; + + await abstractedAccountClient.appClient.fundAppAccount({ amount: (100_000).microAlgos() }); + }); + + beforeAll(async () => { + await fixture.beforeEach(); + const { testAccount } = fixture.context; + const { algorand } = fixture; + aliceEOA = testAccount; + caller = algorand.account.random().account; + const dispenser = await algorand.account.dispenserFromEnvironment(); + + suggestedParams = await algorand.getSuggestedParams(); + + await algorand.account.ensureFunded( + aliceEOA.addr, + dispenser, + (100).algos(), + ); + + await algorand.account.ensureFunded( + caller.addr, + dispenser, + (100).algos(), + ); + + const optinPluginMinter = new OptInPluginFactory({ + defaultSender: aliceEOA.addr, + defaultSigner: makeBasicAccountTransactionSigner(aliceEOA), + algorand + }); + const optInMintResults = await optinPluginMinter.send.create.bare(); + + optInPluginClient = optInMintResults.appClient; + plugin = optInPluginClient.appId; + + // Create an asset + const txn = await algorand.send.assetCreate({ + sender: aliceEOA.addr, + total: BigInt(1_000_000_000_000), + decimals: 6, + defaultFrozen: false, + }); + + asset = BigInt(txn.confirmation!.assetIndex!); + + const payPluginMinter = new PayPluginFactory({ + defaultSender: aliceEOA.addr, + defaultSigner: makeBasicAccountTransactionSigner(aliceEOA), + algorand + }); + + const payMintResults = await payPluginMinter.send.create.bare(); + payPluginClient = payMintResults.appClient; + payPlugin = payPluginClient.appId; + }); + + test('both are valid, global is used', async () => { + const { algorand } = fixture; + + const dispenser = await algorand.account.dispenserFromEnvironment(); + + let accountInfo = await algorand.account.getInformation(abstractedAccountClient.appAddress) + expect(accountInfo.balance.microAlgos).toEqual(accountInfo.minBalance.microAlgos) + + const mbr = (await abstractedAccountClient.send.mbr({ args: { methodCount: 0, plugin: '', escrow: '', groups: 0n } })).return + + if (mbr === undefined) { + throw new Error('MBR is undefined'); + } + + console.log(`Funding arc58 account with amount: ${mbr.plugins * BigInt(2)}`) + const minFundingAmount = mbr.plugins * BigInt(2) // we install plugins twice here so double it + + await algorand.account.ensureFunded(abstractedAccountClient.appAddress, dispenser, minFundingAmount.microAlgo()) + + await abstractedAccountClient.send.arc58AddPlugin({ + args: { + plugin, + caller: caller.addr.toString(), + admin: false, + delegationType: 3, + escrow: '', + lastValid: MAX_UINT64, + cooldown: 0, + methods: [], + useRounds: false, + useExecutionKey: false, + defaultToEscrow: false + } + }); + + await abstractedAccountClient.send.arc58AddPlugin({ + args: { + plugin, + caller: ZERO_ADDRESS, + admin: false, + delegationType: 3, + escrow: '', + lastValid: MAX_UINT64, + cooldown: 1, + methods: [], + useRounds: false, + useExecutionKey: false, + defaultToEscrow: false + } + }); + + accountInfo = await algorand.account.getInformation(abstractedAccountClient.appAddress) + expect(accountInfo.balance.microAlgos).toEqual(accountInfo.minBalance.microAlgos) + + await callOptinPlugin(caller, abstractedAccountClient.appAddress.toString(), suggestedParams, optInPluginClient, asset, [], true); + + const globalPluginBox = await abstractedAccountClient.state.box.plugins.value({ plugin, caller: ZERO_ADDRESS, escrow }) + + const ts = (await algorand.client.algod.status().do()) + const block = (await algorand.client.algod.block((ts.lastRound - 1n)).do()); + + expect(globalPluginBox?.lastCalled).toBe(BigInt(block.block.header.timestamp)); + }); + + test('global valid, global is used', async () => { + const { algorand } = fixture; + + const dispenser = await algorand.account.dispenserFromEnvironment(); + + let accountInfo = await algorand.account.getInformation(abstractedAccountClient.appAddress) + expect(accountInfo.balance.microAlgos).toEqual(accountInfo.minBalance.microAlgos) + + const mbr = (await abstractedAccountClient.send.mbr({ + args: { + methodCount: 0, + plugin: '', + escrow: '', + groups: 0n + } + })).return + + if (mbr === undefined) { + throw new Error('MBR is undefined'); + } + + console.log(`Funding arc58 account with amount: ${mbr.plugins}`) + + await algorand.account.ensureFunded(abstractedAccountClient.appAddress, dispenser, mbr.plugins.microAlgo()) + + await abstractedAccountClient.send.arc58AddPlugin({ + sender: aliceEOA.addr, + signer: makeBasicAccountTransactionSigner(aliceEOA), + args: { + plugin, + caller: ZERO_ADDRESS, + admin: false, + delegationType: 3, + escrow: '', + lastValid: MAX_UINT64, + cooldown: 1, + methods: [], + useRounds: false, + useExecutionKey: false, + defaultToEscrow: false + } + }); + + accountInfo = await algorand.account.getInformation(abstractedAccountClient.appAddress) + expect(accountInfo.balance.microAlgos).toEqual(accountInfo.minBalance.microAlgos) + + await callOptinPlugin(caller, abstractedAccountClient.appAddress.toString(), suggestedParams, optInPluginClient, asset, [], true); + + const globalPluginBox = await abstractedAccountClient.state.box.plugins.value({ plugin, caller: ZERO_ADDRESS, escrow }) + + const ts = (await algorand.client.algod.status().do()) + const block = (await algorand.client.algod.block(ts.lastRound - 1n).do()); + + expect(globalPluginBox?.lastCalled).toBe(BigInt(block.block.header.timestamp)); + }); + + test('global does not exist, sender valid', async () => { + const { algorand } = fixture; + + const dispenser = await algorand.account.dispenserFromEnvironment(); + + let accountInfo = await algorand.account.getInformation(abstractedAccountClient.appAddress) + expect(accountInfo.balance.microAlgos).toEqual(accountInfo.minBalance.microAlgos) + + const mbr = (await abstractedAccountClient.send.mbr({ + args: { + methodCount: 0, + plugin: '', + escrow: '', + groups: 0n + } + })).return + + if (mbr === undefined) { + throw new Error('MBR is undefined'); + } + + console.log(`Funding arc58 account with amount: ${mbr.plugins}`) + + await algorand.account.ensureFunded(abstractedAccountClient.appAddress, dispenser, mbr.plugins.microAlgo()) + + await abstractedAccountClient.send.arc58AddPlugin({ + sender: aliceEOA.addr, + signer: makeBasicAccountTransactionSigner(aliceEOA), + args: { + plugin, + caller: caller.addr.toString(), + admin: false, + delegationType: 3, + escrow: '', + lastValid: MAX_UINT64, + cooldown: 1, + methods: [], + useRounds: false, + useExecutionKey: false, + defaultToEscrow: false + } + }); + + accountInfo = await algorand.account.getInformation(abstractedAccountClient.appAddress) + expect(accountInfo.balance.microAlgos).toEqual(accountInfo.minBalance.microAlgos) + + await callOptinPlugin(caller, abstractedAccountClient.appAddress.toString(), suggestedParams, optInPluginClient, asset, [], false); + + const callerPluginBox = await abstractedAccountClient.state.box.plugins.value({ plugin, caller: caller.addr.toString(), escrow }) + + const ts = (await algorand.client.algod.status().do()) + const block = (await algorand.client.algod.block(ts.lastRound - 1n).do()); + + expect(callerPluginBox?.lastCalled).toBe(BigInt(block.block.header.timestamp)); + }); + + test('global does not exist, sender valid, method allowed', async () => { + const { algorand } = fixture; + + const dispenser = await algorand.account.dispenserFromEnvironment(); + + let accountInfo = await algorand.account.getInformation(abstractedAccountClient.appAddress) + expect(accountInfo.balance.microAlgos).toEqual(accountInfo.minBalance.microAlgos) + + const mbr = (await abstractedAccountClient.send.mbr({ + args: { + methodCount: 3, + plugin: '', + escrow: '', + groups: 0n + } + })).return + + if (mbr === undefined) { + throw new Error('MBR is undefined'); + } + + console.log(`Funding arc58 account with amount: ${mbr.plugins}`) + + await algorand.account.ensureFunded(abstractedAccountClient.appAddress, dispenser, mbr.plugins.microAlgo()) + + const optInToAssetSelector = optInPluginClient.appClient.getABIMethod('optInToAsset').getSelector(); + await abstractedAccountClient.send.arc58AddPlugin({ + sender: aliceEOA.addr, + signer: makeBasicAccountTransactionSigner(aliceEOA), + args: { + plugin, + caller: caller.addr.toString(), + admin: false, + delegationType: 3, + escrow: '', + lastValid: MAX_UINT64, + cooldown: 1, + methods: [ + [optInToAssetSelector, 0], + [Buffer.from('dddd'), 0], + [Buffer.from('aaaa'), 0] + ], + useRounds: false, + useExecutionKey: false, + defaultToEscrow: false + } + }); + + accountInfo = await algorand.account.getInformation(abstractedAccountClient.appAddress) + expect(accountInfo.balance.microAlgos).toEqual(accountInfo.minBalance.microAlgos) + + console.log('optInToAssetSelector', new Uint8Array([...optInToAssetSelector])) + + await callOptinPlugin(caller, abstractedAccountClient.appAddress.toString(), suggestedParams, optInPluginClient, asset, [0], false); + + const callerPluginBox = await abstractedAccountClient.state.box.plugins.value({ plugin, caller: caller.addr.toString(), escrow }) + + const ts = (await algorand.client.algod.status().do()) + const block = (await algorand.client.algod.block(ts.lastRound - 1n).do()); + + expect(callerPluginBox?.lastCalled).toBe(BigInt(block.block.header.timestamp)); + }); + + test('methods on cooldown', async () => { + const { algorand } = fixture; + + const dispenser = await algorand.account.dispenserFromEnvironment(); + + let accountInfo = await algorand.account.getInformation(abstractedAccountClient.appAddress) + expect(accountInfo.balance.microAlgos).toEqual(accountInfo.minBalance.microAlgos) + + const mbr = (await abstractedAccountClient.send.mbr({ + args: { + methodCount: 1, + plugin: '', + escrow: '', + groups: 0n + } + })).return + + if (mbr === undefined) { + throw new Error('MBR is undefined'); + } + + console.log(`Funding arc58 account with amount: ${mbr.plugins}`) + + await algorand.account.ensureFunded(abstractedAccountClient.appAddress, dispenser, mbr.plugins.microAlgo()) + + const optInToAssetSelector = optInPluginClient.appClient.getABIMethod('optInToAsset').getSelector(); + await abstractedAccountClient.send.arc58AddPlugin({ + sender: aliceEOA.addr, + signer: makeBasicAccountTransactionSigner(aliceEOA), + args: { + plugin, + caller: ZERO_ADDRESS, + admin: false, + delegationType: 3, + escrow: '', + lastValid: MAX_UINT64, + cooldown: 0, + methods: [ + [optInToAssetSelector, 100] + ], + useRounds: false, + useExecutionKey: false, + defaultToEscrow: false + } + }); + + accountInfo = await algorand.account.getInformation(abstractedAccountClient.appAddress) + expect(accountInfo.balance.microAlgos).toEqual(accountInfo.minBalance.microAlgos) + + await callOptinPlugin(caller, abstractedAccountClient.appAddress.toString(), suggestedParams, optInPluginClient, asset, [0]); + + const callerPluginBox = await abstractedAccountClient.state.box.plugins.value({ plugin, caller: ZERO_ADDRESS, escrow }) + + const ts = (await algorand.client.algod.status().do()); + const block = (await algorand.client.algod.block(ts.lastRound - 1n).do()); + + expect(callerPluginBox?.methods[0][2]).toBe(BigInt(block.block.header.timestamp)); + + let error = 'no error'; + try { + await callOptinPlugin(caller, abstractedAccountClient.appAddress.toString(), suggestedParams, optInPluginClient, asset, [0]); + } catch (e: any) { + error = e.message; + } + + expect(error).toContain(ERR_METHOD_ON_COOLDOWN) + }); + + test('methods on cooldown, single group', async () => { + const { algorand } = fixture; + + const optInToAssetSelector = optInPluginClient.appClient.getABIMethod('optInToAsset').getSelector(); + + const dispenser = await algorand.account.dispenserFromEnvironment(); + + let accountInfo = await algorand.account.getInformation(abstractedAccountClient.appAddress) + expect(accountInfo.balance.microAlgos).toEqual(accountInfo.minBalance.microAlgos) + + const mbr = (await abstractedAccountClient.send.mbr({ + args: { + methodCount: 1, + plugin: '', + escrow: '', + groups: 0n + } + })).return + + if (mbr === undefined) { + throw new Error('MBR is undefined'); + } + + console.log(`Funding arc58 account with amount: ${mbr.plugins}`) + + await algorand.account.ensureFunded(abstractedAccountClient.appAddress, dispenser, mbr.plugins.microAlgo()) + + await abstractedAccountClient.send.arc58AddPlugin({ + sender: aliceEOA.addr, + signer: makeBasicAccountTransactionSigner(aliceEOA), + args: { + plugin, + caller: ZERO_ADDRESS, + admin: false, + delegationType: 3, + escrow: '', + lastValid: MAX_UINT64, + cooldown: 0, + methods: [ + [optInToAssetSelector, 1] // cooldown of 1 so we can call it at most once per round + ], + useRounds: false, + useExecutionKey: false, + defaultToEscrow: false + } + }); + + accountInfo = await algorand.account.getInformation(abstractedAccountClient.appAddress) + expect(accountInfo.balance.microAlgos).toEqual(accountInfo.minBalance.microAlgos) + + const mbrPayment = algosdk.makePaymentTxnWithSuggestedParamsFromObject({ + sender: caller.addr, + receiver: abstractedAccountClient.appAddress, + amount: 100_000, + suggestedParams, + }); + + const optInGroup = ( + await (optInPluginClient + .createTransaction + .optInToAsset({ + sender: caller.addr, + signer: makeBasicAccountTransactionSigner(caller), + args: { + wallet: abstractedAccountClient.appId, + rekeyBack: false, + assets: [asset], + mbrPayment + }, + extraFee: (1_000).microAlgos() + })) + ).transactions; + + const mbrPaymentTwo = algosdk.makePaymentTxnWithSuggestedParamsFromObject({ + sender: caller.addr, + receiver: abstractedAccountClient.appAddress, + amount: 100_000, + suggestedParams, + note: new Uint8Array(Buffer.from('two')) + }); + + const optInGroupTwo = ( + await (optInPluginClient + .createTransaction + .optInToAsset({ + sender: caller.addr, + signer: makeBasicAccountTransactionSigner(caller), + args: { + wallet: abstractedAccountClient.appId, + rekeyBack: true, + assets: [asset], + mbrPayment: mbrPaymentTwo + }, + extraFee: (1_000).microAlgos(), + note: 'two' + })) + ).transactions; + + let error = 'no error'; + try { + await abstractedAccountClient + .newGroup() + .arc58RekeyToPlugin({ + sender: caller.addr, + signer: makeBasicAccountTransactionSigner(caller), + args: { + plugin, + global: true, + methodOffsets: [0, 0], + fundsRequest: [], + escrow: '' + }, + extraFee: (1000).microAlgos() + }) + // Add the mbr payment + .addTransaction(optInGroup[0], makeBasicAccountTransactionSigner(caller)) // mbrPayment + // Add the opt-in plugin call + .addTransaction(optInGroup[1], makeBasicAccountTransactionSigner(caller)) // optInToAsset + .addTransaction(optInGroupTwo[0], makeBasicAccountTransactionSigner(caller)) // mbrPayment + .addTransaction(optInGroupTwo[1], makeBasicAccountTransactionSigner(caller)) // optInToAsset + .arc58VerifyAuthAddress({ + sender: caller.addr, + signer: makeBasicAccountTransactionSigner(caller), + args: {} + }) + .send(); + } catch (e: any) { + error = e.message; + } + + expect(error).toContain(ERR_METHOD_ON_COOLDOWN); + }); + + test('plugins on cooldown', async () => { + const { algorand } = fixture; + + const dispenser = await algorand.account.dispenserFromEnvironment(); + + let accountInfo = await algorand.account.getInformation(abstractedAccountClient.appAddress) + expect(accountInfo.balance.microAlgos).toEqual(accountInfo.minBalance.microAlgos) + + const mbr = (await abstractedAccountClient.send.mbr({ + args: { + methodCount: 0, + plugin: '', + escrow: '', + groups: 0n + } + })).return + + if (mbr === undefined) { + throw new Error('MBR is undefined'); + } + + console.log(`Funding arc58 account with amount: ${mbr.plugins}`) + + await algorand.account.ensureFunded(abstractedAccountClient.appAddress, dispenser, mbr.plugins.microAlgo()) + + await abstractedAccountClient.send.arc58AddPlugin({ + sender: aliceEOA.addr, + signer: makeBasicAccountTransactionSigner(aliceEOA), + args: { + plugin, + caller: caller.addr.toString(), + admin: false, + delegationType: 3, + escrow: '', + lastValid: MAX_UINT64, + cooldown: 100, + methods: [], + useRounds: false, + useExecutionKey: false, + defaultToEscrow: false + } + }); + + accountInfo = await algorand.account.getInformation(abstractedAccountClient.appAddress) + expect(accountInfo.balance.microAlgos).toEqual(accountInfo.minBalance.microAlgos) + + await callOptinPlugin(caller, abstractedAccountClient.appAddress.toString(), suggestedParams, optInPluginClient, asset, [], false); + + let error = 'no error'; + try { + await callOptinPlugin(caller, abstractedAccountClient.appAddress.toString(), suggestedParams, optInPluginClient, asset, [], false); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } catch (e: any) { + error = e.message; + } + + expect(error).toContain(ERR_PLUGIN_ON_COOLDOWN); + }); + + test('neither sender nor global plugin exists', async () => { + let error = 'no error'; + try { + await callOptinPlugin(caller, abstractedAccountClient.appAddress.toString(), suggestedParams, optInPluginClient, asset); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } catch (e: any) { + error = e.message; + } + + expect(error).toContain(ERR_PLUGIN_DOES_NOT_EXIST); + }); + + test('expired', async () => { + const { algorand } = fixture; + + const dispenser = await algorand.account.dispenserFromEnvironment(); + + let accountInfo = await algorand.account.getInformation(abstractedAccountClient.appAddress) + expect(accountInfo.balance.microAlgos).toEqual(accountInfo.minBalance.microAlgos) + + const mbr = (await abstractedAccountClient.send.mbr({ + args: { + methodCount: 0, + plugin: '', + escrow: '', + groups: 0n + } + })).return + + if (mbr === undefined) { + throw new Error('MBR is undefined'); + } + + console.log(`Funding arc58 account with amount: ${mbr.plugins}`) + + await algorand.account.ensureFunded(abstractedAccountClient.appAddress, dispenser, mbr.plugins.microAlgo()) + + await abstractedAccountClient.send.arc58AddPlugin({ + sender: aliceEOA.addr, + signer: makeBasicAccountTransactionSigner(aliceEOA), + args: { + plugin, + caller: ZERO_ADDRESS, + admin: false, + delegationType: 3, + escrow: '', + lastValid: 1, + cooldown: 0, + methods: [], + useRounds: false, + useExecutionKey: false, + defaultToEscrow: false + } + }); + + accountInfo = await algorand.account.getInformation(abstractedAccountClient.appAddress) + expect(accountInfo.balance.microAlgos).toEqual(accountInfo.minBalance.microAlgos) + + let error = 'no error'; + try { + await callOptinPlugin(caller, abstractedAccountClient.appAddress.toString(), suggestedParams, optInPluginClient, asset); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } catch (e: any) { + error = e.message; + } + + expect(error).toContain(ERR_PLUGIN_EXPIRED); + }); + + test('erroneous app call in sandwich', async () => { + const { algorand } = fixture; + + const dispenser = await algorand.account.dispenserFromEnvironment(); + + let accountInfo = await algorand.account.getInformation(abstractedAccountClient.appAddress) + expect(accountInfo.balance.microAlgos).toEqual(accountInfo.minBalance.microAlgos) + + const mbr = (await abstractedAccountClient.send.mbr({ + args: { + methodCount: 0, + plugin: '', + escrow: '', + groups: 0n + } + })).return + + if (mbr === undefined) { + throw new Error('MBR is undefined'); + } + + console.log(`Funding arc58 account with amount: ${mbr.plugins}`) + + await algorand.account.ensureFunded(abstractedAccountClient.appAddress, dispenser, mbr.plugins.microAlgo()) + + await abstractedAccountClient.send.arc58AddPlugin({ + sender: aliceEOA.addr, + signer: makeBasicAccountTransactionSigner(aliceEOA), + args: { + plugin, + caller: ZERO_ADDRESS, + admin: false, + delegationType: 3, + escrow: '', + lastValid: MAX_UINT64, + cooldown: 0, + methods: [], + useRounds: false, + useExecutionKey: false, + defaultToEscrow: false + } + }); + + accountInfo = await algorand.account.getInformation(abstractedAccountClient.appAddress) + expect(accountInfo.balance.microAlgos).toEqual(accountInfo.minBalance.microAlgos) + + const mbrPayment = algosdk.makePaymentTxnWithSuggestedParamsFromObject({ + sender: caller.addr, + receiver: abstractedAccountClient.appAddress, + amount: 100_000, + suggestedParams, + }); + + // create an extra app call that on its own would succeed + const erroneousAppCall = ( + await abstractedAccountClient.createTransaction.arc58AddPlugin({ + sender: aliceEOA.addr, + signer: makeBasicAccountTransactionSigner(aliceEOA), + args: { + plugin, + caller: caller.addr.toString(), + admin: false, + delegationType: 3, + escrow: '', + lastValid: MAX_UINT64, + cooldown: 0, + methods: [], + useRounds: false, + useExecutionKey: false, + defaultToEscrow: false + } + }) + ).transactions[0]; + + const optInGroup = ( + await (optInPluginClient + .createTransaction + .optInToAsset({ + sender: caller.addr, + signer: makeBasicAccountTransactionSigner(caller), + args: { + wallet: abstractedAccountClient.appId, + rekeyBack: true, + assets: [asset], + mbrPayment + }, + extraFee: (1_000).microAlgos() + })) + ).transactions; + + let error = 'no error'; + try { + await abstractedAccountClient + .newGroup() + .arc58RekeyToPlugin({ + sender: caller.addr, + signer: makeBasicAccountTransactionSigner(caller), + args: { + plugin, + global: true, + escrow, + methodOffsets: [], + fundsRequest: [] + }, + extraFee: (1000).microAlgos() + }) + // Add the mbr payment + .addTransaction(optInGroup[0], makeBasicAccountTransactionSigner(caller)) // mbrPayment + // Add the opt-in plugin call + .addTransaction(optInGroup[1], makeBasicAccountTransactionSigner(caller)) // optInToAsset + .addTransaction(erroneousAppCall, makeBasicAccountTransactionSigner(aliceEOA)) // erroneous app call + .arc58VerifyAuthAddress({ + sender: caller.addr, + signer: makeBasicAccountTransactionSigner(caller), + args: {} + }) + .send(); + } catch (e: any) { + error = e.message; + } + + expect(error).toContain(ERR_CANNOT_CALL_OTHER_APPS_DURING_REKEY); + }); + + test('malformed methodOffsets', async () => { + const { algorand } = fixture; + + const dispenser = await algorand.account.dispenserFromEnvironment(); + + let accountInfo = await algorand.account.getInformation(abstractedAccountClient.appAddress) + expect(accountInfo.balance.microAlgos).toEqual(accountInfo.minBalance.microAlgos) + + const mbr = (await abstractedAccountClient.send.mbr({ + args: { + methodCount: 1, + plugin: '', + escrow: '', + groups: 0n + } + })).return + + if (mbr === undefined) { + throw new Error('MBR is undefined'); + } + + console.log(`Funding arc58 account with amount: ${mbr.plugins}`) + + await algorand.account.ensureFunded(abstractedAccountClient.appAddress, dispenser, mbr.plugins.microAlgo()) + + await abstractedAccountClient.send.arc58AddPlugin({ + sender: aliceEOA.addr, + signer: makeBasicAccountTransactionSigner(aliceEOA), + args: { + plugin, + caller: ZERO_ADDRESS, + admin: false, + delegationType: 0, + escrow: '', + lastValid: MAX_UINT64, + cooldown: 0, + methods: [ + [new Uint8Array(Buffer.from('dddd')), 0] + ], + useRounds: false, + useExecutionKey: false, + defaultToEscrow: false + } + }); + + let error = 'no error'; + try { + await callOptinPlugin(caller, abstractedAccountClient.appAddress.toString(), suggestedParams, optInPluginClient, asset, []); + } catch (e: any) { + error = e.message; + } + + expect(error).toContain(ERR_MALFORMED_OFFSETS); + }); + + test('allowance - flat', async () => { + const { algorand } = fixture; + escrow = 'pay_plugin'; + + const dispenser = await algorand.account.dispenserFromEnvironment(); + + let accountInfo = await algorand.account.getInformation(abstractedAccountClient.appAddress) + expect(accountInfo.balance.microAlgos).toEqual(accountInfo.minBalance.microAlgos) + + const mbr = (await abstractedAccountClient.send.mbr({ + args: { + methodCount: 0, + plugin: '', + escrow: '', + groups: 0n + } + })).return + + if (mbr === undefined) { + throw new Error('MBR is undefined'); + } + + console.log(`Funding arc58 account with amount: ${mbr.plugins}`) + await algorand.account.ensureFunded(abstractedAccountClient.appAddress, dispenser, mbr.plugins.microAlgo()) + + const randomAccount = algorand.account.random().account; + + await algorand.account.ensureFunded( + randomAccount.addr, + dispenser, + (100).algos(), + ); + + const mbrPayment = algosdk.makePaymentTxnWithSuggestedParamsFromObject({ + sender: aliceEOA.addr, + receiver: abstractedAccountClient.appAddress, + amount: 100_000, + suggestedParams, + }); + + await abstractedAccountClient.send + .arc58AddPlugin({ + sender: aliceEOA.addr, + signer: makeBasicAccountTransactionSigner(aliceEOA), + args: { + plugin, + caller: ZERO_ADDRESS, + admin: false, + delegationType: 3, + escrow: '', + lastValid: MAX_UINT64, + cooldown: 1, + methods: [], + useRounds: false, + useExecutionKey: false, + defaultToEscrow: false + } + }) + + accountInfo = await algorand.account.getInformation(abstractedAccountClient.appAddress) + expect(accountInfo.balance.microAlgos).toEqual(accountInfo.minBalance.microAlgos) + + const savedEscrow = escrow; + escrow = ''; // Plugin was added without escrow, so we need to call it without escrow + await callOptinPlugin(caller, abstractedAccountClient.appAddress.toString(), suggestedParams, optInPluginClient, asset, [], true); + escrow = savedEscrow; // Restore escrow for later use + + const escrowCreationCost = BigInt(150_000 + 100_000) // NewCostForARC58 + Global.minBalance + + // Recalculate MBR with the escrow name for the second plugin + const mbrWithEscrow = (await abstractedAccountClient.send.mbr({ + args: { + methodCount: 0, + plugin: '', + escrow, + groups: 0n + } + })).return + + if (mbrWithEscrow === undefined) { + throw new Error('MBR is undefined'); + } + + const amount = mbrWithEscrow.plugins + mbrWithEscrow.allowances + mbrWithEscrow.escrows + escrowCreationCost + + console.log(`Funding arc58 account with amount: ${amount}`) + await algorand.account.ensureFunded(abstractedAccountClient.appAddress, dispenser, amount.microAlgo()) + + await abstractedAccountClient.newGroup() + .addTransaction( + algosdk.makeAssetTransferTxnWithSuggestedParamsFromObject({ + sender: randomAccount.addr, + receiver: randomAccount.addr, + amount: 0, + assetIndex: asset, + suggestedParams + }), + makeBasicAccountTransactionSigner(randomAccount) + ) + .addTransaction( + algosdk.makeAssetTransferTxnWithSuggestedParamsFromObject({ + sender: aliceEOA.addr, + receiver: abstractedAccountClient.appAddress, + amount: 100_000_000, + assetIndex: asset, + suggestedParams + }), + makeBasicAccountTransactionSigner(aliceEOA) + ) + .arc58AddPlugin({ + sender: aliceEOA.addr, + signer: makeBasicAccountTransactionSigner(aliceEOA), + args: { + plugin: payPlugin, + caller: ZERO_ADDRESS, + admin: false, + delegationType: 3, + escrow, + lastValid: MAX_UINT64, + cooldown: 1, + methods: [], + useRounds: false, + useExecutionKey: false, + defaultToEscrow: false + } + }) + .arc58AddAllowances({ + sender: aliceEOA.addr, + signer: makeBasicAccountTransactionSigner(aliceEOA), + args: { + escrow, + allowances: [[ + asset, + 1, // type + 10_000_000, // allowed + 0, // max + 300, // interval + false, // useRounds + ]] + }, + }) + .arc58PluginOptinEscrow({ + sender: aliceEOA.addr, + signer: makeBasicAccountTransactionSigner(aliceEOA), + args: { + plugin: payPlugin, + caller: ZERO_ADDRESS, + escrow, + assets: [asset], + mbrPayment, + }, + extraFee: (8000).microAlgos(), + }) + .send() + + accountInfo = await algorand.account.getInformation(abstractedAccountClient.appAddress) + expect(accountInfo.balance.microAlgos).toEqual(accountInfo.minBalance.microAlgos) + + // use the full amount + await callPayPlugin(caller, payPluginClient, randomAccount.addr.toString(), asset, 6_000_000n, [], true); + + let allowanceBox = await abstractedAccountClient.state.box.allowances.value({ escrow, asset }); + + expect(allowanceBox?.spent).toBe(6_000_000n); // type 2 is window + + await callPayPlugin(caller, payPluginClient, randomAccount.addr.toString(), asset, 2_000_000n, [], true); + + allowanceBox = await abstractedAccountClient.state.box.allowances.value({ escrow, asset }); + + expect(allowanceBox?.spent).toBe(8_000_000n); // type 2 is window + + // try to use more + let error = 'no error'; + try { + await callPayPlugin(caller, payPluginClient, randomAccount.addr.toString(), asset, 8_000_000n, [], true) + } catch (e: any) { + error = e.message; + } + + expect(error).toContain(ERR_ALLOWANCE_EXCEEDED); + }) + + test('allowance - window', async () => { + const { algorand } = fixture; + escrow = 'pay_plugin_window' + + const dispenser = await algorand.account.dispenserFromEnvironment(); + + let accountInfo = await algorand.account.getInformation(abstractedAccountClient.appAddress) + expect(accountInfo.balance.microAlgos).toEqual(accountInfo.minBalance.microAlgos) + + const mbr = (await abstractedAccountClient.send.mbr({ + args: { + methodCount: 0, + plugin: '', + escrow: '', + groups: 0n + } + })).return + + if (mbr === undefined) { + throw new Error('MBR is undefined'); + } + + console.log(`Funding arc58 account with amount: ${mbr.plugins}`) + await algorand.account.ensureFunded(abstractedAccountClient.appAddress, dispenser, mbr.plugins.microAlgo()) + + const randomAccount = algorand.account.random().account; + + await algorand.account.ensureFunded( + randomAccount.addr, + dispenser, + (100).algos(), + ); + + const mbrPayment = algosdk.makePaymentTxnWithSuggestedParamsFromObject({ + sender: aliceEOA.addr, + receiver: abstractedAccountClient.appAddress, + amount: 100_000, + suggestedParams, + }); + + await abstractedAccountClient.send + .arc58AddPlugin({ + sender: aliceEOA.addr, + signer: makeBasicAccountTransactionSigner(aliceEOA), + args: { + plugin, + caller: ZERO_ADDRESS, + admin: false, + delegationType: 3, + escrow: '', + lastValid: MAX_UINT64, + cooldown: 1, + methods: [], + useRounds: false, + useExecutionKey: false, + defaultToEscrow: false + } + }) + + accountInfo = await algorand.account.getInformation(abstractedAccountClient.appAddress) + expect(accountInfo.balance.microAlgos).toEqual(accountInfo.minBalance.microAlgos) + + const savedEscrow = escrow; + escrow = ''; // Plugin was added without escrow, so we need to call it without escrow + await callOptinPlugin(caller, abstractedAccountClient.appAddress.toString(), suggestedParams, optInPluginClient, asset, [], true); + escrow = savedEscrow; // Restore escrow for later use + + const escrowCreationCost = BigInt(150_000 + 100_000) // NewCostForARC58 + Global.minBalance + + // Recalculate MBR with the escrow name for the second plugin + const mbrWithEscrow = (await abstractedAccountClient.send.mbr({ + args: { + methodCount: 0, + plugin: '', + escrow, + groups: 0n + } + })).return + + if (mbrWithEscrow === undefined) { + throw new Error('MBR is undefined'); + } + + const amount = mbrWithEscrow.plugins + mbrWithEscrow.allowances + mbrWithEscrow.escrows + escrowCreationCost + console.log(`Funding arc58 account with amount: ${amount}`) + await algorand.account.ensureFunded(abstractedAccountClient.appAddress, dispenser, amount.microAlgo()) + + await abstractedAccountClient.newGroup() + .addTransaction(algosdk.makeAssetTransferTxnWithSuggestedParamsFromObject({ + sender: randomAccount.addr, + receiver: randomAccount.addr, + amount: 0, + assetIndex: asset, + suggestedParams + }), makeBasicAccountTransactionSigner(randomAccount)) + .addTransaction(algosdk.makeAssetTransferTxnWithSuggestedParamsFromObject({ + sender: aliceEOA.addr, + receiver: abstractedAccountClient.appAddress, + amount: 100_000_000, + assetIndex: asset, + suggestedParams + }), makeBasicAccountTransactionSigner(aliceEOA)) + .arc58AddPlugin({ + sender: aliceEOA.addr, + signer: makeBasicAccountTransactionSigner(aliceEOA), + args: { + plugin: payPlugin, + caller: ZERO_ADDRESS, + admin: false, + delegationType: 3, + escrow, + lastValid: MAX_UINT64, + cooldown: 1, + methods: [], + useRounds: false, + useExecutionKey: false, + defaultToEscrow: false + } + }) + .arc58AddAllowances({ + sender: aliceEOA.addr, + signer: makeBasicAccountTransactionSigner(aliceEOA), + args: { + escrow, + allowances: [ + [ + asset, + 2, // type + 10_000_000, // allowed + 0, // max + 300, // interval + false, // useRounds + ] + ] + }, + }) + .arc58PluginOptinEscrow({ + sender: aliceEOA.addr, + signer: makeBasicAccountTransactionSigner(aliceEOA), + args: { + plugin: payPlugin, + caller: ZERO_ADDRESS, + escrow, + assets: [asset], + mbrPayment, + }, + extraFee: (8000).microAlgos(), + }) + .send() + + accountInfo = await algorand.account.getInformation(abstractedAccountClient.appAddress) + expect(accountInfo.balance.microAlgos).toEqual(accountInfo.minBalance.microAlgos) + + // use the full amount + await callPayPlugin(caller, payPluginClient, randomAccount.addr.toString(), asset, 10_000_000n, [], true); + + let allowanceBox = await abstractedAccountClient.state.box.allowances.value({ escrow, asset }); + + expect(allowanceBox?.spent).toBe(10_000_000n); // type 2 is window + + let globalPluginBox = await abstractedAccountClient.state.box.plugins.value({ plugin: payPlugin, caller: ZERO_ADDRESS, escrow }); + + const spendingAddress = algosdk.getApplicationAddress(globalPluginBox?.escrow ?? 0n); + + const spendingAddressInfo = await algorand.account.getInformation(spendingAddress.toString()) + + expect(spendingAddressInfo.authAddr?.toString()).toBe(abstractedAccountClient.appAddress.toString()); + + // try to use more + let error = 'no error'; + try { + await callPayPlugin(caller, payPluginClient, randomAccount.addr.toString(), asset, 1n, [], true) + } catch (e: any) { + error = e.message; + } + + expect(error).toContain(ERR_ALLOWANCE_EXCEEDED); + + // wait for the next window + for (let i = 0; i < 3; i++) { + await callPayPlugin(caller, payPluginClient, randomAccount.addr.toString(), asset, 0n, [], true) + } + + // use more + await callPayPlugin(caller, payPluginClient, randomAccount.addr.toString(), asset, 1_000_000n, [], true); + + allowanceBox = await abstractedAccountClient.state.box.allowances.value({ escrow, asset }); + + expect(allowanceBox?.spent).toBe(1_000_000n); // type 2 is window + + await callPayPlugin(caller, payPluginClient, randomAccount.addr.toString(), asset, 8_000_000n, [], true); + + // try to use more + error = 'no error'; + try { + await callPayPlugin(caller, payPluginClient, randomAccount.addr.toString(), asset, 2_000_000n, [], true) + } catch (e: any) { + error = e.message; + } + + expect(error).toContain(ERR_ALLOWANCE_EXCEEDED); + }) + + test('allowance - drip', async () => { + const { algorand } = fixture; + escrow = 'pay_plugin_drip'; + + const dispenser = await algorand.account.dispenserFromEnvironment(); + + let accountInfo = await algorand.account.getInformation(abstractedAccountClient.appAddress) + expect(accountInfo.balance.microAlgos).toEqual(accountInfo.minBalance.microAlgos) + + let mbr = (await abstractedAccountClient.send.mbr({ + args: { + methodCount: 0, + plugin: '', + escrow: '', + groups: 0n + } + })).return + + if (mbr === undefined) { + throw new Error('MBR is undefined'); + } + + console.log(`Funding arc58 account with amount: ${mbr.plugins}`) + await algorand.account.ensureFunded(abstractedAccountClient.appAddress, dispenser, mbr.plugins.microAlgo()); + + const randomAccount = algorand.account.random().account; + + await algorand.account.ensureFunded( + randomAccount.addr, + dispenser, + (100).algos(), + ); + + const mbrPayment = algosdk.makePaymentTxnWithSuggestedParamsFromObject({ + sender: aliceEOA.addr, + receiver: abstractedAccountClient.appAddress, + amount: 100_000, + suggestedParams, + }); + + await abstractedAccountClient.send + .arc58AddPlugin({ + sender: aliceEOA.addr, + signer: makeBasicAccountTransactionSigner(aliceEOA), + args: { + plugin, + caller: ZERO_ADDRESS, + admin: false, + delegationType: 3, + escrow: '', + lastValid: MAX_UINT64, + cooldown: 1, + methods: [], + useRounds: false, + useExecutionKey: false, + defaultToEscrow: false + } + }) + + accountInfo = await algorand.account.getInformation(abstractedAccountClient.appAddress) + expect(accountInfo.balance.microAlgos).toEqual(accountInfo.minBalance.microAlgos) + + const savedEscrow = escrow; + escrow = ''; // Plugin was added without escrow, so we need to call it without escrow + await callOptinPlugin(caller, abstractedAccountClient.appAddress.toString(), suggestedParams, optInPluginClient, asset, [], true); + escrow = savedEscrow; // Restore escrow for later use + + const escrowCreationCost = BigInt(150_000 + 100_000) // Global.minBalance + mbr = (await abstractedAccountClient.send.mbr({ + args: { + methodCount: 0, + plugin: '', + escrow, + groups: 0n + } + })).return + + if (mbr === undefined) { + throw new Error('MBR is undefined'); + } + + const amount = mbr.plugins + mbr.allowances + mbr.escrows + escrowCreationCost; + console.log(`Funding arc58 account with amount: ${amount}`) + await algorand.account.ensureFunded(abstractedAccountClient.appAddress, dispenser, amount.microAlgo()); + + await abstractedAccountClient.newGroup() + .addTransaction(algosdk.makeAssetTransferTxnWithSuggestedParamsFromObject({ + sender: randomAccount.addr, + receiver: randomAccount.addr, + amount: 0, + assetIndex: asset, + suggestedParams + }), makeBasicAccountTransactionSigner(randomAccount)) + .addTransaction(algosdk.makeAssetTransferTxnWithSuggestedParamsFromObject({ + sender: aliceEOA.addr, + receiver: abstractedAccountClient.appAddress, + amount: 100_000_000, + assetIndex: asset, + suggestedParams + }), makeBasicAccountTransactionSigner(aliceEOA)) + .arc58AddPlugin({ + sender: aliceEOA.addr, + signer: makeBasicAccountTransactionSigner(aliceEOA), + args: { + plugin: payPlugin, + caller: ZERO_ADDRESS, + admin: false, + delegationType: 3, + escrow, + lastValid: MAX_UINT64, + cooldown: 1, + methods: [], + useRounds: true, + useExecutionKey: false, + defaultToEscrow: false + } + }) + .arc58AddAllowances({ + sender: aliceEOA.addr, + signer: makeBasicAccountTransactionSigner(aliceEOA), + args: { + escrow, + allowances: [ + [ + asset, + 3, // type + 1_000_000, // amount + 50_000_000, // max + 1, // interval + true, // useRounds + ] + ] + }, + }) + .arc58PluginOptinEscrow({ + sender: aliceEOA.addr, + signer: makeBasicAccountTransactionSigner(aliceEOA), + args: { + plugin: payPlugin, + caller: ZERO_ADDRESS, + escrow, + assets: [asset], + mbrPayment + }, + extraFee: (8000).microAlgos(), + }) + .send() + + // use the full amount + await callPayPlugin(caller, payPluginClient, randomAccount.addr.toString(), asset, 1_000_000n, [], true); + + let allowanceBox = await abstractedAccountClient.state.box.allowances.value({ escrow, asset }); + + expect(allowanceBox?.spent).toBe(49_000_000n); + + await callPayPlugin(caller, payPluginClient, randomAccount.addr.toString(), asset, 48_000_000n, [], true) + + // try to use more + let error = 'no error'; + try { + await callPayPlugin(caller, payPluginClient, randomAccount.addr.toString(), asset, 5_000_000n, [], true) + } catch (e: any) { + error = e.message; + } + + expect(error).toContain(ERR_ALLOWANCE_EXCEEDED); + + // wait for the next window + for (let i = 0; i < 3; i++) { + await callPayPlugin(caller, payPluginClient, randomAccount.addr.toString(), asset, 0n, [], true) + } + + await callPayPlugin(caller, payPluginClient, randomAccount.addr.toString(), asset, 0n, [], true); + + allowanceBox = await abstractedAccountClient.state.box.allowances.value({ escrow, asset }); + + expect(allowanceBox?.spent).toBe(6_000_000n); + }) +}); diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/abstracted_account/rekeying.test.ts b/assets/arc-0058/projects/arc-0058/smart_contracts/abstracted_account/rekeying.test.ts new file mode 100644 index 000000000..bbd493a1a --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/abstracted_account/rekeying.test.ts @@ -0,0 +1,87 @@ +import { describe, test, beforeAll, beforeEach, expect } from '@jest/globals'; +import { algorandFixture } from '@algorandfoundation/algokit-utils/testing'; +import algosdk, { makeBasicAccountTransactionSigner } from 'algosdk'; +import { microAlgos } from '@algorandfoundation/algokit-utils'; +import { EscrowFactoryFactory } from '../artifacts/escrow/EscrowFactoryClient'; +import { AbstractedAccountClient, AbstractedAccountFactory } from '../artifacts/abstracted_account/AbstractedAccountClient'; + + +const ZERO_ADDRESS = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY5HFKQ'; +const fixture = algorandFixture(); + +describe('Rekeying Test', () => { + // let algod: Algodv2; + /** Alice's externally owned account (ie. a keypair account she has in Defly) */ + let aliceEOA: algosdk.Account; + /** The address of Alice's new abstracted account. Sends app calls from aliceEOA unless otherwise specified */ + let aliceAbstractedAccount: string; + /** The client for Alice's abstracted account */ + let abstractedAccountClient: AbstractedAccountClient; + /** The suggested params for transactions */ + let suggestedParams: algosdk.SuggestedParams; + + beforeEach(fixture.beforeEach); + + beforeAll(async () => { + await fixture.beforeEach(); + const { algorand, algod } = fixture.context; + suggestedParams = await algorand.getSuggestedParams(); + aliceEOA = await fixture.context.generateAccount({ initialFunds: microAlgos(100_000_000) }); + + await algod.setBlockOffsetTimestamp(60).do(); + + const escrowFactory = new EscrowFactoryFactory({ + defaultSender: aliceEOA.addr, + defaultSigner: makeBasicAccountTransactionSigner(aliceEOA), + algorand + }) + + const escrowFactoryResults = await escrowFactory.send.create.bare() + + await escrowFactoryResults.appClient.appClient.fundAppAccount({ amount: (100_000).microAlgos() }); + + const minter = new AbstractedAccountFactory({ + defaultSender: aliceEOA.addr, + defaultSigner: makeBasicAccountTransactionSigner(aliceEOA), + algorand, + }); + const results = await minter.send.create.createApplication({ + args: { + admin: aliceEOA.addr.toString(), + controlledAddress: ZERO_ADDRESS, + escrowFactory: escrowFactoryResults.appClient.appId, + }, + }); + + abstractedAccountClient = results.appClient; + aliceAbstractedAccount = abstractedAccountClient.appAddress.toString(); + + // Fund the abstracted account with some ALGO to later spend + await abstractedAccountClient.appClient.fundAppAccount({ amount: (4).algos() }); + }); + + test('Alice does not rekey back to the app', async () => { + await expect( + abstractedAccountClient + .newGroup() + // Step one: rekey abstracted account to Alice + .arc58RekeyTo({ + sender: aliceEOA.addr, + extraFee: (1000).microAlgos(), + args: { + address: aliceEOA.addr.toString(), + flash: true, + } + }) + // Step two: make payment from abstracted account + .addTransaction(algosdk.makePaymentTxnWithSuggestedParamsFromObject({ + sender: aliceAbstractedAccount, + receiver: aliceAbstractedAccount, + amount: 0, + suggestedParams: { ...suggestedParams, fee: 1000, flatFee: true }, + }), + // signer: makeBasicAccountTransactionSigner(aliceEOA), + ).send() + ).rejects.toThrowError(); + }); +}); diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/abstracted_account/types.ts b/assets/arc-0058/projects/arc-0058/smart_contracts/abstracted_account/types.ts new file mode 100644 index 000000000..46b9623ee --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/abstracted_account/types.ts @@ -0,0 +1,150 @@ +import { Account, bytes, uint64 } from "@algorandfoundation/algorand-typescript"; +import { Uint8 } from "@algorandfoundation/algorand-typescript/arc4"; + +// 33 bytes for key +// 16 bytes for first & last valid +// 4 bytes for offset + length of groups +export const ExecutionGroupMaxInASingleCall: uint64 = 62 // 4 bytes for selector + 16 bytes for first & last valid + 32 bytes for lease key +// app calls required to fill: 16.5 +// if we force a 'start' of the add Execution method we could avoid providing the lease key more than once +export const ExecutionGroupSubsequentMaxInASingleCall: uint64 = 63 +// app calls required to fill w/ lease key only provided once: 1007 + +export const ExecutionGroupMaxLength: uint64 = 1023 +// 32,768 + +export type ExecutionInfo = { + /** the group id of the execution */ + groups: bytes<32>[]; + /** the first round or timestamp the execution is allowed */ + firstValid: uint64; + /** the last round or timestamp the execution is allowed */ + lastValid: uint64; +} + +export type EscrowInfo = { + /** the app id of the escrow account */ + id: uint64; + /** whether the escrow is locked, eg plugins & allowance changes are allowed */ + locked: boolean; +} + +export type AllowanceKey = { + /** the id of the escrow account to apply the allowance to */ + escrow: string; + /** the asset id the allowance pertains to */ + asset: uint64; +} + +export type SpendAllowanceType = Uint8 + +export const SpendAllowanceTypeFlat: SpendAllowanceType = new Uint8(1) +export const SpendAllowanceTypeWindow: SpendAllowanceType = new Uint8(2) +export const SpendAllowanceTypeDrip: SpendAllowanceType = new Uint8(3) + +export type AllowanceInfo = { + /** the type of allowance to use */ + type: SpendAllowanceType + /** the maximum size of the bucket if using drip */ + max: uint64 + /** the amount of the asset the plugin is allowed to access or per window */ + amount: uint64 + /** the amount spent during the current or last interacted window */ + spent: uint64 + /** the rate the allowance should be expanded */ + interval: uint64 + /** the amount leftover when the bucket was last accessed */ + last: uint64 + /** the timestamp or round the allowance was added */ + start: uint64 + /** whether to use round number or unix timestamp when evaluating this allowance */ + useRounds: boolean +} + +export type AddAllowanceInfo = { + asset: uint64; + type: SpendAllowanceType; + amount: uint64; + max: uint64; + interval: uint64; + useRounds: boolean; +} + +export type FundsRequest = { + asset: uint64; + amount: uint64; +} + +export type PluginKey = { + /** the app id of the plugin */ + plugin: uint64; + /** the allowed caller of the plugin */ + caller: Account; + /** the escrow to be used during the */ + escrow: string; +} + +export const DelegationTypeOther = new Uint8(0) +export const DelegationTypeSelf = new Uint8(1) +export const DelegationTypeAgent = new Uint8(2) + +export type PluginInfo = { + escrow: uint64; + delegationType: Uint8; + lastValid: uint64; + cooldown: uint64; + methods: MethodInfo[]; + admin: boolean; + useRounds: boolean; + useExecutionKey: boolean; + lastCalled: uint64; + start: uint64; +} + +export type MethodRestriction = { + selector: bytes<4>; + cooldown: uint64; +} + +export type MethodInfo = { + selector: bytes<4>; + cooldown: uint64; + lastCalled: uint64; +} + +export type PluginValidation = { + exists: boolean; + expired: boolean; + onCooldown: boolean; + hasMethodRestrictions: boolean; +} + +export type MethodValidation = { + methodAllowed: boolean; + methodOnCooldown: boolean; +} + +export type FullPluginValidation = { + exists: boolean + expired: boolean + onCooldown: boolean + hasMethodRestrictions: boolean + methodAllowed: boolean + methodOnCooldown: boolean +} + +export type EscrowReclaim = { + asset: uint64; + amount: uint64; + closeOut: boolean; +} + +export type AbstractAccountBoxMBRData = { + plugins: uint64; + namedPlugins: uint64; + escrows: uint64; + allowances: uint64; + executions: uint64; + escrowExists: boolean; + newEscrowMintCost: uint64 +} \ No newline at end of file diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/abstracted_account/utils.ts b/assets/arc-0058/projects/arc-0058/smart_contracts/abstracted_account/utils.ts new file mode 100644 index 000000000..eb691aa96 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/abstracted_account/utils.ts @@ -0,0 +1,45 @@ +import { Uint8 } from "@algorandfoundation/algorand-typescript/arc4"; +import { AllowanceInfo, EscrowInfo, ExecutionInfo, PluginInfo } from "./types"; + +export function emptyPluginInfo(): PluginInfo { + return { + escrow: 0, + delegationType: new Uint8(0), + lastValid: 0, + cooldown: 0, + methods: [], + admin: false, + useRounds: false, + useExecutionKey: false, + lastCalled: 0, + start: 0, + }; +} + +export function emptyEscrowInfo(): EscrowInfo { + return { + id: 0, + locked: false + }; +} + +export function emptyAllowanceInfo(): AllowanceInfo { + return { + type: new Uint8(0), + max: 0, + amount: 0, + spent: 0, + interval: 0, + last: 0, + start: 0, + useRounds: false + }; +} + +export function emptyExecutionInfo(): ExecutionInfo { + return { + groups: [], + firstValid: 0, + lastValid: 0 + }; +} \ No newline at end of file diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/abstracted_account/AbstractedAccount.approval.puya.map b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/abstracted_account/AbstractedAccount.approval.puya.map new file mode 100644 index 000000000..b2d727a80 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/abstracted_account/AbstractedAccount.approval.puya.map @@ -0,0 +1,86463 @@ +{ + "version": 3, + "sources": [ + "../../abstracted_account/contract.algo.ts", + "../../abstracted_account/utils.ts" + ], + "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6Be;;AAAoC;AAAjD;AAjBF;;AAAA;AAAA;AAAA;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;;;;;;AAAA;;;AAAA;;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4YG;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGG;;AAAA;AAAA;;;AACG;;AAAA;;AAAA;AADH;;;;AADF;AAKO;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAP;AAhZM;AAkZN;AAAA;AAC4D;;AAA7B;AAAA;;;AAAkD;;AAjZ/D;AAiZlB;AAAA;AA3Yc;;AA4Yd;;AAAA;AA1YgB;;AA2Ya;;AAA7B;AAjZoB;AAwBa;;AAAjC;AAtBW;;AA0Ba;;AAAxB;AAyWD;AAAA;;;;;;;;;;AAsBD;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AACoB;AAAd;AACW;AAAX;AAAJ;;;AA5YQ;;AAAA;;AAAA;AA6YC;AAAA;AAAA;;AAAP;AACM;AAAA;AAAA;AAAA;AAAA;;AAGR;AAIgB;AAlaF;;AAkaE;AAAA;AAAA;AAAA;;AAAA;AACF;;;;;;;AAFV;;;AAAA;;;AAHJ;AAOI;;AAAA;AAPJ;;;;;;;;;;;;AAAA;;;;AAAA;;;AAAA;AAPF;AAAA;AAwBA;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AACS;;AAAe;AAxbhB;AAwbgB;AAAA;AAAf;AAAP;AAxbM;AAybN;AAAA;AArboB;AAwBa;;AAAjC;AAtBW;;AA0Ba;;AAAxB;AAuZF;AAAA;AAeA;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AACoB;AA3bJ;;AA2bI;AAAA;AACS;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;;;AAET;AAAX;AAAP;AACO;;AAAe;;AAAA;;AAAA;AAAf;AAAP;AAEE;AA3cgB;AA2chB;AAAA;AAAA;;AAAA;AAA6C;AAAA;;AAAA;AAA7C;AADF;AA3bQ;;AAAA;AAAA;AAAA;AAicN;AAAA;;AAAA;;;AAA4B;AAAA;;AAAA;AAAA;AAAA;AAAA;AAA5B;;;;AADF;AAjdM;AAsdN;;AAAA;AACI;AAAA;AAAA;AAAA;AAA2C;;AAA3C;AAAJ;;;AAndoB;AAwBa;;AAAjC;AAtBW;;AA0Ba;;AAAxB;AAsaF;AAAA;;;;;AA6BqB;AAneb;AAmea;AAAA;AAFpB;;AAAA;AAAA;AAAA;AAAA;AAAA;AASQ;AAheS;;AAgeT;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AA7G0B;AA3Xf;AA2Xe;AAAA;AAA/B;AAAA;;;AACG;AA5Xa;AA4Xb;AAAA;AAAiC;;AAAjC;AADH;;;AAEE;;AA2GG;;AAAA;AAAP;AAhegB;;AAiea;;AAA7B;AACgD;;AAAX;AAAV;AAAA;AAAA;AAAA;;;;;;AAAA;AAheb;;AAged;AAAA;AA9dW;;AA+da;AAAxB;AAJF;AAAA;AA1G2B;;;;;;;AAuH3B;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACS;;AAAe;AAvfhB;AAufgB;AAAA;AAAf;AAAP;AAEA;AAEY;AAzfM;AAyfN;AAAA;AAGF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AALV;;;AAAA;;;AAAA;AASA;;;AAlXiB;AAAb;;AACkB;;AAAiB;AAAjB;AAAA;;AAAqB;;AAAI;;AAAJ;AAA3C;;;AAGM;;AAAA;;;AAAJ;;;AACe;AAAb;;AAKJ;AAAA;AAtJoB;AAwBa;;AAAjC;AA0dF;AAAA;AArWmE;;AAAK;AAAL;AAAA;;;;;AA+XlE;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAQC;;;AACE;;AAA+B;;AAA/B;;AAAA;;AAAA;;;;AAEK;;AAAA;;AAAA;;AAAA;;AAAA;;;AAXR;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAuBD;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAoDA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAxkBe;;AAAA;;AAAA;AA+kBX;AAAA;AAAA;AAAA;AADF;;AAAA;;;AAAA;;AANF;AAAA;;;;;;AA6BA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaS;;AAAe;AAroBhB;AAqoBgB;AAAA;AAAf;AAAP;AAGuB;;AAAnB;AAAA;;;AACA;;AAAkB;;AAAlB;AADA;;;;AADF;AADF;AASI;;AAAA;;;AACA;;AAAkB;;AAAlB;AADA;;;;AADF;AADF;AASA;AAAA;;;;;;;AAKuB;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAES;AAAA;AAAA;;AAAA;;AAAA;;AACX;AAAZ;;AAAe;;AAAA;;AAAA;AAAxB;;;AACqB;;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;AAAA;;;AAAF;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAjB;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;;AAAA;;AAD+C;AAAL;AAAA;;;;;AAI3B;;AAAA;;;AAAY;;;;AAEzB;AAlqBc;AAkqBd;AAAA;AAAiC;;AAAjC;AAAJ;;;AACE;AAEY;AArqBI;AAqqBJ;AAAA;AACE;;AACyB;;AAAA;AAAA;AAA3B;;AAAA;AAAA;;;;;;;;;AAJZ;;;AAAA;;;AAAA;AASe;;AAAA;;;AAES;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AA/pBlB;;AAAA;;AAAA;AA+pBR;AAAA;;AAAA;AAAA;AA5qBoB;AAwBa;;AAAjC;AAtBW;;AA0Ba;;AAAxB;AAwlBF;AAAA;AA0C8C;;;;;;;AAXnC;;AAAW;AAAX;AAAP;AACY;AAAZ;;;;;;;;;;;;;AA+CJ;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AACS;;AAAe;AAxsBhB;AAwsBgB;AAAA;AAAf;AAAP;AAEuB;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAzrBf;;AAAA;AAAA;AA0rBD;AAAA;AAAA;;AAAP;AAE8B;AAAA;;AAAA;AAAA;AAAA;AAAA;AAE9B;;AAEI;AA/sBc;AA+sBd;AAAA;AAAiC;;AAAjC;AAAJ;;;AACE;AAEc;AAltBE;AAktBF;AAAA;AACF;;AAAA;;AAAA;;;;;;;AAHZ;;;AAAA;;;AAAA;AA9sBkB;AAwBa;;AAAjC;AAtBW;;AA0Ba;;AAAxB;AAuqBF;AAAA;;;;;;AAsCA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAcS;;AAAe;AA3vBhB;AA2vBgB;AAAA;AAAf;AAAP;AAxuBa;;AAAA;;AAAA;AAAA;AAAA;;AAyuBL;AAAA;;AAAD;AAAP;AAGuB;;AAAnB;AAAA;;;AACA;;AAAkB;;AAAlB;AADA;;;;AADF;AADF;AASI;;AAAA;;;AACA;;AAAkB;;AAAlB;AADA;;;;AADF;AADF;AASA;;AAAA;;;;;;;AAKuB;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AACvB;;AAAA;AAAA;;AAAA;AAAA;AAEgC;AAAA;AAAA;;AAAA;;AAAA;;AACX;AAAZ;;AAAe;;AAAA;;AAAA;AAAxB;;;AACqB;;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;AAAA;;;AAAF;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAjB;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;;AAAA;;AAD+C;AAAL;AAAA;;;;;AAIxC;AAxxBc;AAwxBd;AAAA;AAAiC;;AAAjC;AAAJ;;;AACE;AAEY;AA3xBI;AA2xBJ;AAAA;AACE;;AACyB;;AAAA;AAAA;AAA3B;;AAAA;AAAA;;;AArvB+B;;AAAA;AAAjB;;AAAA;AAArB;;AAAA;AAqvBO;;;;;;;AAJZ;;;AAAA;;;AAAA;AASe;;AAAA;;;AAAA;;AAEA;;AAAA;;;AAAY;;AAEH;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAvxBlB;;AAAA;;AAAA;AAuxBR;AAAA;;AAAA;AAAA;AApyBoB;AAwBa;;AAAjC;AAtBW;;AA0Ba;;AAAxB;AA6sBF;AAAA;AAyD8C;;;;;AAxBnC;;AAAW;AAAX;AAAP;AACY;AAAZ;;;;;;;;;;;;;AA+CJ;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AACS;;AAAe;AA/zBhB;AA+zBgB;AAAA;AAAf;AAAP;AA5yBa;;AAAA;AAAA;AA6yBN;AAAA;AAAA;;AAAP;AACkB;AAAA;AAAA;AAAA;AAAA;;AAhzBV;;AAAA;AAAA;AAizBD;AAAA;AAAA;;AAAP;AAE8B;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAE9B;AAAA;;AACA;;AAEI;AAv0Bc;AAu0Bd;AAAA;AAAiC;;AAAjC;AAAJ;;;AACE;AAEc;AA10BE;AA00BF;AAAA;AAlyB6B;;AAAA;AAAjB;;AAAA;AAArB;;AAAA;AAmyBoD;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAhB;;AAAA;;;AAA7B;;;;;AAHZ;;;AAAA;;;AAAA;AAt0BkB;AAwBa;;AAAjC;AAtBW;;AA0Ba;;AAAxB;AA8xBF;AAAA;AA6BA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AACS;;AAAe;AA51BhB;AA41BgB;AAAA;AAAf;AAAP;AAv0BQ;;AAAA;;AAAA;AAw0BA;AAAA;;AAAD;AAAP;AACO;AAAW;AAAX;AAAP;AACO;;;AAJT;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AACS;;AAAe;AAx2BhB;AAw2BgB;AAAA;AAAf;AAAP;AAn1BQ;;AAAA;AAAA;AAo1BD;AAAA;AAAA;;AAAP;AAEqC;AAAA;AAAA;AAAA;;AAAA;AAAD;AAApC;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAv2BoB;AAwBa;;AAAjC;AAtBW;;AA0Ba;;AAAxB;AAg1BO;AAAA;AATT;;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;AAkBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;AACS;;AAAe;AA13BhB;AA03BgB;AAAA;AAAf;AAAP;AAr2BQ;;AAAA;AAAA;AAs2BD;AAAA;AAAA;;AAAP;AAC2B;AAAA;AAAA;AAAA;AAAZ;;AAAA;AAEM;AAAG;AAAA;;AAAA;AAAxB;;;AACM;;AAAA;;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAJ;;;AAGc;AAh4BE;AAg4BF;AAAA;AAAA;;AAAA;AACF;AAAA;AAAA;AAAA;;AAHJ;AAAA;;AAMF;;;AAAA;AAAJ;;;AAC8B;AAr4BhB;AAq4BgB;AAAA;AAAA;AAAA;;;;AAG9B;AAAA;;AAAA;;;;;;;;;;;;;;;;;;;AAVY;;;AAAA;;;AAUZ;AAZyC;AAAK;AAAL;AAAA;;;;;AAgBxB;AA54BH;AA44BG;AAAA;AAAA;;AAAA;AACF;AAAA;AAAA;AAAA;;AAHT;AAAA;;AAOF;;;AAAA;AAAJ;;;AAC2B;AAl5Bb;AAk5Ba;AAAA;AAAA;AAAA;;;;AAG3B;AAAA;;AAAA;;;;;;;;;;;;;;;;;;;;;;;AAXa;;;;AAAA;;;AAWb;;;;AA9BN;AAAA;AAyCA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AACS;;AAAe;AAn6BhB;AAm6BgB;AAAA;AAAf;AAAP;AA94BQ;;AAAA;;AAAA;AA+4BD;AAAA;AAAA;;AAAP;AACiB;AAAA;AAAA;AAAA;AAAA;AACK;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AACd;;AAAA;AAAD;AAAP;AAEA;AAEY;AAz6BM;AAy6BN;AAAA;AAEA;;AAAA;;AAAA;;;;;;;AAJZ;;;AAAA;;;AAAA;AAQqB;AAAG;AAAA;;AAAA;AAAxB;;;AAEqC;;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAjB;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AA55BT;;AAAA;AAAA;AA45BP;AAAA;;AADF;AAKA;;;AAIiB;;;;;;;;;;AAJjB;;;;AAAA;;;AAAA;AAN8C;AAAL;AAAA;;;;;AAf7C;AAAA;;;AAwCA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAOyB;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAh8Bf;;AAAA;AAAA;AAk8BD;AAAA;;AAAP;AA97BQ;;AAAA;AAAA;AA+7BD;AAAA;AAAA;;AAAP;AACQ;AAAA;AAAA;AAAA;;AAAA;AAAD;AAAP;AAEiB;AAAA;AAAA;AAGf;;AAAe;AAAA;;AAAA;AAAf;AAAA;;;AACA;;AAAA;;AAAA;AADA;;;AAEA;;AAAkB;;AAAlB;AAFA;;;;AADF;AAOsB;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAEtB;;AAAA;AAAA;;AAGc;AAn+BI;AAm+BJ;AAAA;AAHd;AAAA;;AAAA;AAAA;;AAAA;;AAIY;;AAAA;;AAAA;AAAA;;AAAA;AAJZ;AAAA;AAAA;AASA;AAIY;;AAAA;;;;;;;AAJZ;;;AAAA;;;AAAA;AAQqB;AAAZ;;AAAe;;AAAA;;AAAA;AAAxB;;;AAEqC;;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAjB;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AA99BT;;AAAA;AAAA;AA89BP;AAAA;;AADF;AAKA;;;AAIiB;;;;;;;;;;AAJjB;;;;AAAA;;;AAAA;AAN8C;AAAL;AAAA;;;;;AAzC7C;AAAA;;;;;;;;;;AAgEA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACS;;AAAe;AA3gChB;AA2gCgB;AAAA;AAAf;AAAP;AAt/BQ;;AAAA;AAAA;AAu/BD;AAAA;AAAA;;AAAP;AACQ;AAAA;AAAA;;AAAA;AAAD;AAAP;AAEI;AA7gCc;AA6gCd;AAAA;AAAiC;;AAAjC;AAAJ;;;AACE;AAEY;AAhhCI;AAghCJ;AAAA;AACE;;AAj+B2B;;AAAA;AAAjB;;AAAA;AAAnB;;AAAA;AAk+BO;;AAAA;;;;;;;AAJZ;;;AAAA;;;AAAA;AASmB;AAAZ;;AAAe;;AAAA;;AAAA;AAAxB;;;AAC4D;;AAAA;;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;;;AAAA;;AAAA;;AAAA;;;AAAA;;AAAA;;AAAA;;;AAAA;;AAAA;;AAAA;;;AAAA;;AAAA;AAAA;;;AAAA;AAAA;AAAA;;AAAA;;AAChC;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AApgCjB;;AAAA;AAAA;AAAA;AAAA;;AAqgCD;AAAA;;AAAD;AAAP;AACc;;;AAAY;;AAEG;;AAAA;;AAAA;AAAA;;AAAA;AAEpB;AAFoB;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAA7B;;AAAA;AAAA;AAN6C;;AAAK;AAAL;AAAA;;;;;AAIJ;;;;;AAzhCvB;AAwBa;;AAAjC;AAtBW;;AA0Ba;;AAAxB;AA0+BF;AAAA;;AA2CA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACS;;AAAe;AAtjChB;AAsjCgB;AAAA;AAAf;AAAP;AAjiCQ;;AAAA;AAAA;AAkiCD;AAAA;AAAA;;AAAP;AACQ;AAAA;AAAA;;AAAA;AAAD;AAAP;AAEI;AAxjCc;AAwjCd;AAAA;AAAiC;;AAAjC;AAAJ;;;AACE;AAEc;AA3jCE;AA2jCF;AAAA;AA3gC2B;;AAAA;AAAjB;;AAAA;AAAnB;;AAAA;AA4gCO;;AAAA;;;;;AAHZ;;;AAAA;;;AAAA;AAQmB;AAAZ;;AAAe;;AAAA;;AAAA;AAAxB;;;AAGW;;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAFiB;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AA7iCjB;;AAAA;AAAA;AAijCF;AAAA;AAAA;;AAAP;AACA;;AAN8C;AAAL;AAAA;;;;;AA/jCvB;AAwBa;;AAAjC;AAtBW;;AA0Ba;;AAAxB;AAqhCF;AAAA;AA2BA;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACS;;AAAe;AAjlChB;AAilCgB;AAAA;AAAf;AAAP;AAxjCW;;AAAA;AAAA;AAAA;AAAA;;AAyjCN;AAAA;;AAAD;;;AAC6B;;AAAA;AAAA;;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAA/B;;AAAA;AAAA;;AAAA;AAAA;AA/kCkB;AAwBa;;AAAjC;AAtBW;;AA0Ba;;AAAxB;AAgjCF;AAAA;AASW;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AACO;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAP;AAEgD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAV;;AAAA;;;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;;AAAtC;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;;;AAOJ;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AA1kCa;;AAAA;AAAA;AAAA;AA2kCJ;AAAA;;AAAP;AACO;;AAAe;AArmChB;AAqmCgB;AAAA;AAAf;AAAA;;;AAAmC;AAAA;;AAAA;AAAA;AAAA;AAAyC;;AAAzC;AAAnC;;;;AAAP;AAEA;AAAA;;AAnmCoB;AAwBa;;AAAjC;AAtBW;;AA0Ba;;AAAxB;AAmkCF;AAAA;;;;;;;AAUC;;;AAE6B;;AACP;AAAO;;AAAA;AAAA;AAAA;AAAA;;AAAJ;;AAAA;AAAxB;;;AACmB;;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAhmCX;;AAAA;AAAA;AAAA;AAAA;;AAgmCF;AAAA;;AAAJ;;;AACe;;AAAA;AAAA;AAAb;;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;;;AAAA;;AACA;;;AAEF;;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;;;AAAA;;;;;AARH;;AAAA;;AAAA;AAAA;AAAA;AAAA;;;;AAaA;;;AAE6B;;AACP;AAAO;;AAAA;AAAA;AAAJ;;AAAA;AAAA;AAAA;;AAAxB;;;AACwB;;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AA3mCX;;AAAA;AAAA;AAAA;AAAA;;AA2mCP;AAAA;;AAAJ;;;AACwB;;AAAA;AAAA;AA9mClB;;AAAA;AAAA;AAAA;AAAA;;AA+mCA;AAAA;;AAAJ;;;AACe;;AAAA;AAAA;AAAb;;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;;;AAAA;;AAJoC;AAAK;AAAL;AAAA;;;;;AAOtC;;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;;;AAAA;;AACA;;;AAEF;;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;;;AAAA;;;;;AAbH;;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAkBA;;;AAE4B;;AACN;AAAO;;AAAA;AAAA;AAAJ;;AAAA;AAAA;AAAA;;AAAxB;;;AACmB;;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AA3nCX;;AAAA;AAAA;AAAA;AAAA;;AA2nCF;AAAA;;AAAJ;;;AACc;;AAAA;AAAA;AAAZ;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;;AAAA;;AAFwC;AAAK;AAAL;AAAA;;;;;AAK1C;;AAAA;AChpCG;;;;;;;;;;;ADgpCH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;;AAAA;;;;;AARH;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAaA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAE+B;;AACT;AAAG;AAAA;;AAAA;AAAxB;;;AAC6C;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAjB;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAtoCjB;;AAAA;AAAA;AAAA;AAAA;;AAuoCL;AAAA;;AAAJ;;;AACc;;AAAA;AAAA;AAAZ;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;;AAAA;;AAHuC;AAAK;AAAL;AAAA;;;;;AAMzC;;AAAA;ACvpCG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ADupCH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;;AAAA;;;;;AATH;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAcA;;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAE+B;;AACT;AAAG;AAAA;;AAAA;AAAxB;;;AACsB;;AAAA;;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAlpCX;;AAAA;AAAA;AAAA;AAAA;;AAkpCL;AAAA;;AAAJ;;;AACc;;AAAA;AAAA;AAAZ;;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;;;AAAA;;AAFuC;AAAK;AAAL;AAAA;;;;;AAKzC;;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;AARH;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAaA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAtoC0C;;AAAA;AAAjB;;AAAA;AAAjB;;;AAAA;;AAAA;AAgpCI;;AAAA;;AAAA;;;AAppCkC;;AAAA;AAAjB;;AAAA;AAArB;;AAAA;AAQA;;AAAA;;AAAA;AAIoB;;AAAA;;;AAAA;AAApB;;;;AAAA;AAjCC;;AAAA;;AAAA;AA8qCQ;AAAA;;AAAA;AAGZ;;AADA;;;;AAAA;AAAA;;AAAA;AARG;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AATR;;AAAA;AAAA;AAAA;AAAA;AAAA;AAjpCD;;;AAEuB;;AAAA;;AAAA;AAA6C;;AAAA;AAA9C;AAAlB;;AAAA;AADK;;;;AAAA;AAAP;AAqBF;;;;AACM;;AAAW;AAAX;AAAJ;;;AACS;AAAP;AAAA;AAtCM;;AAAA;;AAAA;AAAA;AAAA;;AAyCD;AAAA;;AAAA;;;AACH;;AAAA;AAAA;AAAA;AAAA;AADJ;AAAA;AAEI;;AAAA;;;;;;AAGN;;;AACM;AAlEc;AAkEd;AAAA;AAAiC;;AAAjC;AAAJ;;;AACE;AAEY;AArEI;AAqEJ;AAAA;AACE;;AA1ByB;;AAAA;AAAjB;;AAAA;AAAjB;;;AAAA;;;;;;;AAuBL;;;AAAA;;;AAAA;AASS;AAKG;AAjFI;AAiFJ;AAAA;AACA;;;;AAAkB;;AAAlB;AACE;AA7EF;;AA6EE;AAAA;AAAA;AAAA;;AAAA;;;;;;;;;;AAHZ;;;AAAA;;;AAJO;AAAA;;;;;;;;;;;;AAAA;;;;AAAA;;;AAAA;AAAA;;;AAAA;AAAA;;;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYkB;AAAA;AAAA;;AAAA;AArErB;;AAAA;;AAAA;AAqER;AAAA;AAEA;AAGF;;;;;;AACyB;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AA/Ef;;AAAA;AAAA;AAAA;AAiFH;AAAA;;AAAD;;;AACK;AAAP;;AAAA;AAGoE;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAEtE;;;AACS;AAAP;;AAAA;AAGkB;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AACC;AAAZ;;AAAmB;;AAAA;;AAAA;AAAA;AAAA;AAAJ;;AAAA;AAAxB;;;AACM;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;;AAAA;;AAAA;AAAJ;;;AACkB;AAAhB;;AAKa;;AAAA;;;AAAY;;;;AAG3B;;AAAA;;AAAA;AAAA;;;AACC;;AAAA;;AAAA;AAAD;;AAAA;AADA;;;;AAAA;;AAAA;AADF;;AAAA;;;;;AAF4C;;;;;;;AAPA;;AAAK;AAAL;AAAA;;;;;AAgB9C;;;AAGI;;AAAA;;AAAe;AA9HC;AA8HD;AAAA;AAAf;AAAA;;;AACA;;AAAA;;AAAgB;;AAAhB;AADA;;;AAGO;AAAP;AAIA;;AAAA;;AAAa;;AAAb;AAAA;;;AACG;;AAAA;;AAAc;;AAAd;AADH;;;AAEG;;AAAA;;AAAmB;AAAnB;AAFH;;;AAGG;;AAAA;;AAHH;;;AAIG;;AAAY;AAAZ;;AAAmB;;AAAnB;AAJH;;;;AADF;;AAAA;AAuBF;;;;;;AA5IU;;AAAA;;AAAA;AAAA;AA8IO;AAAA;AAAA;;AAAA;AACX;;;AACK;;;AAAP;;AAAA;;AAAA;;AAAA;AAQ8D;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAC/C;;;AAAY;;AAIlB;AAAA;;AAAA;AACI;AAAA;;AAAA;AAAD;;AAAA;AACW;;AAAA;;AAAA;AAAA;AAAA;AAAiB;AAAjB;AAJlB;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAP;;AAAA;;AAAA;;AAAA;AAF4C;;;;;AA6X9C;;;;;;;;;AAQiB;;AAAA;;;AAAS;;AACD;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AA/hBf;;AAAA;;AAAA;AAAA;AAAA;;AAiiBD;AAAA;;AAAP;AAtiBc;;AAuiBd;AAAA;AAEI;;AAAW;AAAX;AAAJ;;;AAhiBQ;;AAAA;;AAAA;AAiiBC;AAAA;AAAA;;AAAP;AACiB;AAAA;AAAA;AAAA;AAEY;AAAA;;AAAA;AA/iBf;;AA+iBd;AAAA;AA7QoB;;AAAA;AAAA;;AAAA;AAED;AAAZ;;AAAmB;;AAAA;AAAA;AAAJ;;AAAA;AAAxB;;;AAIW;;AAAA;;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAF0B;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAzR1B;;AAAA;AAAA;AAAA;AAAA;;AAsTJ;AAAA;AAAA;;AAAP;AACuE;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;;;AAAA;AAAA;AAAA;;AACvD;;;AAAY;;;;AAExB;;AAAS;;AAAT;AAAJ;;;AAC2B;;AAAA;;AAAA;AACN;;AAAA;AAAA;AAAZ;AAAA;;AAAA;AAAP;AACA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAyBF;;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAtDE;;AAAA;;;AACE;AAEY;AAxTE;AAwTF;AAAA;AAEK;;AAAA;AAAA;;;;;;;;;;;;;AAJjB;;;;AAAA;;;AAAA;AAV8C;;AAAK;AAAL;AAAA;;;;;AAmB9C;AAEY;AAjUE;AAiUF;AAAA;AAEA;;AAAA;AAAA;;;;;;;;;AAJZ;;;AAAA;;;AAAA;;;;AAoBO;;AAAS;;;AAAT;AAAJ;;;AA4BP;;AAAA;;;AACS;;AAAiB;AAAA;;AAAA;AAAD;;AAAA;AAAhB;AA1BH;;AAAA;AAAJ;;;AACmB;;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAV;;AAAA;AAAP;AACA;;AAAA;;AAAA;;AAAA;;;;AAGyB;;AAAA;;AAAA;AACN;;AAAA;AAAA;AAAZ;AAAA;;AAAA;AAAP;AACA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;AAqBG;;AAA2B;AAAA;;AAAA;AAAD;;AAAA;AAA1B;AA9BsB;;;AAWlB;;AAAS;;;AAAT;AAAJ;;;AACY;;AAAA;;;AAAY;;;;AACN;;AAAA;;AAAA;AAIW;;AAAA;AAAD;;AAAA;AAAT;;AAAA;AACE;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAEN;;AAAA;AAAA;AAAb;AAAA;AAAP;AACoC;AAApC;AAAA;;AAAA;;AAAA;;AAAA;;;;AAT4C;;;;;;;AAnBH;;;;;;;AAnJJ;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAEnC;;;AAAqB;;AAAe;AA9LlC;AA8LkC;AAAA;AAAf;AAAF;;;AArKZ;;AAsKc;;AAtKd;AAsKF;AAAA;;AAAP;AAtKS;;AAuKc;;AAvKd;AAuKF;AAAA;AAAA;AAAA;AAA+C;;AAA/C;AAAP;AAvKS;;AAwKc;;AAxKd;AAwKF;;AAAA;AAAA;AAAA;AAA8C;;AAA9C;AAAP;AAxKS;;AA0KsB;;AA1KtB;AAAA;;AA4KQ;AAAb;;AACiB;AAAZ;;AAAmB;;AAAA;;AAAA;AAAA;AAAA;AAAJ;;AAAA;AAAxB;;;AACM;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAc;;AAAd;AAAJ;;;AACe;AAAb;;AAFuC;;AAAK;AAAL;AAAA;;;;;AAM3C;;AAAA;AAnLS;;AAoLO;;AApLP;AAoLT;;AAGmB;;AAAA;;;AAAA;;AAEd;AAAA;AAAA;AAAP;AACQ;AAAA;AAAA;AAAD;AAAP;AACQ;AAAA;AAAD;AAAP;AAEiB;;AAAA;;;AACb;;;;AAGa;AAAb;;AACsB;AAAtB;;AAEkB;;AAAiB;AAAjB;AAAA;;;;;;AAAqB;;AAAI;;AAAJ;AAA3C;;;AAGM;;AAAA;;;AAAJ;;;AACe;AAAb;;AA8BJ;;AAAA;AAkUA;AAEY;AAzjBI;;AAyjBJ;AAAA;AAEC;;AAAA;;AAAA;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AALV;;;AAAA;;;AAAA;AAnjBW;;AA6jBa;;AAAxB;AA1jBQ;;AAAA;;AAAA;AA4jBJ;AAAA;AAAA;AAA2C;;AAA3C;AAAJ;;;AAzkBoB;AAwBa;;AAAjC;;;;;;;;;;AAyMM;;AAAA;;AAAa;;AAAb;AAAJ;;;;;AAR+D;;AAAK;AAAL;AAAA;;;;;;;AAYxD;;AAAA;AAAA;;AAAiB;;AAAA;AAAA;;AAAA;AAAA;AAAjB;AAAP;AACO;AAAA;;AAAA;AAAP;AAGO;AAAA;;AAAiB;AAAjB;AAAP;AACoC;AAAZ;;AAAL;AAA0B;;AAAtC;AAAP;AAEuD;;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAEhD;;AAAA;AAAP;AACO;AAAA;AAAP;AAEA;;;AACuB;;AAAA;AAAA;AAAd;;AAAA;AAAA;;AAAA;AAAP;AACuE;;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAqBhE;;AAAY;AAAZ;;AAAA;AAAA;;AAAJ;AAAwB;;AAAxB;AAAP;AA3PQ;;AAAA;;AAAA;AAAA;AAAA;;AA8Pc;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AACqB;;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAI1B;;;AAAY;;AACH;;AAAA;AAAD;;AAAA;AAAA;;AAErB;;AAAA;;AAAA;AAAA;;;AAA6B;;AAAA;;;AAAgB;;AAAA;;;AAE/C;;AAAA;;;AACqB;;AAAA;;;AAAY;;AAC/B;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAGK;;;AAAA;AAAA;;AAAA;AAvCuC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACrC;;;AAAiB;;AAAA;;;;AAAxB;AAvOI;;AAAA;;AAAA;AAAA;;AAAA;AA0ON;;AAAA;AAAA;;AAAA;AAAA;AACA;;AAAe;AAAf;AAAA;;;;;;;;;AA8BgD;;;;;AAU3C;;;AA7CyC;;;AA6BJ;;;;;AA5DxC;;;;;;;AAoW2B;AA1jBb;AA0jBa;AAAA;AAljBf;;AAkjBd;AAAA;;;;AAb2C;;", + "op_pc_offset": 0, + "pc_events": { + "1": { + "subroutine": "@algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram", + "params": {}, + "block": "main", + "stack_in": [], + "op": "intcblock 0 1 2 8 400 21700 27700" + }, + "15": { + "op": "bytecblock \"controlled_address\" \"\" \"admin\" \"last_user_interaction\" \"p\" \"e\" \"last_change\" 0x151f7c75 \"x\" 0x00 0x0000 \"spending_address\" 0x002a 0x000a \"a\" 0x01 \"n\" \"rekey_index\" \"escrow_factory\" \"current_plugin\" 0x0002 0x000200000000000000000000000000000000000000000000000000002c00000000000000000000000000000000000000 0x6cc3f606 0x002c" + }, + "224": { + "op": "txn ApplicationID", + "defined_out": [ + "reinterpret_bool%0#0" + ], + "stack_out": [ + "reinterpret_bool%0#0" + ] + }, + "226": { + "op": "bnz main_after_if_else@2", + "stack_out": [] + }, + "229": { + "op": "bytec 17 // \"rekey_index\"", + "defined_out": [ + "\"rekey_index\"" + ], + "stack_out": [ + "\"rekey_index\"" + ] + }, + "231": { + "op": "intc_0 // 0", + "defined_out": [ + "\"rekey_index\"", + "0" + ], + "stack_out": [ + "\"rekey_index\"", + "0" + ] + }, + "232": { + "op": "app_global_put", + "stack_out": [] + }, + "233": { + "block": "main_after_if_else@2", + "stack_in": [], + "op": "txn OnCompletion", + "defined_out": [ + "tmp%0#1" + ], + "stack_out": [ + "tmp%0#1" + ] + }, + "235": { + "op": "!", + "defined_out": [ + "tmp%1#0" + ], + "stack_out": [ + "tmp%1#0" + ] + }, + "236": { + "error": "OnCompletion must be NoOp", + "op": "assert // OnCompletion must be NoOp", + "stack_out": [] + }, + "237": { + "op": "txn ApplicationID", + "defined_out": [ + "tmp%2#0" + ], + "stack_out": [ + "tmp%2#0" + ] + }, + "239": { + "op": "bz main_create_NoOp@34", + "stack_out": [] + }, + "242": { + "op": "pushbytess 0xbd6099e5 0xd24b7556 0x147b6cd6 0x13bc44e4 // method \"register(string)void\", method \"arc58_changeAdmin(address)void\", method \"arc58_pluginChangeAdmin(address)void\", method \"arc58_getAdmin()address\"", + "defined_out": [ + "Method(arc58_changeAdmin(address)void)", + "Method(arc58_getAdmin()address)", + "Method(arc58_pluginChangeAdmin(address)void)", + "Method(register(string)void)" + ], + "stack_out": [ + "Method(register(string)void)", + "Method(arc58_changeAdmin(address)void)", + "Method(arc58_pluginChangeAdmin(address)void)", + "Method(arc58_getAdmin()address)" + ] + }, + "264": { + "op": "bytec 22 // method \"arc58_verifyAuthAddress()void\"", + "defined_out": [ + "Method(arc58_changeAdmin(address)void)", + "Method(arc58_getAdmin()address)", + "Method(arc58_pluginChangeAdmin(address)void)", + "Method(arc58_verifyAuthAddress()void)", + "Method(register(string)void)" + ], + "stack_out": [ + "Method(register(string)void)", + "Method(arc58_changeAdmin(address)void)", + "Method(arc58_pluginChangeAdmin(address)void)", + "Method(arc58_getAdmin()address)", + "Method(arc58_verifyAuthAddress()void)" + ] + }, + "266": { + "op": "pushbytess 0xc95a5d3d 0x4727af21 0x582ff382 0xdefd5cd2 0xb3c80df9 0xeef448fd 0x38f591ea 0xe350b9d4 0x0a8cb2c2 0x25b713ca 0xebaf14a0 0x1fda3b4f 0x9d3f8918 0xbf4d7c57 0xd5dd382b 0x5cebed43 0xd58685af 0x7c37156e 0xaffaa4e8 0xa2403ddf 0x02fe4515 0x41bdc680 0x50f3e35c // method \"arc58_rekeyTo(address,bool)void\", method \"arc58_canCall(uint64,bool,address,string,byte[4])bool\", method \"arc58_rekeyToPlugin(uint64,bool,string,uint64[],(uint64,uint64)[])void\", method \"arc58_rekeyToNamedPlugin(string,bool,string,uint64[],(uint64,uint64)[])void\", method \"arc58_addPlugin(uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void\", method \"arc58_removePlugin(uint64,address,string)void\", method \"arc58_addNamedPlugin(string,uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void\", method \"arc58_removeNamedPlugin(string)void\", method \"arc58_newEscrow(string)uint64\", method \"arc58_toggleEscrowLock(string)(uint64,bool)\", method \"arc58_reclaim(string,(uint64,uint64,bool)[])void\", method \"arc58_optinEscrow(string,uint64[])void\", method \"arc58_pluginOptinEscrow(uint64,address,string,uint64[],pay)void\", method \"arc58_addAllowances(string,(uint64,uint8,uint64,uint64,uint64,bool)[])void\", method \"arc58_removeAllowances(string,uint64[])void\", method \"arc58_addExecutionKey(byte[32],byte[32][],uint64,uint64)void\", method \"arc58_removeExecutionKey(byte[32])void\", method \"arc58_getPlugins((uint64,address,string)[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]\", method \"arc58_getNamedPlugins(string[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]\", method \"arc58_getEscrows(string[])(uint64,bool)[]\", method \"arc58_getAllowances(string,uint64[])(uint8,uint64,uint64,uint64,uint64,uint64,uint64,bool)[]\", method \"arc58_getExecutions(byte[32][])(byte[32][],uint64,uint64)[]\", method \"mbr(string,uint64,string,uint64)(uint64,uint64,uint64,uint64,uint64,bool,uint64)\"", + "defined_out": [ + "Method(arc58_addAllowances(string,(uint64,uint8,uint64,uint64,uint64,bool)[])void)", + "Method(arc58_addExecutionKey(byte[32],byte[32][],uint64,uint64)void)", + "Method(arc58_addNamedPlugin(string,uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void)", + "Method(arc58_addPlugin(uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void)", + "Method(arc58_canCall(uint64,bool,address,string,byte[4])bool)", + "Method(arc58_changeAdmin(address)void)", + "Method(arc58_getAdmin()address)", + "Method(arc58_getAllowances(string,uint64[])(uint8,uint64,uint64,uint64,uint64,uint64,uint64,bool)[])", + "Method(arc58_getEscrows(string[])(uint64,bool)[])", + "Method(arc58_getExecutions(byte[32][])(byte[32][],uint64,uint64)[])", + "Method(arc58_getNamedPlugins(string[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[])", + "Method(arc58_getPlugins((uint64,address,string)[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[])", + "Method(arc58_newEscrow(string)uint64)", + "Method(arc58_optinEscrow(string,uint64[])void)", + "Method(arc58_pluginChangeAdmin(address)void)", + "Method(arc58_pluginOptinEscrow(uint64,address,string,uint64[],pay)void)", + "Method(arc58_reclaim(string,(uint64,uint64,bool)[])void)", + "Method(arc58_rekeyTo(address,bool)void)", + "Method(arc58_rekeyToNamedPlugin(string,bool,string,uint64[],(uint64,uint64)[])void)", + "Method(arc58_rekeyToPlugin(uint64,bool,string,uint64[],(uint64,uint64)[])void)", + "Method(arc58_removeAllowances(string,uint64[])void)", + "Method(arc58_removeExecutionKey(byte[32])void)", + "Method(arc58_removeNamedPlugin(string)void)", + "Method(arc58_removePlugin(uint64,address,string)void)", + "Method(arc58_toggleEscrowLock(string)(uint64,bool))", + "Method(arc58_verifyAuthAddress()void)", + "Method(mbr(string,uint64,string,uint64)(uint64,uint64,uint64,uint64,uint64,bool,uint64))", + "Method(register(string)void)" + ], + "stack_out": [ + "Method(register(string)void)", + "Method(arc58_changeAdmin(address)void)", + "Method(arc58_pluginChangeAdmin(address)void)", + "Method(arc58_getAdmin()address)", + "Method(arc58_verifyAuthAddress()void)", + "Method(arc58_rekeyTo(address,bool)void)", + "Method(arc58_canCall(uint64,bool,address,string,byte[4])bool)", + "Method(arc58_rekeyToPlugin(uint64,bool,string,uint64[],(uint64,uint64)[])void)", + "Method(arc58_rekeyToNamedPlugin(string,bool,string,uint64[],(uint64,uint64)[])void)", + "Method(arc58_addPlugin(uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void)", + "Method(arc58_removePlugin(uint64,address,string)void)", + "Method(arc58_addNamedPlugin(string,uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void)", + "Method(arc58_removeNamedPlugin(string)void)", + "Method(arc58_newEscrow(string)uint64)", + "Method(arc58_toggleEscrowLock(string)(uint64,bool))", + "Method(arc58_reclaim(string,(uint64,uint64,bool)[])void)", + "Method(arc58_optinEscrow(string,uint64[])void)", + "Method(arc58_pluginOptinEscrow(uint64,address,string,uint64[],pay)void)", + "Method(arc58_addAllowances(string,(uint64,uint8,uint64,uint64,uint64,bool)[])void)", + "Method(arc58_removeAllowances(string,uint64[])void)", + "Method(arc58_addExecutionKey(byte[32],byte[32][],uint64,uint64)void)", + "Method(arc58_removeExecutionKey(byte[32])void)", + "Method(arc58_getPlugins((uint64,address,string)[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[])", + "Method(arc58_getNamedPlugins(string[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[])", + "Method(arc58_getEscrows(string[])(uint64,bool)[])", + "Method(arc58_getAllowances(string,uint64[])(uint8,uint64,uint64,uint64,uint64,uint64,uint64,bool)[])", + "Method(arc58_getExecutions(byte[32][])(byte[32][],uint64,uint64)[])", + "Method(mbr(string,uint64,string,uint64)(uint64,uint64,uint64,uint64,uint64,bool,uint64))" + ] + }, + "383": { + "op": "txna ApplicationArgs 0", + "defined_out": [ + "Method(arc58_addAllowances(string,(uint64,uint8,uint64,uint64,uint64,bool)[])void)", + "Method(arc58_addExecutionKey(byte[32],byte[32][],uint64,uint64)void)", + "Method(arc58_addNamedPlugin(string,uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void)", + "Method(arc58_addPlugin(uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void)", + "Method(arc58_canCall(uint64,bool,address,string,byte[4])bool)", + "Method(arc58_changeAdmin(address)void)", + "Method(arc58_getAdmin()address)", + "Method(arc58_getAllowances(string,uint64[])(uint8,uint64,uint64,uint64,uint64,uint64,uint64,bool)[])", + "Method(arc58_getEscrows(string[])(uint64,bool)[])", + "Method(arc58_getExecutions(byte[32][])(byte[32][],uint64,uint64)[])", + "Method(arc58_getNamedPlugins(string[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[])", + "Method(arc58_getPlugins((uint64,address,string)[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[])", + "Method(arc58_newEscrow(string)uint64)", + "Method(arc58_optinEscrow(string,uint64[])void)", + "Method(arc58_pluginChangeAdmin(address)void)", + "Method(arc58_pluginOptinEscrow(uint64,address,string,uint64[],pay)void)", + "Method(arc58_reclaim(string,(uint64,uint64,bool)[])void)", + "Method(arc58_rekeyTo(address,bool)void)", + "Method(arc58_rekeyToNamedPlugin(string,bool,string,uint64[],(uint64,uint64)[])void)", + "Method(arc58_rekeyToPlugin(uint64,bool,string,uint64[],(uint64,uint64)[])void)", + "Method(arc58_removeAllowances(string,uint64[])void)", + "Method(arc58_removeExecutionKey(byte[32])void)", + "Method(arc58_removeNamedPlugin(string)void)", + "Method(arc58_removePlugin(uint64,address,string)void)", + "Method(arc58_toggleEscrowLock(string)(uint64,bool))", + "Method(arc58_verifyAuthAddress()void)", + "Method(mbr(string,uint64,string,uint64)(uint64,uint64,uint64,uint64,uint64,bool,uint64))", + "Method(register(string)void)", + "tmp%4#0" + ], + "stack_out": [ + "Method(register(string)void)", + "Method(arc58_changeAdmin(address)void)", + "Method(arc58_pluginChangeAdmin(address)void)", + "Method(arc58_getAdmin()address)", + "Method(arc58_verifyAuthAddress()void)", + "Method(arc58_rekeyTo(address,bool)void)", + "Method(arc58_canCall(uint64,bool,address,string,byte[4])bool)", + "Method(arc58_rekeyToPlugin(uint64,bool,string,uint64[],(uint64,uint64)[])void)", + "Method(arc58_rekeyToNamedPlugin(string,bool,string,uint64[],(uint64,uint64)[])void)", + "Method(arc58_addPlugin(uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void)", + "Method(arc58_removePlugin(uint64,address,string)void)", + "Method(arc58_addNamedPlugin(string,uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void)", + "Method(arc58_removeNamedPlugin(string)void)", + "Method(arc58_newEscrow(string)uint64)", + "Method(arc58_toggleEscrowLock(string)(uint64,bool))", + "Method(arc58_reclaim(string,(uint64,uint64,bool)[])void)", + "Method(arc58_optinEscrow(string,uint64[])void)", + "Method(arc58_pluginOptinEscrow(uint64,address,string,uint64[],pay)void)", + "Method(arc58_addAllowances(string,(uint64,uint8,uint64,uint64,uint64,bool)[])void)", + "Method(arc58_removeAllowances(string,uint64[])void)", + "Method(arc58_addExecutionKey(byte[32],byte[32][],uint64,uint64)void)", + "Method(arc58_removeExecutionKey(byte[32])void)", + "Method(arc58_getPlugins((uint64,address,string)[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[])", + "Method(arc58_getNamedPlugins(string[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[])", + "Method(arc58_getEscrows(string[])(uint64,bool)[])", + "Method(arc58_getAllowances(string,uint64[])(uint8,uint64,uint64,uint64,uint64,uint64,uint64,bool)[])", + "Method(arc58_getExecutions(byte[32][])(byte[32][],uint64,uint64)[])", + "Method(mbr(string,uint64,string,uint64)(uint64,uint64,uint64,uint64,uint64,bool,uint64))", + "tmp%4#0" + ] + }, + "386": { + "op": "match register arc58_changeAdmin arc58_pluginChangeAdmin arc58_getAdmin arc58_verifyAuthAddress arc58_rekeyTo arc58_canCall arc58_rekeyToPlugin arc58_rekeyToNamedPlugin arc58_addPlugin arc58_removePlugin arc58_addNamedPlugin arc58_removeNamedPlugin arc58_newEscrow arc58_toggleEscrowLock arc58_reclaim arc58_optinEscrow arc58_pluginOptinEscrow arc58_addAllowances arc58_removeAllowances arc58_addExecutionKey arc58_removeExecutionKey arc58_getPlugins arc58_getNamedPlugins arc58_getEscrows arc58_getAllowances arc58_getExecutions mbr", + "stack_out": [] + }, + "444": { + "op": "err" + }, + "445": { + "block": "main_create_NoOp@34", + "stack_in": [], + "op": "pushbytes 0xe18362e2 // method \"createApplication(address,address,uint64)void\"", + "defined_out": [ + "Method(createApplication(address,address,uint64)void)" + ], + "stack_out": [ + "Method(createApplication(address,address,uint64)void)" + ] + }, + "451": { + "op": "txna ApplicationArgs 0", + "defined_out": [ + "Method(createApplication(address,address,uint64)void)", + "tmp%5#0" + ], + "stack_out": [ + "Method(createApplication(address,address,uint64)void)", + "tmp%5#0" + ] + }, + "454": { + "op": "match createApplication", + "stack_out": [] + }, + "458": { + "op": "err" + }, + "459": { + "subroutine": "_puya_lib.arc4.dynamic_array_concat_dynamic_element", + "params": { + "array_items_count#0": "uint64", + "array_head_and_tail#0": "bytes", + "new_items_count#0": "uint64", + "new_head_and_tail#0": "bytes" + }, + "block": "dynamic_array_concat_dynamic_element", + "stack_in": [], + "op": "proto 4 1" + }, + "462": { + "op": "bytec_1 // \"\"", + "stack_out": [ + "head_and_tail_length#0" + ] + }, + "463": { + "op": "dup" + }, + "464": { + "op": "frame_dig -2" + }, + "466": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "new_head#0", + "new_items_count#0 (copy)" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "new_items_count#0 (copy)", + "2" + ] + }, + "467": { + "op": "*", + "defined_out": [ + "item_offset_adjustment#0", + "new_head#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0" + ] + }, + "468": { + "op": "frame_dig -4", + "defined_out": [ + "array_items_count#0 (copy)", + "item_offset_adjustment#0", + "new_head#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "array_items_count#0 (copy)" + ] + }, + "470": { + "op": "intc_2 // 2", + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "array_items_count#0 (copy)", + "2" + ] + }, + "471": { + "op": "*", + "defined_out": [ + "item_offset_adjustment#0", + "new_head#0", + "tmp%1#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0" + ] + }, + "472": { + "op": "intc_0 // 0", + "defined_out": [ + "head_offset#0", + "item_offset_adjustment#0", + "new_head#0", + "tmp%1#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0" + ] + }, + "473": { + "block": "dynamic_array_concat_dynamic_element_for_header@1", + "stack_in": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0" + ], + "op": "frame_dig 4", + "defined_out": [ + "head_offset#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "head_offset#0" + ] + }, + "475": { + "op": "frame_dig 3", + "defined_out": [ + "head_offset#0", + "tmp%1#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "head_offset#0", + "tmp%1#0" + ] + }, + "477": { + "op": "<", + "defined_out": [ + "continue_looping%0#0", + "head_offset#0", + "tmp%1#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "continue_looping%0#0" + ] + }, + "478": { + "op": "bz dynamic_array_concat_dynamic_element_after_for@4", + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0" + ] + }, + "481": { + "op": "frame_dig -3", + "defined_out": [ + "array_head_and_tail#0 (copy)", + "head_offset#0", + "tmp%1#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "array_head_and_tail#0 (copy)" + ] + }, + "483": { + "op": "frame_dig 4", + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "array_head_and_tail#0 (copy)", + "head_offset#0" + ] + }, + "485": { + "op": "dup", + "defined_out": [ + "array_head_and_tail#0 (copy)", + "head_offset#0", + "head_offset#0 (copy)", + "tmp%1#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "array_head_and_tail#0 (copy)", + "head_offset#0 (copy)", + "head_offset#0 (copy)" + ] + }, + "486": { + "op": "cover 2", + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "head_offset#0", + "array_head_and_tail#0 (copy)", + "head_offset#0 (copy)" + ] + }, + "488": { + "op": "extract_uint16", + "defined_out": [ + "head_offset#0", + "item_offset#0", + "tmp%1#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "head_offset#0", + "item_offset#0" + ] + }, + "489": { + "op": "frame_dig 2", + "defined_out": [ + "head_offset#0", + "item_offset#0", + "item_offset_adjustment#0", + "tmp%1#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "head_offset#0", + "item_offset#0", + "item_offset_adjustment#0" + ] + }, + "491": { + "op": "+", + "defined_out": [ + "head_offset#0", + "item_offset_adjustment#0", + "tmp%1#0", + "tmp%3#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "head_offset#0", + "tmp%3#0" + ] + }, + "492": { + "op": "itob", + "defined_out": [ + "head_offset#0", + "item_offset_adjustment#0", + "tmp%1#0", + "tmp%4#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "head_offset#0", + "tmp%4#0" + ] + }, + "493": { + "op": "extract 6 2", + "defined_out": [ + "head_offset#0", + "item_offset_adjustment#0", + "tmp%1#0", + "tmp%5#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "head_offset#0", + "tmp%5#0" + ] + }, + "496": { + "op": "frame_dig 1", + "defined_out": [ + "head_offset#0", + "item_offset_adjustment#0", + "new_head#0", + "tmp%1#0", + "tmp%5#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "head_offset#0", + "tmp%5#0", + "new_head#0" + ] + }, + "498": { + "op": "swap", + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "head_offset#0", + "new_head#0", + "tmp%5#0" + ] + }, + "499": { + "op": "concat", + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "head_offset#0", + "new_head#0" + ] + }, + "500": { + "op": "frame_bury 1", + "defined_out": [ + "head_offset#0", + "item_offset_adjustment#0", + "new_head#0", + "tmp%1#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "head_offset#0" + ] + }, + "502": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "head_offset#0", + "item_offset_adjustment#0", + "new_head#0", + "tmp%1#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "head_offset#0", + "2" + ] + }, + "503": { + "op": "+", + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "head_offset#0" + ] + }, + "504": { + "op": "frame_bury 4", + "defined_out": [ + "head_offset#0", + "item_offset_adjustment#0", + "new_head#0", + "tmp%1#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0" + ] + }, + "506": { + "op": "b dynamic_array_concat_dynamic_element_for_header@1" + }, + "509": { + "block": "dynamic_array_concat_dynamic_element_after_for@4", + "stack_in": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0" + ], + "op": "frame_dig -3", + "defined_out": [ + "array_head_and_tail#0 (copy)" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "array_head_and_tail#0 (copy)" + ] + }, + "511": { + "op": "len", + "defined_out": [ + "head_and_tail_length#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "head_and_tail_length#0" + ] + }, + "512": { + "op": "frame_bury 0", + "defined_out": [ + "head_and_tail_length#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0" + ] + }, + "514": { + "op": "intc_0 // 0", + "defined_out": [ + "head_and_tail_length#0", + "head_offset#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "head_offset#0" + ] + }, + "515": { + "op": "frame_bury 4", + "defined_out": [ + "head_and_tail_length#0", + "head_offset#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0" + ] + }, + "517": { + "block": "dynamic_array_concat_dynamic_element_for_header@5", + "stack_in": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0" + ], + "op": "frame_dig 4", + "defined_out": [ + "head_offset#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "head_offset#0" + ] + }, + "519": { + "op": "frame_dig 2", + "defined_out": [ + "head_offset#0", + "item_offset_adjustment#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "head_offset#0", + "item_offset_adjustment#0" + ] + }, + "521": { + "op": "<", + "defined_out": [ + "continue_looping%1#0", + "head_offset#0", + "item_offset_adjustment#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "continue_looping%1#0" + ] + }, + "522": { + "op": "bz dynamic_array_concat_dynamic_element_after_for@8", + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0" + ] + }, + "525": { + "op": "frame_dig -1", + "defined_out": [ + "head_offset#0", + "item_offset_adjustment#0", + "new_head_and_tail#0 (copy)" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "new_head_and_tail#0 (copy)" + ] + }, + "527": { + "op": "frame_dig 4", + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "new_head_and_tail#0 (copy)", + "head_offset#0" + ] + }, + "529": { + "op": "dup", + "defined_out": [ + "head_offset#0", + "head_offset#0 (copy)", + "item_offset_adjustment#0", + "new_head_and_tail#0 (copy)" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "new_head_and_tail#0 (copy)", + "head_offset#0 (copy)", + "head_offset#0 (copy)" + ] + }, + "530": { + "op": "cover 2", + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "head_offset#0", + "new_head_and_tail#0 (copy)", + "head_offset#0 (copy)" + ] + }, + "532": { + "op": "extract_uint16", + "defined_out": [ + "head_offset#0", + "item_offset#0", + "item_offset_adjustment#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "head_offset#0", + "item_offset#0" + ] + }, + "533": { + "op": "frame_dig 0", + "defined_out": [ + "head_and_tail_length#0", + "head_offset#0", + "item_offset#0", + "item_offset_adjustment#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "head_offset#0", + "item_offset#0", + "head_and_tail_length#0" + ] + }, + "535": { + "op": "+", + "defined_out": [ + "head_and_tail_length#0", + "head_offset#0", + "item_offset_adjustment#0", + "tmp%10#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "head_offset#0", + "tmp%10#0" + ] + }, + "536": { + "op": "itob", + "defined_out": [ + "head_and_tail_length#0", + "head_offset#0", + "item_offset_adjustment#0", + "tmp%11#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "head_offset#0", + "tmp%11#0" + ] + }, + "537": { + "op": "extract 6 2", + "defined_out": [ + "head_and_tail_length#0", + "head_offset#0", + "item_offset_adjustment#0", + "tmp%12#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "head_offset#0", + "tmp%12#0" + ] + }, + "540": { + "op": "frame_dig 1", + "defined_out": [ + "head_and_tail_length#0", + "head_offset#0", + "item_offset_adjustment#0", + "new_head#0", + "tmp%12#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "head_offset#0", + "tmp%12#0", + "new_head#0" + ] + }, + "542": { + "op": "swap", + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "head_offset#0", + "new_head#0", + "tmp%12#0" + ] + }, + "543": { + "op": "concat", + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "head_offset#0", + "new_head#0" + ] + }, + "544": { + "op": "frame_bury 1", + "defined_out": [ + "head_and_tail_length#0", + "head_offset#0", + "item_offset_adjustment#0", + "new_head#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "head_offset#0" + ] + }, + "546": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "head_and_tail_length#0", + "head_offset#0", + "item_offset_adjustment#0", + "new_head#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "head_offset#0", + "2" + ] + }, + "547": { + "op": "+", + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "head_offset#0" + ] + }, + "548": { + "op": "frame_bury 4", + "defined_out": [ + "head_and_tail_length#0", + "head_offset#0", + "item_offset_adjustment#0", + "new_head#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0" + ] + }, + "550": { + "op": "b dynamic_array_concat_dynamic_element_for_header@5" + }, + "553": { + "block": "dynamic_array_concat_dynamic_element_after_for@8", + "stack_in": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0" + ], + "op": "frame_dig -4", + "defined_out": [ + "array_items_count#0 (copy)" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "array_items_count#0 (copy)" + ] + }, + "555": { + "op": "frame_dig -2", + "defined_out": [ + "array_items_count#0 (copy)", + "new_items_count#0 (copy)" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "array_items_count#0 (copy)", + "new_items_count#0 (copy)" + ] + }, + "557": { + "op": "+", + "defined_out": [ + "tmp%14#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "tmp%14#0" + ] + }, + "558": { + "op": "itob", + "defined_out": [ + "tmp%15#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "tmp%15#0" + ] + }, + "559": { + "op": "extract 6 2", + "defined_out": [ + "tmp%16#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "tmp%16#0" + ] + }, + "562": { + "op": "frame_dig 1", + "defined_out": [ + "new_head#0", + "tmp%16#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "tmp%16#0", + "new_head#0" + ] + }, + "564": { + "op": "concat", + "defined_out": [ + "new_head#0", + "tmp%17#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "tmp%17#0" + ] + }, + "565": { + "op": "frame_dig -3", + "defined_out": [ + "array_head_and_tail#0 (copy)", + "new_head#0", + "tmp%17#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "tmp%17#0", + "array_head_and_tail#0 (copy)" + ] + }, + "567": { + "op": "frame_dig 3", + "defined_out": [ + "array_head_and_tail#0 (copy)", + "new_head#0", + "tmp%1#0", + "tmp%17#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "tmp%17#0", + "array_head_and_tail#0 (copy)", + "tmp%1#0" + ] + }, + "569": { + "op": "frame_dig 0", + "defined_out": [ + "array_head_and_tail#0 (copy)", + "head_and_tail_length#0", + "new_head#0", + "tmp%1#0", + "tmp%17#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "tmp%17#0", + "array_head_and_tail#0 (copy)", + "tmp%1#0", + "head_and_tail_length#0" + ] + }, + "571": { + "op": "substring3", + "defined_out": [ + "head_and_tail_length#0", + "new_head#0", + "tmp%1#0", + "tmp%17#0", + "tmp%19#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "tmp%17#0", + "tmp%19#0" + ] + }, + "572": { + "op": "concat", + "defined_out": [ + "head_and_tail_length#0", + "new_head#0", + "tmp%1#0", + "tmp%20#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "tmp%20#0" + ] + }, + "573": { + "op": "frame_dig -1", + "defined_out": [ + "head_and_tail_length#0", + "new_head#0", + "new_head_and_tail#0 (copy)", + "tmp%1#0", + "tmp%20#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "tmp%20#0", + "new_head_and_tail#0 (copy)" + ] + }, + "575": { + "op": "len", + "defined_out": [ + "head_and_tail_length#0", + "new_head#0", + "tmp%1#0", + "tmp%20#0", + "tmp%22#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "tmp%20#0", + "tmp%22#0" + ] + }, + "576": { + "op": "frame_dig -1", + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "tmp%20#0", + "tmp%22#0", + "new_head_and_tail#0 (copy)" + ] + }, + "578": { + "op": "frame_dig 2", + "defined_out": [ + "head_and_tail_length#0", + "item_offset_adjustment#0", + "new_head#0", + "new_head_and_tail#0 (copy)", + "tmp%1#0", + "tmp%20#0", + "tmp%22#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "tmp%20#0", + "tmp%22#0", + "new_head_and_tail#0 (copy)", + "item_offset_adjustment#0" + ] + }, + "580": { + "op": "uncover 2", + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "tmp%20#0", + "new_head_and_tail#0 (copy)", + "item_offset_adjustment#0", + "tmp%22#0" + ] + }, + "582": { + "op": "substring3", + "defined_out": [ + "head_and_tail_length#0", + "item_offset_adjustment#0", + "new_head#0", + "tmp%1#0", + "tmp%20#0", + "tmp%23#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "tmp%20#0", + "tmp%23#0" + ] + }, + "583": { + "op": "concat", + "defined_out": [ + "head_and_tail_length#0", + "item_offset_adjustment#0", + "new_head#0", + "tmp%1#0", + "tmp%24#0" + ], + "stack_out": [ + "head_and_tail_length#0", + "new_head#0", + "item_offset_adjustment#0", + "tmp%1#0", + "head_offset#0", + "tmp%24#0" + ] + }, + "584": { + "op": "frame_bury 0" + }, + "586": { + "retsub": true, + "op": "retsub" + }, + "587": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.createApplication[routing]", + "params": {}, + "block": "createApplication", + "stack_in": [], + "op": "txna ApplicationArgs 1" + }, + "590": { + "op": "dupn 2", + "defined_out": [ + "controlledAddress#0", + "controlledAddress#0 (copy)" + ], + "stack_out": [ + "controlledAddress#0", + "controlledAddress#0", + "controlledAddress#0 (copy)" + ] + }, + "592": { + "op": "len", + "defined_out": [ + "controlledAddress#0", + "len%0#0" + ], + "stack_out": [ + "controlledAddress#0", + "controlledAddress#0", + "len%0#0" + ] + }, + "593": { + "op": "pushint 32 // 32", + "defined_out": [ + "32", + "controlledAddress#0", + "len%0#0" + ], + "stack_out": [ + "controlledAddress#0", + "controlledAddress#0", + "len%0#0", + "32" + ] + }, + "595": { + "op": "==", + "defined_out": [ + "controlledAddress#0", + "eq%0#0" + ], + "stack_out": [ + "controlledAddress#0", + "controlledAddress#0", + "eq%0#0" + ] + }, + "596": { + "error": "invalid number of bytes for uint8[32]", + "op": "assert // invalid number of bytes for uint8[32]", + "stack_out": [ + "controlledAddress#0", + "controlledAddress#0" + ] + }, + "597": { + "op": "txna ApplicationArgs 2" + }, + "600": { + "op": "dup", + "defined_out": [ + "admin#0", + "controlledAddress#0" + ], + "stack_out": [ + "controlledAddress#0", + "controlledAddress#0", + "admin#0", + "admin#0" + ] + }, + "601": { + "op": "cover 2", + "defined_out": [ + "admin#0", + "controlledAddress#0" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "controlledAddress#0", + "admin#0" + ] + }, + "603": { + "op": "len", + "defined_out": [ + "admin#0", + "controlledAddress#0", + "len%1#0" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "controlledAddress#0", + "len%1#0" + ] + }, + "604": { + "op": "pushint 32 // 32", + "stack_out": [ + "controlledAddress#0", + "admin#0", + "controlledAddress#0", + "len%1#0", + "32" + ] + }, + "606": { + "op": "==", + "defined_out": [ + "admin#0", + "controlledAddress#0", + "eq%1#0" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "controlledAddress#0", + "eq%1#0" + ] + }, + "607": { + "error": "invalid number of bytes for uint8[32]", + "op": "assert // invalid number of bytes for uint8[32]", + "stack_out": [ + "controlledAddress#0", + "admin#0", + "controlledAddress#0" + ] + }, + "608": { + "op": "txna ApplicationArgs 3", + "defined_out": [ + "admin#0", + "controlledAddress#0", + "tmp%2#0" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "controlledAddress#0", + "tmp%2#0" + ] + }, + "611": { + "op": "dup", + "defined_out": [ + "admin#0", + "controlledAddress#0", + "tmp%2#0", + "tmp%2#0 (copy)" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "controlledAddress#0", + "tmp%2#0", + "tmp%2#0 (copy)" + ] + }, + "612": { + "op": "len", + "defined_out": [ + "admin#0", + "controlledAddress#0", + "len%2#0", + "tmp%2#0" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "controlledAddress#0", + "tmp%2#0", + "len%2#0" + ] + }, + "613": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "admin#0", + "controlledAddress#0", + "len%2#0", + "tmp%2#0" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "controlledAddress#0", + "tmp%2#0", + "len%2#0", + "8" + ] + }, + "614": { + "op": "==", + "defined_out": [ + "admin#0", + "controlledAddress#0", + "eq%2#0", + "tmp%2#0" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "controlledAddress#0", + "tmp%2#0", + "eq%2#0" + ] + }, + "615": { + "error": "invalid number of bytes for uint64", + "op": "assert // invalid number of bytes for uint64", + "stack_out": [ + "controlledAddress#0", + "admin#0", + "controlledAddress#0", + "tmp%2#0" + ] + }, + "616": { + "op": "btoi", + "defined_out": [ + "admin#0", + "controlledAddress#0", + "escrowFactory#0" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "controlledAddress#0", + "escrowFactory#0" + ] + }, + "617": { + "op": "swap", + "defined_out": [ + "admin#0", + "controlledAddress#0", + "escrowFactory#0" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0", + "controlledAddress#0" + ] + }, + "618": { + "op": "txn Sender", + "defined_out": [ + "admin#0", + "controlledAddress#0", + "escrowFactory#0", + "tmp%0#1" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0", + "controlledAddress#0", + "tmp%0#1" + ] + }, + "620": { + "op": "==", + "defined_out": [ + "admin#0", + "controlledAddress#0", + "escrowFactory#0", + "tmp%2#1" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0", + "tmp%2#1" + ] + }, + "621": { + "op": "bnz createApplication_bool_true@3", + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0" + ] + }, + "624": { + "op": "txn Sender", + "defined_out": [ + "admin#0", + "controlledAddress#0", + "escrowFactory#0", + "tmp%3#1" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0", + "tmp%3#1" + ] + }, + "626": { + "op": "dig 2", + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0", + "tmp%3#1", + "admin#0" + ] + }, + "628": { + "op": "==", + "defined_out": [ + "admin#0", + "controlledAddress#0", + "escrowFactory#0", + "tmp%5#0" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0", + "tmp%5#0" + ] + }, + "629": { + "op": "bz createApplication_bool_false@4", + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0" + ] + }, + "632": { + "block": "createApplication_bool_true@3", + "stack_in": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0" + ], + "op": "intc_1 // 1", + "defined_out": [ + "or_result%0#0" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0", + "or_result%0#0" + ] + }, + "633": { + "error": "sender must be either controlledAddress or admin", + "block": "createApplication_bool_merge@5", + "stack_in": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0", + "or_result%0#0" + ], + "op": "assert // sender must be either controlledAddress or admin", + "defined_out": [], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0" + ] + }, + "634": { + "op": "dig 1", + "defined_out": [ + "admin#0" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0", + "admin#0" + ] + }, + "636": { + "op": "dup", + "defined_out": [ + "admin#0", + "admin#0 (copy)" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0", + "admin#0", + "admin#0 (copy)" + ] + }, + "637": { + "op": "dig 4", + "defined_out": [ + "admin#0", + "admin#0 (copy)", + "controlledAddress#0" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0", + "admin#0", + "admin#0 (copy)", + "controlledAddress#0" + ] + }, + "639": { + "op": "dup", + "defined_out": [ + "admin#0", + "admin#0 (copy)", + "controlledAddress#0", + "controlledAddress#0 (copy)" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0", + "admin#0", + "admin#0 (copy)", + "controlledAddress#0 (copy)", + "controlledAddress#0 (copy)" + ] + }, + "640": { + "op": "cover 3", + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0", + "controlledAddress#0", + "admin#0", + "admin#0 (copy)", + "controlledAddress#0 (copy)" + ] + }, + "642": { + "op": "!=", + "defined_out": [ + "admin#0", + "controlledAddress#0", + "tmp%6#0" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0", + "controlledAddress#0", + "admin#0", + "tmp%6#0" + ] + }, + "643": { + "op": "assert", + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0", + "controlledAddress#0", + "admin#0" + ] + }, + "644": { + "op": "bytec_2 // \"admin\"", + "defined_out": [ + "\"admin\"", + "admin#0", + "controlledAddress#0" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0", + "controlledAddress#0", + "admin#0", + "\"admin\"" + ] + }, + "645": { + "op": "swap", + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0", + "controlledAddress#0", + "\"admin\"", + "admin#0" + ] + }, + "646": { + "op": "app_global_put", + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0", + "controlledAddress#0" + ] + }, + "647": { + "op": "global ZeroAddress", + "defined_out": [ + "admin#0", + "controlledAddress#0", + "tmp%9#0" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0", + "controlledAddress#0", + "tmp%9#0" + ] + }, + "649": { + "op": "==", + "defined_out": [ + "admin#0", + "controlledAddress#0", + "tmp%10#0" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0", + "tmp%10#0" + ] + }, + "650": { + "op": "bz createApplication_ternary_false@7", + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0" + ] + }, + "653": { + "op": "global CurrentApplicationAddress", + "defined_out": [ + "admin#0", + "controlledAddress#0", + "ternary_result%0#0" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0", + "ternary_result%0#0" + ] + }, + "655": { + "block": "createApplication_ternary_merge@8", + "stack_in": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0", + "ternary_result%0#0" + ], + "op": "bytec_0 // \"controlled_address\"", + "defined_out": [ + "\"controlled_address\"" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0", + "ternary_result%0#0", + "\"controlled_address\"" + ] + }, + "656": { + "op": "swap", + "defined_out": [ + "\"controlled_address\"", + "ternary_result%0#0" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0", + "\"controlled_address\"", + "ternary_result%0#0" + ] + }, + "657": { + "op": "app_global_put", + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0" + ] + }, + "658": { + "op": "bytec 18 // \"escrow_factory\"", + "defined_out": [ + "\"escrow_factory\"" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0", + "\"escrow_factory\"" + ] + }, + "660": { + "op": "dig 1", + "defined_out": [ + "\"escrow_factory\"", + "escrowFactory#0" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0", + "\"escrow_factory\"", + "escrowFactory#0" + ] + }, + "662": { + "op": "app_global_put", + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0" + ] + }, + "663": { + "op": "bytec 11 // \"spending_address\"", + "defined_out": [ + "\"spending_address\"", + "escrowFactory#0" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0", + "\"spending_address\"" + ] + }, + "665": { + "op": "global ZeroAddress", + "defined_out": [ + "\"spending_address\"", + "escrowFactory#0", + "tmp%11#0" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0", + "\"spending_address\"", + "tmp%11#0" + ] + }, + "667": { + "op": "app_global_put", + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0" + ] + }, + "668": { + "op": "bytec_3 // \"last_user_interaction\"", + "defined_out": [ + "\"last_user_interaction\"", + "escrowFactory#0" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0", + "\"last_user_interaction\"" + ] + }, + "669": { + "op": "global LatestTimestamp", + "defined_out": [ + "\"last_user_interaction\"", + "escrowFactory#0", + "tmp%0#2" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0", + "\"last_user_interaction\"", + "tmp%0#2" + ] + }, + "671": { + "op": "app_global_put", + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0" + ] + }, + "672": { + "op": "bytec 6 // \"last_change\"", + "defined_out": [ + "\"last_change\"", + "escrowFactory#0" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0", + "\"last_change\"" + ] + }, + "674": { + "op": "global LatestTimestamp", + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0", + "\"last_change\"", + "tmp%0#2" + ] + }, + "676": { + "op": "app_global_put", + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0" + ] + }, + "677": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "escrowFactory#0" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0", + "1" + ] + }, + "678": { + "op": "return", + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0" + ] + }, + "679": { + "block": "createApplication_ternary_false@7", + "stack_in": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0" + ], + "op": "dig 2", + "defined_out": [ + "ternary_result%0#0" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0", + "ternary_result%0#0" + ] + }, + "681": { + "op": "b createApplication_ternary_merge@8" + }, + "684": { + "block": "createApplication_bool_false@4", + "stack_in": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0" + ], + "op": "intc_0 // 0", + "defined_out": [ + "or_result%0#0" + ], + "stack_out": [ + "controlledAddress#0", + "admin#0", + "escrowFactory#0", + "or_result%0#0" + ] + }, + "685": { + "op": "b createApplication_bool_merge@5" + }, + "688": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.register[routing]", + "params": {}, + "block": "register", + "stack_in": [], + "op": "txna ApplicationArgs 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] + }, + "691": { + "op": "dup", + "defined_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ] + }, + "692": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "tmp%0#0", + "tmp%0#0 (copy)", + "0" + ] + }, + "693": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "aggregate%array_length%0#0" + ] + }, + "694": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "aggregate%array_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "aggregate%array_length%0#0", + "2" + ] + }, + "695": { + "op": "+", + "defined_out": [ + "add%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "add%0#0" + ] + }, + "696": { + "op": "dig 1", + "stack_out": [ + "tmp%0#0", + "add%0#0", + "tmp%0#0 (copy)" + ] + }, + "698": { + "op": "len", + "defined_out": [ + "add%0#0", + "len%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "add%0#0", + "len%0#0" + ] + }, + "699": { + "op": "==", + "defined_out": [ + "eq%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "eq%0#0" + ] + }, + "700": { + "error": "invalid number of bytes for (len+utf8[])", + "op": "assert // invalid number of bytes for (len+utf8[])", + "stack_out": [ + "tmp%0#0" + ] + }, + "701": { + "op": "extract 2 0", + "defined_out": [ + "escrow#0" + ], + "stack_out": [ + "escrow#0" + ] + }, + "704": { + "op": "dup", + "defined_out": [ + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "escrow#0" + ] + }, + "705": { + "op": "intc_0 // 0", + "defined_out": [ + "app#0", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "escrow#0", + "app#0" + ] + }, + "706": { + "op": "swap", + "defined_out": [ + "app#0", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "app#0", + "escrow#0" + ] + }, + "707": { + "op": "bytec_1 // \"\"", + "defined_out": [ + "\"\"", + "app#0", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "app#0", + "escrow#0", + "\"\"" + ] + }, + "708": { + "op": "!=", + "defined_out": [ + "app#0", + "escrow#0", + "tmp%0#1" + ], + "stack_out": [ + "escrow#0", + "app#0", + "tmp%0#1" + ] + }, + "709": { + "op": "bz register_after_if_else@3", + "stack_out": [ + "escrow#0", + "app#0" + ] + }, + "712": { + "op": "bytec 5 // \"e\"", + "defined_out": [ + "\"e\"", + "app#0", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "app#0", + "\"e\"" + ] + }, + "714": { + "op": "dig 2", + "stack_out": [ + "escrow#0", + "app#0", + "\"e\"", + "escrow#0" + ] + }, + "716": { + "op": "concat", + "defined_out": [ + "app#0", + "box_prefixed_key%0#0", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "app#0", + "box_prefixed_key%0#0" + ] + }, + "717": { + "op": "dup", + "defined_out": [ + "app#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "app#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)" + ] + }, + "718": { + "op": "box_len", + "defined_out": [ + "_%0#0", + "app#0", + "box_prefixed_key%0#0", + "escrow#0", + "maybe_exists%0#0" + ], + "stack_out": [ + "escrow#0", + "app#0", + "box_prefixed_key%0#0", + "_%0#0", + "maybe_exists%0#0" + ] + }, + "719": { + "op": "bury 1", + "stack_out": [ + "escrow#0", + "app#0", + "box_prefixed_key%0#0", + "maybe_exists%0#0" + ] + }, + "721": { + "error": "escrow does not exist", + "op": "assert // escrow does not exist", + "stack_out": [ + "escrow#0", + "app#0", + "box_prefixed_key%0#0" + ] + }, + "722": { + "op": "box_get", + "defined_out": [ + "aggregate%box_get%0#0", + "aggregate%box_get%1#0", + "app#0", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "app#0", + "aggregate%box_get%0#0", + "aggregate%box_get%1#0" + ] + }, + "723": { + "op": "pop", + "stack_out": [ + "escrow#0", + "app#0", + "aggregate%box_get%0#0" + ] + }, + "724": { + "op": "intc_0 // 0", + "stack_out": [ + "escrow#0", + "app#0", + "aggregate%box_get%0#0", + "0" + ] + }, + "725": { + "op": "extract_uint64", + "stack_out": [ + "escrow#0", + "app#0", + "app#0" + ] + }, + "726": { + "op": "bury 1", + "stack_out": [ + "escrow#0", + "app#0" + ] + }, + "728": { + "block": "register_after_if_else@3", + "stack_in": [ + "escrow#0", + "app#0" + ], + "op": "itxn_begin" + }, + "729": { + "op": "intc_0 // 0", + "defined_out": [ + "0" + ], + "stack_out": [ + "escrow#0", + "app#0", + "0" + ] + }, + "730": { + "op": "bytec 18 // \"escrow_factory\"", + "defined_out": [ + "\"escrow_factory\"", + "0" + ], + "stack_out": [ + "escrow#0", + "app#0", + "0", + "\"escrow_factory\"" + ] + }, + "732": { + "op": "app_global_get_ex", + "defined_out": [ + "maybe_exists%1#0", + "maybe_value%0#0" + ], + "stack_out": [ + "escrow#0", + "app#0", + "maybe_value%0#0", + "maybe_exists%1#0" + ] + }, + "733": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "escrow#0", + "app#0", + "maybe_value%0#0" + ] + }, + "734": { + "op": "dup", + "defined_out": [ + "maybe_value%0#0", + "maybe_value%0#0 (copy)" + ], + "stack_out": [ + "escrow#0", + "app#0", + "maybe_value%0#0", + "maybe_value%0#0 (copy)" + ] + }, + "735": { + "op": "app_params_get AppAddress", + "defined_out": [ + "check%0#0", + "maybe_value%0#0", + "value%0#0" + ], + "stack_out": [ + "escrow#0", + "app#0", + "maybe_value%0#0", + "value%0#0", + "check%0#0" + ] + }, + "737": { + "error": "application exists", + "op": "assert // application exists", + "stack_out": [ + "escrow#0", + "app#0", + "maybe_value%0#0", + "value%0#0" + ] + }, + "738": { + "op": "pushint 12100 // 12100", + "defined_out": [ + "12100", + "maybe_value%0#0", + "value%0#0" + ], + "stack_out": [ + "escrow#0", + "app#0", + "maybe_value%0#0", + "value%0#0", + "12100" + ] + }, + "741": { + "op": "itxn_field Amount", + "stack_out": [ + "escrow#0", + "app#0", + "maybe_value%0#0", + "value%0#0" + ] + }, + "743": { + "op": "itxn_field Receiver", + "stack_out": [ + "escrow#0", + "app#0", + "maybe_value%0#0" + ] + }, + "745": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "maybe_value%0#0" + ], + "stack_out": [ + "escrow#0", + "app#0", + "maybe_value%0#0", + "1" + ] + }, + "746": { + "op": "itxn_field TypeEnum", + "stack_out": [ + "escrow#0", + "app#0", + "maybe_value%0#0" + ] + }, + "748": { + "op": "intc_0 // 0", + "stack_out": [ + "escrow#0", + "app#0", + "maybe_value%0#0", + "0" + ] + }, + "749": { + "op": "itxn_field Fee", + "stack_out": [ + "escrow#0", + "app#0", + "maybe_value%0#0" + ] + }, + "751": { + "op": "itxn_next" + }, + "752": { + "op": "dig 1", + "defined_out": [ + "app#0", + "maybe_value%0#0" + ], + "stack_out": [ + "escrow#0", + "app#0", + "maybe_value%0#0", + "app#0" + ] + }, + "754": { + "op": "itob", + "defined_out": [ + "aggregate%val_as_bytes%0#0", + "app#0", + "maybe_value%0#0" + ], + "stack_out": [ + "escrow#0", + "app#0", + "maybe_value%0#0", + "aggregate%val_as_bytes%0#0" + ] + }, + "755": { + "op": "pushbytes 0x607e7046 // method \"register(pay,uint64)void\"", + "defined_out": [ + "Method(register(pay,uint64)void)", + "aggregate%val_as_bytes%0#0", + "app#0", + "maybe_value%0#0" + ], + "stack_out": [ + "escrow#0", + "app#0", + "maybe_value%0#0", + "aggregate%val_as_bytes%0#0", + "Method(register(pay,uint64)void)" + ] + }, + "761": { + "op": "itxn_field ApplicationArgs", + "stack_out": [ + "escrow#0", + "app#0", + "maybe_value%0#0", + "aggregate%val_as_bytes%0#0" + ] + }, + "763": { + "op": "itxn_field ApplicationArgs", + "stack_out": [ + "escrow#0", + "app#0", + "maybe_value%0#0" + ] + }, + "765": { + "op": "itxn_field ApplicationID", + "stack_out": [ + "escrow#0", + "app#0" + ] + }, + "767": { + "op": "pushint 6 // appl", + "defined_out": [ + "app#0", + "appl" + ], + "stack_out": [ + "escrow#0", + "app#0", + "appl" + ] + }, + "769": { + "op": "itxn_field TypeEnum", + "stack_out": [ + "escrow#0", + "app#0" + ] + }, + "771": { + "op": "intc_0 // 0", + "stack_out": [ + "escrow#0", + "app#0", + "0" + ] + }, + "772": { + "op": "itxn_field Fee", + "stack_out": [ + "escrow#0", + "app#0" + ] + }, + "774": { + "op": "itxn_submit" + }, + "775": { + "op": "intc_1 // 1", + "stack_out": [ + "escrow#0", + "app#0", + "1" + ] + }, + "776": { + "op": "return", + "stack_out": [ + "escrow#0", + "app#0" + ] + }, + "777": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_changeAdmin[routing]", + "params": {}, + "block": "arc58_changeAdmin", + "stack_in": [], + "op": "txna ApplicationArgs 1", + "defined_out": [ + "newAdmin#0" + ], + "stack_out": [ + "newAdmin#0" + ] + }, + "780": { + "op": "dup", + "defined_out": [ + "newAdmin#0", + "newAdmin#0 (copy)" + ], + "stack_out": [ + "newAdmin#0", + "newAdmin#0 (copy)" + ] + }, + "781": { + "op": "len", + "defined_out": [ + "len%0#0", + "newAdmin#0" + ], + "stack_out": [ + "newAdmin#0", + "len%0#0" + ] + }, + "782": { + "op": "pushint 32 // 32", + "defined_out": [ + "32", + "len%0#0", + "newAdmin#0" + ], + "stack_out": [ + "newAdmin#0", + "len%0#0", + "32" + ] + }, + "784": { + "op": "==", + "defined_out": [ + "eq%0#0", + "newAdmin#0" + ], + "stack_out": [ + "newAdmin#0", + "eq%0#0" + ] + }, + "785": { + "error": "invalid number of bytes for uint8[32]", + "op": "assert // invalid number of bytes for uint8[32]", + "stack_out": [ + "newAdmin#0" + ] + }, + "786": { + "op": "txn Sender", + "defined_out": [ + "newAdmin#0", + "tmp%0#1" + ], + "stack_out": [ + "newAdmin#0", + "tmp%0#1" + ] + }, + "788": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "newAdmin#0", + "tmp%0#1" + ], + "stack_out": [ + "newAdmin#0", + "tmp%0#1", + "0" + ] + }, + "789": { + "op": "bytec_2 // \"admin\"", + "defined_out": [ + "\"admin\"", + "0", + "newAdmin#0", + "tmp%0#1" + ], + "stack_out": [ + "newAdmin#0", + "tmp%0#1", + "0", + "\"admin\"" + ] + }, + "790": { + "op": "app_global_get_ex", + "defined_out": [ + "maybe_exists%0#0", + "maybe_value%0#0", + "newAdmin#0", + "tmp%0#1" + ], + "stack_out": [ + "newAdmin#0", + "tmp%0#1", + "maybe_value%0#0", + "maybe_exists%0#0" + ] + }, + "791": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "newAdmin#0", + "tmp%0#1", + "maybe_value%0#0" + ] + }, + "792": { + "op": "==", + "defined_out": [ + "newAdmin#0", + "tmp%1#0" + ], + "stack_out": [ + "newAdmin#0", + "tmp%1#0" + ] + }, + "793": { + "error": "only admin can change the admin account", + "op": "assert // only admin can change the admin account", + "stack_out": [ + "newAdmin#0" + ] + }, + "794": { + "op": "bytec_2 // \"admin\"", + "stack_out": [ + "newAdmin#0", + "\"admin\"" + ] + }, + "795": { + "op": "swap", + "stack_out": [ + "\"admin\"", + "newAdmin#0" + ] + }, + "796": { + "op": "app_global_put", + "stack_out": [] + }, + "797": { + "op": "bytec_3 // \"last_user_interaction\"", + "defined_out": [ + "\"last_user_interaction\"" + ], + "stack_out": [ + "\"last_user_interaction\"" + ] + }, + "798": { + "op": "global LatestTimestamp", + "defined_out": [ + "\"last_user_interaction\"", + "tmp%0#2" + ], + "stack_out": [ + "\"last_user_interaction\"", + "tmp%0#2" + ] + }, + "800": { + "op": "app_global_put", + "stack_out": [] + }, + "801": { + "op": "bytec 6 // \"last_change\"", + "defined_out": [ + "\"last_change\"" + ], + "stack_out": [ + "\"last_change\"" + ] + }, + "803": { + "op": "global LatestTimestamp", + "stack_out": [ + "\"last_change\"", + "tmp%0#2" + ] + }, + "805": { + "op": "app_global_put", + "stack_out": [] + }, + "806": { + "op": "intc_1 // 1", + "defined_out": [ + "1" + ], + "stack_out": [ + "1" + ] + }, + "807": { + "op": "return", + "stack_out": [] + }, + "808": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_pluginChangeAdmin[routing]", + "params": {}, + "block": "arc58_pluginChangeAdmin", + "stack_in": [], + "op": "txna ApplicationArgs 1" + }, + "811": { + "op": "dup", + "defined_out": [ + "newAdmin#0" + ], + "stack_out": [ + "newAdmin#0", + "newAdmin#0" + ] + }, + "812": { + "op": "len", + "defined_out": [ + "len%0#0", + "newAdmin#0" + ], + "stack_out": [ + "newAdmin#0", + "len%0#0" + ] + }, + "813": { + "op": "pushint 32 // 32", + "defined_out": [ + "32", + "len%0#0", + "newAdmin#0" + ], + "stack_out": [ + "newAdmin#0", + "len%0#0", + "32" + ] + }, + "815": { + "op": "==", + "defined_out": [ + "eq%0#0", + "newAdmin#0" + ], + "stack_out": [ + "newAdmin#0", + "eq%0#0" + ] + }, + "816": { + "error": "invalid number of bytes for uint8[32]", + "op": "assert // invalid number of bytes for uint8[32]", + "stack_out": [ + "newAdmin#0" + ] + }, + "817": { + "op": "intc_0 // 0", + "stack_out": [ + "newAdmin#0", + "0" + ] + }, + "818": { + "op": "bytec 19 // \"current_plugin\"", + "defined_out": [ + "\"current_plugin\"", + "0", + "newAdmin#0" + ], + "stack_out": [ + "newAdmin#0", + "0", + "\"current_plugin\"" + ] + }, + "820": { + "op": "app_global_get_ex", + "defined_out": [ + "key#0", + "maybe_exists%0#0", + "newAdmin#0" + ], + "stack_out": [ + "newAdmin#0", + "key#0", + "maybe_exists%0#0" + ] + }, + "821": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "newAdmin#0", + "key#0" + ] + }, + "822": { + "op": "dup", + "defined_out": [ + "key#0", + "key#0 (copy)", + "newAdmin#0" + ], + "stack_out": [ + "newAdmin#0", + "key#0", + "key#0 (copy)" + ] + }, + "823": { + "op": "intc_0 // 0", + "stack_out": [ + "newAdmin#0", + "key#0", + "key#0 (copy)", + "0" + ] + }, + "824": { + "op": "extract_uint64", + "defined_out": [ + "key#0", + "newAdmin#0", + "plugin#0" + ], + "stack_out": [ + "newAdmin#0", + "key#0", + "plugin#0" + ] + }, + "825": { + "op": "dig 1", + "stack_out": [ + "newAdmin#0", + "key#0", + "plugin#0", + "key#0 (copy)" + ] + }, + "827": { + "op": "pushint 40 // 40", + "defined_out": [ + "40", + "key#0", + "key#0 (copy)", + "newAdmin#0", + "plugin#0" + ], + "stack_out": [ + "newAdmin#0", + "key#0", + "plugin#0", + "key#0 (copy)", + "40" + ] + }, + "829": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%extract_uint16%0#0", + "key#0", + "newAdmin#0", + "plugin#0" + ], + "stack_out": [ + "newAdmin#0", + "key#0", + "plugin#0", + "aggregate%extract_uint16%0#0" + ] + }, + "830": { + "op": "dig 2", + "stack_out": [ + "newAdmin#0", + "key#0", + "plugin#0", + "aggregate%extract_uint16%0#0", + "key#0 (copy)" + ] + }, + "832": { + "op": "len", + "defined_out": [ + "aggregate%extract_uint16%0#0", + "aggregate%len%0#0", + "key#0", + "newAdmin#0", + "plugin#0" + ], + "stack_out": [ + "newAdmin#0", + "key#0", + "plugin#0", + "aggregate%extract_uint16%0#0", + "aggregate%len%0#0" + ] + }, + "833": { + "op": "dig 3", + "stack_out": [ + "newAdmin#0", + "key#0", + "plugin#0", + "aggregate%extract_uint16%0#0", + "aggregate%len%0#0", + "key#0 (copy)" + ] + }, + "835": { + "op": "cover 2", + "stack_out": [ + "newAdmin#0", + "key#0", + "plugin#0", + "key#0 (copy)", + "aggregate%extract_uint16%0#0", + "aggregate%len%0#0" + ] + }, + "837": { + "op": "substring3", + "defined_out": [ + "aggregate%substring3%0#0", + "key#0", + "newAdmin#0", + "plugin#0" + ], + "stack_out": [ + "newAdmin#0", + "key#0", + "plugin#0", + "aggregate%substring3%0#0" + ] + }, + "838": { + "op": "extract 2 0", + "defined_out": [ + "escrow#0", + "key#0", + "newAdmin#0", + "plugin#0" + ], + "stack_out": [ + "newAdmin#0", + "key#0", + "plugin#0", + "escrow#0" + ] + }, + "841": { + "op": "bytec_1 // \"\"", + "defined_out": [ + "\"\"", + "escrow#0", + "key#0", + "newAdmin#0", + "plugin#0" + ], + "stack_out": [ + "newAdmin#0", + "key#0", + "plugin#0", + "escrow#0", + "\"\"" + ] + }, + "842": { + "op": "==", + "defined_out": [ + "key#0", + "newAdmin#0", + "plugin#0", + "tmp%0#1" + ], + "stack_out": [ + "newAdmin#0", + "key#0", + "plugin#0", + "tmp%0#1" + ] + }, + "843": { + "error": "admin plugins cannot use escrows", + "op": "assert // admin plugins cannot use escrows", + "stack_out": [ + "newAdmin#0", + "key#0", + "plugin#0" + ] + }, + "844": { + "op": "txn Sender", + "defined_out": [ + "key#0", + "newAdmin#0", + "plugin#0", + "tmp%1#0" + ], + "stack_out": [ + "newAdmin#0", + "key#0", + "plugin#0", + "tmp%1#0" + ] + }, + "846": { + "op": "dig 1", + "defined_out": [ + "key#0", + "newAdmin#0", + "plugin#0", + "plugin#0 (copy)", + "tmp%1#0" + ], + "stack_out": [ + "newAdmin#0", + "key#0", + "plugin#0", + "tmp%1#0", + "plugin#0 (copy)" + ] + }, + "848": { + "op": "app_params_get AppAddress", + "defined_out": [ + "check%0#0", + "key#0", + "newAdmin#0", + "plugin#0", + "tmp%1#0", + "value%0#0" + ], + "stack_out": [ + "newAdmin#0", + "key#0", + "plugin#0", + "tmp%1#0", + "value%0#0", + "check%0#0" + ] + }, + "850": { + "error": "application exists", + "op": "assert // application exists", + "stack_out": [ + "newAdmin#0", + "key#0", + "plugin#0", + "tmp%1#0", + "value%0#0" + ] + }, + "851": { + "op": "==", + "defined_out": [ + "key#0", + "newAdmin#0", + "plugin#0", + "tmp%2#0" + ], + "stack_out": [ + "newAdmin#0", + "key#0", + "plugin#0", + "tmp%2#0" + ] + }, + "852": { + "error": "sender must be admin plugin", + "op": "assert // sender must be admin plugin", + "stack_out": [ + "newAdmin#0", + "key#0", + "plugin#0" + ] + }, + "853": { + "op": "intc_0 // 0", + "stack_out": [ + "newAdmin#0", + "key#0", + "plugin#0", + "0" + ] + }, + "854": { + "op": "bytec_0 // \"controlled_address\"", + "defined_out": [ + "\"controlled_address\"", + "0", + "key#0", + "newAdmin#0", + "plugin#0" + ], + "stack_out": [ + "newAdmin#0", + "key#0", + "plugin#0", + "0", + "\"controlled_address\"" + ] + }, + "855": { + "op": "app_global_get_ex", + "defined_out": [ + "key#0", + "maybe_exists%1#0", + "maybe_value%1#0", + "newAdmin#0", + "plugin#0" + ], + "stack_out": [ + "newAdmin#0", + "key#0", + "plugin#0", + "maybe_value%1#0", + "maybe_exists%1#0" + ] + }, + "856": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "newAdmin#0", + "key#0", + "plugin#0", + "maybe_value%1#0" + ] + }, + "857": { + "op": "acct_params_get AcctAuthAddr", + "defined_out": [ + "check%1#0", + "key#0", + "newAdmin#0", + "plugin#0", + "value%1#0" + ], + "stack_out": [ + "newAdmin#0", + "key#0", + "plugin#0", + "value%1#0", + "check%1#0" + ] + }, + "859": { + "error": "account funded", + "op": "assert // account funded", + "stack_out": [ + "newAdmin#0", + "key#0", + "plugin#0", + "value%1#0" + ] + }, + "860": { + "op": "swap", + "stack_out": [ + "newAdmin#0", + "key#0", + "value%1#0", + "plugin#0" + ] + }, + "861": { + "op": "app_params_get AppAddress", + "defined_out": [ + "check%2#0", + "key#0", + "newAdmin#0", + "value%1#0", + "value%2#0" + ], + "stack_out": [ + "newAdmin#0", + "key#0", + "value%1#0", + "value%2#0", + "check%2#0" + ] + }, + "863": { + "error": "application exists", + "op": "assert // application exists", + "stack_out": [ + "newAdmin#0", + "key#0", + "value%1#0", + "value%2#0" + ] + }, + "864": { + "op": "==", + "defined_out": [ + "key#0", + "newAdmin#0", + "tmp%3#0" + ], + "stack_out": [ + "newAdmin#0", + "key#0", + "tmp%3#0" + ] + }, + "865": { + "error": "This plugin is not in control of the account", + "op": "assert // This plugin is not in control of the account", + "stack_out": [ + "newAdmin#0", + "key#0" + ] + }, + "866": { + "op": "bytec 4 // \"p\"", + "defined_out": [ + "\"p\"", + "key#0", + "newAdmin#0" + ], + "stack_out": [ + "newAdmin#0", + "key#0", + "\"p\"" + ] + }, + "868": { + "op": "swap", + "stack_out": [ + "newAdmin#0", + "\"p\"", + "key#0" + ] + }, + "869": { + "op": "concat", + "defined_out": [ + "box_prefixed_key%0#0", + "newAdmin#0" + ], + "stack_out": [ + "newAdmin#0", + "box_prefixed_key%0#0" + ] + }, + "870": { + "op": "dup", + "defined_out": [ + "box_prefixed_key%0#0", + "newAdmin#0" + ], + "stack_out": [ + "newAdmin#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0" + ] + }, + "871": { + "op": "box_len", + "defined_out": [ + "_%0#0", + "box_prefixed_key%0#0", + "maybe_exists%2#0", + "newAdmin#0" + ], + "stack_out": [ + "newAdmin#0", + "box_prefixed_key%0#0", + "_%0#0", + "maybe_exists%2#0" + ] + }, + "872": { + "op": "bury 1", + "stack_out": [ + "newAdmin#0", + "box_prefixed_key%0#0", + "maybe_exists%2#0" + ] + }, + "874": { + "op": "bz arc58_pluginChangeAdmin_bool_false@4", + "stack_out": [ + "newAdmin#0", + "box_prefixed_key%0#0" + ] + }, + "877": { + "op": "dup", + "stack_out": [ + "newAdmin#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0" + ] + }, + "878": { + "op": "pushint 27 // 27", + "defined_out": [ + "27", + "box_prefixed_key%0#0", + "newAdmin#0" + ], + "stack_out": [ + "newAdmin#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "27" + ] + }, + "880": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "27", + "box_prefixed_key%0#0", + "newAdmin#0" + ], + "stack_out": [ + "newAdmin#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "27", + "1" + ] + }, + "881": { + "op": "box_extract", + "defined_out": [ + "box%box_extract%0#0", + "box_prefixed_key%0#0", + "newAdmin#0" + ], + "stack_out": [ + "newAdmin#0", + "box_prefixed_key%0#0", + "box%box_extract%0#0" + ] + }, + "882": { + "op": "intc_0 // 0", + "stack_out": [ + "newAdmin#0", + "box_prefixed_key%0#0", + "box%box_extract%0#0", + "0" + ] + }, + "883": { + "op": "getbit", + "defined_out": [ + "aggregate%get_bit%0#0", + "box_prefixed_key%0#0", + "newAdmin#0" + ], + "stack_out": [ + "newAdmin#0", + "box_prefixed_key%0#0", + "aggregate%get_bit%0#0" + ] + }, + "884": { + "op": "bz arc58_pluginChangeAdmin_bool_false@4", + "stack_out": [ + "newAdmin#0", + "box_prefixed_key%0#0" + ] + }, + "887": { + "op": "intc_1 // 1", + "defined_out": [ + "and_result%0#0", + "box_prefixed_key%0#0", + "newAdmin#0" + ], + "stack_out": [ + "newAdmin#0", + "box_prefixed_key%0#0", + "and_result%0#0" + ] + }, + "888": { + "error": "This plugin does not have admin privileges", + "block": "arc58_pluginChangeAdmin_bool_merge@5", + "stack_in": [ + "newAdmin#0", + "box_prefixed_key%0#0", + "and_result%0#0" + ], + "op": "assert // This plugin does not have admin privileges", + "defined_out": [], + "stack_out": [ + "newAdmin#0", + "box_prefixed_key%0#0" + ] + }, + "889": { + "op": "bytec_2 // \"admin\"", + "defined_out": [ + "\"admin\"" + ], + "stack_out": [ + "newAdmin#0", + "box_prefixed_key%0#0", + "\"admin\"" + ] + }, + "890": { + "op": "dig 2", + "defined_out": [ + "\"admin\"", + "newAdmin#0" + ], + "stack_out": [ + "newAdmin#0", + "box_prefixed_key%0#0", + "\"admin\"", + "newAdmin#0" + ] + }, + "892": { + "op": "app_global_put", + "stack_out": [ + "newAdmin#0", + "box_prefixed_key%0#0" + ] + }, + "893": { + "op": "dup", + "defined_out": [ + "box_prefixed_key%0#0", + "newAdmin#0" + ], + "stack_out": [ + "newAdmin#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0" + ] + }, + "894": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "box_prefixed_key%0#0", + "newAdmin#0" + ], + "stack_out": [ + "newAdmin#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "8" + ] + }, + "895": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "8", + "box_prefixed_key%0#0", + "newAdmin#0" + ], + "stack_out": [ + "newAdmin#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "8", + "1" + ] + }, + "896": { + "op": "box_extract", + "defined_out": [ + "box%box_extract%1#0", + "box_prefixed_key%0#0", + "newAdmin#0" + ], + "stack_out": [ + "newAdmin#0", + "box_prefixed_key%0#0", + "box%box_extract%1#0" + ] + }, + "897": { + "op": "bytec 15 // 0x01", + "defined_out": [ + "0x01", + "box%box_extract%1#0", + "box_prefixed_key%0#0", + "newAdmin#0" + ], + "stack_out": [ + "newAdmin#0", + "box_prefixed_key%0#0", + "box%box_extract%1#0", + "0x01" + ] + }, + "899": { + "op": "==", + "defined_out": [ + "box_prefixed_key%0#0", + "newAdmin#0", + "tmp%5#0" + ], + "stack_out": [ + "newAdmin#0", + "box_prefixed_key%0#0", + "tmp%5#0" + ] + }, + "900": { + "op": "bz arc58_pluginChangeAdmin_after_if_else@7", + "stack_out": [ + "newAdmin#0", + "box_prefixed_key%0#0" + ] + }, + "903": { + "op": "bytec_3 // \"last_user_interaction\"", + "defined_out": [ + "\"last_user_interaction\"", + "box_prefixed_key%0#0", + "newAdmin#0" + ], + "stack_out": [ + "newAdmin#0", + "box_prefixed_key%0#0", + "\"last_user_interaction\"" + ] + }, + "904": { + "op": "global LatestTimestamp", + "defined_out": [ + "\"last_user_interaction\"", + "box_prefixed_key%0#0", + "newAdmin#0", + "tmp%0#2" + ], + "stack_out": [ + "newAdmin#0", + "box_prefixed_key%0#0", + "\"last_user_interaction\"", + "tmp%0#2" + ] + }, + "906": { + "op": "app_global_put", + "stack_out": [ + "newAdmin#0", + "box_prefixed_key%0#0" + ] + }, + "907": { + "block": "arc58_pluginChangeAdmin_after_if_else@7", + "stack_in": [ + "newAdmin#0", + "box_prefixed_key%0#0" + ], + "op": "bytec 6 // \"last_change\"", + "defined_out": [ + "\"last_change\"" + ], + "stack_out": [ + "newAdmin#0", + "box_prefixed_key%0#0", + "\"last_change\"" + ] + }, + "909": { + "op": "global LatestTimestamp", + "defined_out": [ + "\"last_change\"", + "tmp%0#2" + ], + "stack_out": [ + "newAdmin#0", + "box_prefixed_key%0#0", + "\"last_change\"", + "tmp%0#2" + ] + }, + "911": { + "op": "app_global_put", + "stack_out": [ + "newAdmin#0", + "box_prefixed_key%0#0" + ] + }, + "912": { + "op": "intc_1 // 1", + "defined_out": [ + "1" + ], + "stack_out": [ + "newAdmin#0", + "box_prefixed_key%0#0", + "1" + ] + }, + "913": { + "op": "return", + "stack_out": [ + "newAdmin#0", + "box_prefixed_key%0#0" + ] + }, + "914": { + "block": "arc58_pluginChangeAdmin_bool_false@4", + "stack_in": [ + "newAdmin#0", + "box_prefixed_key%0#0" + ], + "op": "intc_0 // 0", + "defined_out": [ + "and_result%0#0" + ], + "stack_out": [ + "newAdmin#0", + "box_prefixed_key%0#0", + "and_result%0#0" + ] + }, + "915": { + "op": "b arc58_pluginChangeAdmin_bool_merge@5" + }, + "918": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_getAdmin[routing]", + "params": {}, + "block": "arc58_getAdmin", + "stack_in": [], + "op": "intc_0 // 0", + "defined_out": [ + "0" + ], + "stack_out": [ + "0" + ] + }, + "919": { + "op": "bytec_2 // \"admin\"", + "defined_out": [ + "\"admin\"", + "0" + ], + "stack_out": [ + "0", + "\"admin\"" + ] + }, + "920": { + "op": "app_global_get_ex", + "defined_out": [ + "maybe_exists%0#0", + "maybe_value%0#0" + ], + "stack_out": [ + "maybe_value%0#0", + "maybe_exists%0#0" + ] + }, + "921": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "maybe_value%0#0" + ] + }, + "922": { + "op": "bytec 7 // 0x151f7c75", + "defined_out": [ + "0x151f7c75", + "maybe_value%0#0" + ], + "stack_out": [ + "maybe_value%0#0", + "0x151f7c75" + ] + }, + "924": { + "op": "swap", + "stack_out": [ + "0x151f7c75", + "maybe_value%0#0" + ] + }, + "925": { + "op": "concat", + "defined_out": [ + "tmp%1#0" + ], + "stack_out": [ + "tmp%1#0" + ] + }, + "926": { + "op": "log", + "stack_out": [] + }, + "927": { + "op": "intc_1 // 1", + "defined_out": [ + "1" + ], + "stack_out": [ + "1" + ] + }, + "928": { + "op": "return", + "stack_out": [] + }, + "929": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_verifyAuthAddress[routing]", + "params": {}, + "block": "arc58_verifyAuthAddress", + "stack_in": [], + "op": "intc_0 // 0", + "defined_out": [ + "0" + ], + "stack_out": [ + "0" + ] + }, + "930": { + "op": "bytec 11 // \"spending_address\"", + "defined_out": [ + "\"spending_address\"", + "0" + ], + "stack_out": [ + "0", + "\"spending_address\"" + ] + }, + "932": { + "op": "app_global_get_ex", + "defined_out": [ + "maybe_exists%0#0", + "maybe_value%0#0" + ], + "stack_out": [ + "maybe_value%0#0", + "maybe_exists%0#0" + ] + }, + "933": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "maybe_value%0#0" + ] + }, + "934": { + "op": "dup", + "defined_out": [ + "maybe_value%0#0", + "maybe_value%0#0 (copy)" + ], + "stack_out": [ + "maybe_value%0#0", + "maybe_value%0#0 (copy)" + ] + }, + "935": { + "op": "acct_params_get AcctAuthAddr", + "defined_out": [ + "check%0#0", + "maybe_value%0#0", + "value%0#0" + ], + "stack_out": [ + "maybe_value%0#0", + "value%0#0", + "check%0#0" + ] + }, + "937": { + "op": "swap", + "stack_out": [ + "maybe_value%0#0", + "check%0#0", + "value%0#0" + ] + }, + "938": { + "op": "cover 2", + "defined_out": [ + "check%0#0", + "maybe_value%0#0", + "value%0#0" + ], + "stack_out": [ + "value%0#0", + "maybe_value%0#0", + "check%0#0" + ] + }, + "940": { + "error": "account funded", + "op": "assert // account funded", + "stack_out": [ + "value%0#0", + "maybe_value%0#0" + ] + }, + "941": { + "op": "intc_0 // 0", + "stack_out": [ + "value%0#0", + "maybe_value%0#0", + "0" + ] + }, + "942": { + "op": "bytec_0 // \"controlled_address\"", + "defined_out": [ + "\"controlled_address\"", + "0", + "maybe_value%0#0", + "value%0#0" + ], + "stack_out": [ + "value%0#0", + "maybe_value%0#0", + "0", + "\"controlled_address\"" + ] + }, + "943": { + "op": "app_global_get_ex", + "defined_out": [ + "maybe_exists%1#0", + "maybe_value%0#0", + "maybe_value%1#0", + "value%0#0" + ], + "stack_out": [ + "value%0#0", + "maybe_value%0#0", + "maybe_value%1#0", + "maybe_exists%1#0" + ] + }, + "944": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "value%0#0", + "maybe_value%0#0", + "maybe_value%1#0" + ] + }, + "945": { + "op": "==", + "defined_out": [ + "tmp%0#1", + "value%0#0" + ], + "stack_out": [ + "value%0#0", + "tmp%0#1" + ] + }, + "946": { + "op": "bz arc58_verifyAuthAddress_ternary_false@4", + "stack_out": [ + "value%0#0" + ] + }, + "949": { + "op": "intc_0 // 0", + "stack_out": [ + "value%0#0", + "0" + ] + }, + "950": { + "op": "bytec_0 // \"controlled_address\"", + "stack_out": [ + "value%0#0", + "0", + "\"controlled_address\"" + ] + }, + "951": { + "op": "app_global_get_ex", + "defined_out": [ + "maybe_exists%2#0", + "maybe_value%2#0", + "value%0#0" + ], + "stack_out": [ + "value%0#0", + "maybe_value%2#0", + "maybe_exists%2#0" + ] + }, + "952": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "value%0#0", + "maybe_value%2#0" + ] + }, + "953": { + "op": "global CurrentApplicationAddress", + "defined_out": [ + "maybe_value%2#0", + "tmp%1#1", + "value%0#0" + ], + "stack_out": [ + "value%0#0", + "maybe_value%2#0", + "tmp%1#1" + ] + }, + "955": { + "op": "==", + "defined_out": [ + "tmp%2#1", + "value%0#0" + ], + "stack_out": [ + "value%0#0", + "tmp%2#1" + ] + }, + "956": { + "op": "bz arc58_verifyAuthAddress_ternary_false@4", + "stack_out": [ + "value%0#0" + ] + }, + "959": { + "op": "global ZeroAddress", + "defined_out": [ + "ternary_result%0#0", + "value%0#0" + ], + "stack_out": [ + "value%0#0", + "ternary_result%0#0" + ] + }, + "961": { + "block": "arc58_verifyAuthAddress_ternary_merge@5", + "stack_in": [ + "value%0#0", + "ternary_result%0#0" + ], + "op": "dig 1", + "defined_out": [ + "value%0#0" + ], + "stack_out": [ + "value%0#0", + "ternary_result%0#0", + "value%0#0" + ] + }, + "963": { + "op": "==", + "defined_out": [ + "tmp%1#0", + "value%0#0" + ], + "stack_out": [ + "value%0#0", + "tmp%1#0" + ] + }, + "964": { + "op": "assert", + "stack_out": [ + "value%0#0" + ] + }, + "965": { + "op": "bytec 11 // \"spending_address\"", + "defined_out": [ + "\"spending_address\"", + "value%0#0" + ], + "stack_out": [ + "value%0#0", + "\"spending_address\"" + ] + }, + "967": { + "op": "global ZeroAddress", + "defined_out": [ + "\"spending_address\"", + "tmp%2#0", + "value%0#0" + ], + "stack_out": [ + "value%0#0", + "\"spending_address\"", + "tmp%2#0" + ] + }, + "969": { + "op": "app_global_put", + "stack_out": [ + "value%0#0" + ] + }, + "970": { + "op": "global CurrentApplicationAddress", + "defined_out": [ + "tmp%3#0", + "value%0#0" + ], + "stack_out": [ + "value%0#0", + "tmp%3#0" + ] + }, + "972": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "tmp%3#0", + "value%0#0" + ], + "stack_out": [ + "value%0#0", + "tmp%3#0", + "0" + ] + }, + "973": { + "op": "itob", + "defined_out": [ + "aggregate%val_as_bytes%0#0", + "tmp%3#0", + "value%0#0" + ], + "stack_out": [ + "value%0#0", + "tmp%3#0", + "aggregate%val_as_bytes%0#0" + ] + }, + "974": { + "op": "swap", + "stack_out": [ + "value%0#0", + "aggregate%val_as_bytes%0#0", + "tmp%3#0" + ] + }, + "975": { + "op": "concat", + "defined_out": [ + "aggregate%head%1#0", + "value%0#0" + ], + "stack_out": [ + "value%0#0", + "aggregate%head%1#0" + ] + }, + "976": { + "op": "pushbytes 0x002a0000", + "defined_out": [ + "0x002a0000", + "aggregate%head%1#0", + "value%0#0" + ], + "stack_out": [ + "value%0#0", + "aggregate%head%1#0", + "0x002a0000" + ] + }, + "982": { + "op": "concat", + "defined_out": [ + "aggregate%concat%0#0", + "value%0#0" + ], + "stack_out": [ + "value%0#0", + "aggregate%concat%0#0" + ] + }, + "983": { + "op": "bytec 19 // \"current_plugin\"", + "defined_out": [ + "\"current_plugin\"", + "aggregate%concat%0#0", + "value%0#0" + ], + "stack_out": [ + "value%0#0", + "aggregate%concat%0#0", + "\"current_plugin\"" + ] + }, + "985": { + "op": "swap", + "stack_out": [ + "value%0#0", + "\"current_plugin\"", + "aggregate%concat%0#0" + ] + }, + "986": { + "op": "app_global_put", + "stack_out": [ + "value%0#0" + ] + }, + "987": { + "op": "bytec 17 // \"rekey_index\"", + "defined_out": [ + "\"rekey_index\"", + "value%0#0" + ], + "stack_out": [ + "value%0#0", + "\"rekey_index\"" + ] + }, + "989": { + "op": "intc_0 // 0", + "stack_out": [ + "value%0#0", + "\"rekey_index\"", + "0" + ] + }, + "990": { + "op": "app_global_put", + "stack_out": [ + "value%0#0" + ] + }, + "991": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "value%0#0" + ], + "stack_out": [ + "value%0#0", + "1" + ] + }, + "992": { + "op": "return", + "stack_out": [ + "value%0#0" + ] + }, + "993": { + "block": "arc58_verifyAuthAddress_ternary_false@4", + "stack_in": [ + "value%0#0" + ], + "op": "global CurrentApplicationAddress", + "defined_out": [ + "ternary_result%0#0" + ], + "stack_out": [ + "value%0#0", + "ternary_result%0#0" + ] + }, + "995": { + "op": "b arc58_verifyAuthAddress_ternary_merge@5" + }, + "998": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyTo[routing]", + "params": {}, + "block": "arc58_rekeyTo", + "stack_in": [], + "op": "bytec_1 // \"\"", + "stack_out": [ + "i#0" + ] + }, + "999": { + "op": "dup", + "stack_out": [ + "i#0", + "rekeysBack#0" + ] + }, + "1000": { + "op": "txna ApplicationArgs 1", + "defined_out": [ + "address#0" + ], + "stack_out": [ + "i#0", + "rekeysBack#0", + "address#0" + ] + }, + "1003": { + "op": "dup", + "defined_out": [ + "address#0", + "address#0 (copy)" + ], + "stack_out": [ + "i#0", + "rekeysBack#0", + "address#0", + "address#0 (copy)" + ] + }, + "1004": { + "op": "len", + "defined_out": [ + "address#0", + "len%0#0" + ], + "stack_out": [ + "i#0", + "rekeysBack#0", + "address#0", + "len%0#0" + ] + }, + "1005": { + "op": "pushint 32 // 32", + "defined_out": [ + "32", + "address#0", + "len%0#0" + ], + "stack_out": [ + "i#0", + "rekeysBack#0", + "address#0", + "len%0#0", + "32" + ] + }, + "1007": { + "op": "==", + "defined_out": [ + "address#0", + "eq%0#0" + ], + "stack_out": [ + "i#0", + "rekeysBack#0", + "address#0", + "eq%0#0" + ] + }, + "1008": { + "error": "invalid number of bytes for uint8[32]", + "op": "assert // invalid number of bytes for uint8[32]", + "stack_out": [ + "i#0", + "rekeysBack#0", + "address#0" + ] + }, + "1009": { + "op": "txna ApplicationArgs 2", + "defined_out": [ + "address#0", + "tmp%1#0" + ], + "stack_out": [ + "i#0", + "rekeysBack#0", + "address#0", + "tmp%1#0" + ] + }, + "1012": { + "op": "dup", + "defined_out": [ + "address#0", + "tmp%1#0", + "tmp%1#0 (copy)" + ], + "stack_out": [ + "i#0", + "rekeysBack#0", + "address#0", + "tmp%1#0", + "tmp%1#0 (copy)" + ] + }, + "1013": { + "op": "len", + "defined_out": [ + "address#0", + "len%1#0", + "tmp%1#0" + ], + "stack_out": [ + "i#0", + "rekeysBack#0", + "address#0", + "tmp%1#0", + "len%1#0" + ] + }, + "1014": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "address#0", + "len%1#0", + "tmp%1#0" + ], + "stack_out": [ + "i#0", + "rekeysBack#0", + "address#0", + "tmp%1#0", + "len%1#0", + "1" + ] + }, + "1015": { + "op": "==", + "defined_out": [ + "address#0", + "eq%1#0", + "tmp%1#0" + ], + "stack_out": [ + "i#0", + "rekeysBack#0", + "address#0", + "tmp%1#0", + "eq%1#0" + ] + }, + "1016": { + "error": "invalid number of bytes for bool8", + "op": "assert // invalid number of bytes for bool8", + "stack_out": [ + "i#0", + "rekeysBack#0", + "address#0", + "tmp%1#0" + ] + }, + "1017": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "address#0", + "tmp%1#0" + ], + "stack_out": [ + "i#0", + "rekeysBack#0", + "address#0", + "tmp%1#0", + "0" + ] + }, + "1018": { + "op": "getbit", + "defined_out": [ + "address#0", + "flash#0" + ], + "stack_out": [ + "i#0", + "rekeysBack#0", + "address#0", + "flash#0" + ] + }, + "1019": { + "op": "txn Sender", + "defined_out": [ + "address#0", + "flash#0", + "tmp%0#1" + ], + "stack_out": [ + "i#0", + "rekeysBack#0", + "address#0", + "flash#0", + "tmp%0#1" + ] + }, + "1021": { + "op": "intc_0 // 0", + "stack_out": [ + "i#0", + "rekeysBack#0", + "address#0", + "flash#0", + "tmp%0#1", + "0" + ] + }, + "1022": { + "op": "bytec_2 // \"admin\"", + "defined_out": [ + "\"admin\"", + "0", + "address#0", + "flash#0", + "tmp%0#1" + ], + "stack_out": [ + "i#0", + "rekeysBack#0", + "address#0", + "flash#0", + "tmp%0#1", + "0", + "\"admin\"" + ] + }, + "1023": { + "op": "app_global_get_ex", + "defined_out": [ + "address#0", + "flash#0", + "maybe_exists%0#0", + "maybe_value%0#0", + "tmp%0#1" + ], + "stack_out": [ + "i#0", + "rekeysBack#0", + "address#0", + "flash#0", + "tmp%0#1", + "maybe_value%0#0", + "maybe_exists%0#0" + ] + }, + "1024": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "i#0", + "rekeysBack#0", + "address#0", + "flash#0", + "tmp%0#1", + "maybe_value%0#0" + ] + }, + "1025": { + "op": "==", + "defined_out": [ + "address#0", + "flash#0", + "tmp%1#1" + ], + "stack_out": [ + "i#0", + "rekeysBack#0", + "address#0", + "flash#0", + "tmp%1#1" + ] + }, + "1026": { + "error": "admin only", + "op": "assert // admin only", + "stack_out": [ + "i#0", + "rekeysBack#0", + "address#0", + "flash#0" + ] + }, + "1027": { + "op": "itxn_begin" + }, + "1028": { + "op": "intc_0 // 0", + "stack_out": [ + "i#0", + "rekeysBack#0", + "address#0", + "flash#0", + "0" + ] + }, + "1029": { + "op": "bytec_0 // \"controlled_address\"", + "defined_out": [ + "\"controlled_address\"", + "0", + "address#0", + "flash#0" + ], + "stack_out": [ + "i#0", + "rekeysBack#0", + "address#0", + "flash#0", + "0", + "\"controlled_address\"" + ] + }, + "1030": { + "op": "app_global_get_ex", + "defined_out": [ + "address#0", + "flash#0", + "maybe_exists%1#0", + "maybe_value%1#0" + ], + "stack_out": [ + "i#0", + "rekeysBack#0", + "address#0", + "flash#0", + "maybe_value%1#0", + "maybe_exists%1#0" + ] + }, + "1031": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "i#0", + "rekeysBack#0", + "address#0", + "flash#0", + "maybe_value%1#0" + ] + }, + "1032": { + "op": "pushbytes \"rekeying abstracted account\"", + "defined_out": [ + "\"rekeying abstracted account\"", + "address#0", + "flash#0", + "maybe_value%1#0" + ], + "stack_out": [ + "i#0", + "rekeysBack#0", + "address#0", + "flash#0", + "maybe_value%1#0", + "\"rekeying abstracted account\"" + ] + }, + "1061": { + "op": "itxn_field Note", + "stack_out": [ + "i#0", + "rekeysBack#0", + "address#0", + "flash#0", + "maybe_value%1#0" + ] + }, + "1063": { + "op": "dig 2", + "stack_out": [ + "i#0", + "rekeysBack#0", + "address#0", + "flash#0", + "maybe_value%1#0", + "address#0 (copy)" + ] + }, + "1065": { + "op": "itxn_field RekeyTo", + "stack_out": [ + "i#0", + "rekeysBack#0", + "address#0", + "flash#0", + "maybe_value%1#0" + ] + }, + "1067": { + "op": "uncover 2", + "stack_out": [ + "i#0", + "rekeysBack#0", + "flash#0", + "maybe_value%1#0", + "address#0" + ] + }, + "1069": { + "op": "itxn_field Receiver", + "stack_out": [ + "i#0", + "rekeysBack#0", + "flash#0", + "maybe_value%1#0" + ] + }, + "1071": { + "op": "itxn_field Sender", + "stack_out": [ + "i#0", + "rekeysBack#0", + "flash#0" + ] + }, + "1073": { + "op": "intc_1 // 1", + "stack_out": [ + "i#0", + "rekeysBack#0", + "flash#0", + "1" + ] + }, + "1074": { + "op": "itxn_field TypeEnum", + "stack_out": [ + "i#0", + "rekeysBack#0", + "flash#0" + ] + }, + "1076": { + "op": "intc_0 // 0", + "stack_out": [ + "i#0", + "rekeysBack#0", + "flash#0", + "0" + ] + }, + "1077": { + "op": "itxn_field Fee", + "stack_out": [ + "i#0", + "rekeysBack#0", + "flash#0" + ] + }, + "1079": { + "op": "itxn_submit" + }, + "1080": { + "op": "bz arc58_rekeyTo_after_if_else@4", + "stack_out": [ + "i#0", + "rekeysBack#0" + ] + }, + "1083": { + "op": "intc_0 // 0", + "defined_out": [ + "rekeysBack#0" + ], + "stack_out": [ + "i#0", + "rekeysBack#0", + "rekeysBack#0" + ] + }, + "1084": { + "op": "bury 1", + "defined_out": [ + "rekeysBack#0" + ], + "stack_out": [ + "i#0", + "rekeysBack#0" + ] + }, + "1086": { + "op": "txn GroupIndex", + "defined_out": [ + "rekeysBack#0", + "tmp%0#2" + ], + "stack_out": [ + "i#0", + "rekeysBack#0", + "tmp%0#2" + ] + }, + "1088": { + "op": "intc_1 // 1", + "stack_out": [ + "i#0", + "rekeysBack#0", + "tmp%0#2", + "1" + ] + }, + "1089": { + "op": "+", + "defined_out": [ + "i#0", + "rekeysBack#0" + ], + "stack_out": [ + "i#0", + "rekeysBack#0", + "i#0" + ] + }, + "1090": { + "op": "bury 2", + "defined_out": [ + "i#0", + "rekeysBack#0" + ], + "stack_out": [ + "i#0", + "rekeysBack#0" + ] + }, + "1092": { + "block": "arc58_rekeyTo_while_top@6", + "stack_in": [ + "i#0", + "rekeysBack#0" + ], + "op": "dig 1", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "i#0", + "rekeysBack#0", + "i#0" + ] + }, + "1094": { + "op": "global GroupSize", + "defined_out": [ + "i#0", + "tmp%2#0" + ], + "stack_out": [ + "i#0", + "rekeysBack#0", + "i#0", + "tmp%2#0" + ] + }, + "1096": { + "op": "<", + "defined_out": [ + "i#0", + "tmp%3#0" + ], + "stack_out": [ + "i#0", + "rekeysBack#0", + "tmp%3#0" + ] + }, + "1097": { + "op": "bz arc58_rekeyTo_block@11", + "stack_out": [ + "i#0", + "rekeysBack#0" + ] + }, + "1100": { + "op": "dig 1", + "stack_out": [ + "i#0", + "rekeysBack#0", + "i#0" + ] + }, + "1102": { + "callsub": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.txnRekeysBack", + "op": "callsub txnRekeysBack", + "defined_out": [ + "i#0", + "tmp%4#0" + ], + "stack_out": [ + "i#0", + "rekeysBack#0", + "tmp%4#0" + ] + }, + "1105": { + "op": "bz arc58_rekeyTo_after_if_else@9", + "stack_out": [ + "i#0", + "rekeysBack#0" + ] + }, + "1108": { + "op": "intc_1 // 1", + "defined_out": [ + "i#0", + "rekeysBack#0" + ], + "stack_out": [ + "i#0", + "rekeysBack#0", + "rekeysBack#0" + ] + }, + "1109": { + "op": "bury 1", + "defined_out": [ + "i#0", + "rekeysBack#0" + ], + "stack_out": [ + "i#0", + "rekeysBack#0" + ] + }, + "1111": { + "block": "arc58_rekeyTo_block@11", + "stack_in": [ + "i#0", + "rekeysBack#0" + ], + "op": "dup", + "defined_out": [ + "rekeysBack#0" + ], + "stack_out": [ + "i#0", + "rekeysBack#0", + "rekeysBack#0" + ] + }, + "1112": { + "error": "missing rekey back", + "op": "assert // missing rekey back", + "stack_out": [ + "i#0", + "rekeysBack#0" + ] + }, + "1113": { + "block": "arc58_rekeyTo_after_if_else@4", + "stack_in": [ + "i#0", + "rekeysBack#0" + ], + "op": "bytec_3 // \"last_user_interaction\"", + "defined_out": [ + "\"last_user_interaction\"" + ], + "stack_out": [ + "i#0", + "rekeysBack#0", + "\"last_user_interaction\"" + ] + }, + "1114": { + "op": "global LatestTimestamp", + "defined_out": [ + "\"last_user_interaction\"", + "tmp%0#2" + ], + "stack_out": [ + "i#0", + "rekeysBack#0", + "\"last_user_interaction\"", + "tmp%0#2" + ] + }, + "1116": { + "op": "app_global_put", + "stack_out": [ + "i#0", + "rekeysBack#0" + ] + }, + "1117": { + "op": "intc_1 // 1", + "defined_out": [ + "1" + ], + "stack_out": [ + "i#0", + "rekeysBack#0", + "1" + ] + }, + "1118": { + "op": "return", + "stack_out": [ + "i#0", + "rekeysBack#0" + ] + }, + "1119": { + "block": "arc58_rekeyTo_after_if_else@9", + "stack_in": [ + "i#0", + "rekeysBack#0" + ], + "op": "dig 1", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "i#0", + "rekeysBack#0", + "i#0" + ] + }, + "1121": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "i#0" + ], + "stack_out": [ + "i#0", + "rekeysBack#0", + "i#0", + "1" + ] + }, + "1122": { + "op": "+", + "stack_out": [ + "i#0", + "rekeysBack#0", + "i#0" + ] + }, + "1123": { + "op": "bury 2", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "i#0", + "rekeysBack#0" + ] + }, + "1125": { + "op": "b arc58_rekeyTo_while_top@6" + }, + "1128": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_canCall[routing]", + "params": {}, + "block": "arc58_canCall", + "stack_in": [], + "op": "txna ApplicationArgs 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] + }, + "1131": { + "op": "dup", + "defined_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ] + }, + "1132": { + "op": "len", + "defined_out": [ + "len%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "len%0#0" + ] + }, + "1133": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "len%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "len%0#0", + "8" + ] + }, + "1134": { + "op": "==", + "defined_out": [ + "eq%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "eq%0#0" + ] + }, + "1135": { + "error": "invalid number of bytes for uint64", + "op": "assert // invalid number of bytes for uint64", + "stack_out": [ + "tmp%0#0" + ] + }, + "1136": { + "op": "btoi", + "defined_out": [ + "plugin#0" + ], + "stack_out": [ + "plugin#0" + ] + }, + "1137": { + "op": "txna ApplicationArgs 2", + "defined_out": [ + "plugin#0", + "tmp%2#0" + ], + "stack_out": [ + "plugin#0", + "tmp%2#0" + ] + }, + "1140": { + "op": "dup", + "defined_out": [ + "plugin#0", + "tmp%2#0", + "tmp%2#0 (copy)" + ], + "stack_out": [ + "plugin#0", + "tmp%2#0", + "tmp%2#0 (copy)" + ] + }, + "1141": { + "op": "len", + "defined_out": [ + "len%1#0", + "plugin#0", + "tmp%2#0" + ], + "stack_out": [ + "plugin#0", + "tmp%2#0", + "len%1#0" + ] + }, + "1142": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "len%1#0", + "plugin#0", + "tmp%2#0" + ], + "stack_out": [ + "plugin#0", + "tmp%2#0", + "len%1#0", + "1" + ] + }, + "1143": { + "op": "==", + "defined_out": [ + "eq%1#0", + "plugin#0", + "tmp%2#0" + ], + "stack_out": [ + "plugin#0", + "tmp%2#0", + "eq%1#0" + ] + }, + "1144": { + "error": "invalid number of bytes for bool8", + "op": "assert // invalid number of bytes for bool8", + "stack_out": [ + "plugin#0", + "tmp%2#0" + ] + }, + "1145": { + "op": "intc_0 // 0", + "stack_out": [ + "plugin#0", + "tmp%2#0", + "0" + ] + }, + "1146": { + "op": "getbit", + "defined_out": [ + "global#0", + "plugin#0" + ], + "stack_out": [ + "plugin#0", + "global#0" + ] + }, + "1147": { + "op": "txna ApplicationArgs 3" + }, + "1150": { + "op": "dup", + "defined_out": [ + "address#0", + "global#0", + "plugin#0" + ], + "stack_out": [ + "plugin#0", + "global#0", + "address#0", + "address#0" + ] + }, + "1151": { + "op": "cover 2", + "defined_out": [ + "address#0", + "global#0", + "plugin#0" + ], + "stack_out": [ + "plugin#0", + "address#0", + "global#0", + "address#0" + ] + }, + "1153": { + "op": "len", + "defined_out": [ + "address#0", + "global#0", + "len%2#0", + "plugin#0" + ], + "stack_out": [ + "plugin#0", + "address#0", + "global#0", + "len%2#0" + ] + }, + "1154": { + "op": "pushint 32 // 32", + "defined_out": [ + "32", + "address#0", + "global#0", + "len%2#0", + "plugin#0" + ], + "stack_out": [ + "plugin#0", + "address#0", + "global#0", + "len%2#0", + "32" + ] + }, + "1156": { + "op": "==", + "defined_out": [ + "address#0", + "eq%2#0", + "global#0", + "plugin#0" + ], + "stack_out": [ + "plugin#0", + "address#0", + "global#0", + "eq%2#0" + ] + }, + "1157": { + "error": "invalid number of bytes for uint8[32]", + "op": "assert // invalid number of bytes for uint8[32]", + "stack_out": [ + "plugin#0", + "address#0", + "global#0" + ] + }, + "1158": { + "op": "txna ApplicationArgs 4", + "defined_out": [ + "address#0", + "global#0", + "plugin#0", + "tmp%5#0" + ], + "stack_out": [ + "plugin#0", + "address#0", + "global#0", + "tmp%5#0" + ] + }, + "1161": { + "op": "dup", + "defined_out": [ + "address#0", + "global#0", + "plugin#0", + "tmp%5#0", + "tmp%5#0 (copy)" + ], + "stack_out": [ + "plugin#0", + "address#0", + "global#0", + "tmp%5#0", + "tmp%5#0 (copy)" + ] + }, + "1162": { + "op": "intc_0 // 0", + "stack_out": [ + "plugin#0", + "address#0", + "global#0", + "tmp%5#0", + "tmp%5#0 (copy)", + "0" + ] + }, + "1163": { + "op": "extract_uint16", + "defined_out": [ + "address#0", + "aggregate%array_length%0#0", + "global#0", + "plugin#0", + "tmp%5#0" + ], + "stack_out": [ + "plugin#0", + "address#0", + "global#0", + "tmp%5#0", + "aggregate%array_length%0#0" + ] + }, + "1164": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "address#0", + "aggregate%array_length%0#0", + "global#0", + "plugin#0", + "tmp%5#0" + ], + "stack_out": [ + "plugin#0", + "address#0", + "global#0", + "tmp%5#0", + "aggregate%array_length%0#0", + "2" + ] + }, + "1165": { + "op": "+", + "defined_out": [ + "add%0#0", + "address#0", + "global#0", + "plugin#0", + "tmp%5#0" + ], + "stack_out": [ + "plugin#0", + "address#0", + "global#0", + "tmp%5#0", + "add%0#0" + ] + }, + "1166": { + "op": "dig 1", + "stack_out": [ + "plugin#0", + "address#0", + "global#0", + "tmp%5#0", + "add%0#0", + "tmp%5#0 (copy)" + ] + }, + "1168": { + "op": "len", + "defined_out": [ + "add%0#0", + "address#0", + "global#0", + "len%3#0", + "plugin#0", + "tmp%5#0" + ], + "stack_out": [ + "plugin#0", + "address#0", + "global#0", + "tmp%5#0", + "add%0#0", + "len%3#0" + ] + }, + "1169": { + "op": "==", + "defined_out": [ + "address#0", + "eq%3#0", + "global#0", + "plugin#0", + "tmp%5#0" + ], + "stack_out": [ + "plugin#0", + "address#0", + "global#0", + "tmp%5#0", + "eq%3#0" + ] + }, + "1170": { + "error": "invalid number of bytes for (len+utf8[])", + "op": "assert // invalid number of bytes for (len+utf8[])", + "stack_out": [ + "plugin#0", + "address#0", + "global#0", + "tmp%5#0" + ] + }, + "1171": { + "op": "extract 2 0", + "defined_out": [ + "address#0", + "escrow#0", + "global#0", + "plugin#0" + ], + "stack_out": [ + "plugin#0", + "address#0", + "global#0", + "escrow#0" + ] + }, + "1174": { + "op": "swap", + "defined_out": [ + "address#0", + "escrow#0", + "global#0", + "plugin#0" + ], + "stack_out": [ + "plugin#0", + "address#0", + "escrow#0", + "global#0" + ] + }, + "1175": { + "op": "txna ApplicationArgs 5" + }, + "1178": { + "op": "dup", + "defined_out": [ + "address#0", + "escrow#0", + "global#0", + "method#0", + "plugin#0" + ], + "stack_out": [ + "plugin#0", + "address#0", + "escrow#0", + "global#0", + "method#0", + "method#0" + ] + }, + "1179": { + "op": "cover 2", + "defined_out": [ + "address#0", + "escrow#0", + "global#0", + "method#0", + "plugin#0" + ], + "stack_out": [ + "plugin#0", + "address#0", + "escrow#0", + "method#0", + "global#0", + "method#0" + ] + }, + "1181": { + "op": "len", + "defined_out": [ + "address#0", + "escrow#0", + "global#0", + "len%4#0", + "method#0", + "plugin#0" + ], + "stack_out": [ + "plugin#0", + "address#0", + "escrow#0", + "method#0", + "global#0", + "len%4#0" + ] + }, + "1182": { + "op": "pushint 4 // 4", + "defined_out": [ + "4", + "address#0", + "escrow#0", + "global#0", + "len%4#0", + "method#0", + "plugin#0" + ], + "stack_out": [ + "plugin#0", + "address#0", + "escrow#0", + "method#0", + "global#0", + "len%4#0", + "4" + ] + }, + "1184": { + "op": "==", + "defined_out": [ + "address#0", + "eq%4#0", + "escrow#0", + "global#0", + "method#0", + "plugin#0" + ], + "stack_out": [ + "plugin#0", + "address#0", + "escrow#0", + "method#0", + "global#0", + "eq%4#0" + ] + }, + "1185": { + "error": "invalid number of bytes for uint8[4]", + "op": "assert // invalid number of bytes for uint8[4]", + "stack_out": [ + "plugin#0", + "address#0", + "escrow#0", + "method#0", + "global#0" + ] + }, + "1186": { + "op": "bz arc58_canCall_after_if_else@3", + "stack_out": [ + "plugin#0", + "address#0", + "escrow#0", + "method#0" + ] + }, + "1189": { + "op": "dig 3", + "stack_out": [ + "plugin#0", + "address#0", + "escrow#0", + "method#0", + "plugin#0" + ] + }, + "1191": { + "op": "global ZeroAddress", + "defined_out": [ + "address#0", + "escrow#0", + "method#0", + "plugin#0", + "tmp%0#1" + ], + "stack_out": [ + "plugin#0", + "address#0", + "escrow#0", + "method#0", + "plugin#0", + "tmp%0#1" + ] + }, + "1193": { + "op": "dig 3", + "stack_out": [ + "plugin#0", + "address#0", + "escrow#0", + "method#0", + "plugin#0", + "tmp%0#1", + "escrow#0" + ] + }, + "1195": { + "op": "dig 3", + "stack_out": [ + "plugin#0", + "address#0", + "escrow#0", + "method#0", + "plugin#0", + "tmp%0#1", + "escrow#0", + "method#0" + ] + }, + "1197": { + "callsub": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.pluginCallAllowed", + "op": "callsub pluginCallAllowed", + "defined_out": [ + "address#0", + "escrow#0", + "method#0", + "plugin#0", + "{pluginCallAllowed}" + ], + "stack_out": [ + "plugin#0", + "address#0", + "escrow#0", + "method#0", + "{pluginCallAllowed}" + ] + }, + "1200": { + "op": "pop", + "stack_out": [ + "plugin#0", + "address#0", + "escrow#0", + "method#0" + ] + }, + "1201": { + "block": "arc58_canCall_after_if_else@3", + "stack_in": [ + "plugin#0", + "address#0", + "escrow#0", + "method#0" + ], + "op": "dig 3", + "defined_out": [ + "plugin#0" + ], + "stack_out": [ + "plugin#0", + "address#0", + "escrow#0", + "method#0", + "plugin#0" + ] + }, + "1203": { + "op": "dig 3", + "defined_out": [ + "address#0", + "plugin#0" + ], + "stack_out": [ + "plugin#0", + "address#0", + "escrow#0", + "method#0", + "plugin#0", + "address#0" + ] + }, + "1205": { + "op": "dig 3", + "defined_out": [ + "address#0", + "escrow#0", + "plugin#0" + ], + "stack_out": [ + "plugin#0", + "address#0", + "escrow#0", + "method#0", + "plugin#0", + "address#0", + "escrow#0" + ] + }, + "1207": { + "op": "dig 3", + "defined_out": [ + "address#0", + "escrow#0", + "method#0", + "plugin#0" + ], + "stack_out": [ + "plugin#0", + "address#0", + "escrow#0", + "method#0", + "plugin#0", + "address#0", + "escrow#0", + "method#0" + ] + }, + "1209": { + "callsub": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.pluginCallAllowed", + "op": "callsub pluginCallAllowed", + "defined_out": [ + "address#0", + "escrow#0", + "method#0", + "plugin#0", + "tmp%2#1" + ], + "stack_out": [ + "plugin#0", + "address#0", + "escrow#0", + "method#0", + "tmp%2#1" + ] + }, + "1212": { + "op": "bytec 9 // 0x00", + "defined_out": [ + "0x00", + "address#0", + "escrow#0", + "method#0", + "plugin#0", + "tmp%2#1" + ], + "stack_out": [ + "plugin#0", + "address#0", + "escrow#0", + "method#0", + "tmp%2#1", + "0x00" + ] + }, + "1214": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "0x00", + "address#0", + "escrow#0", + "method#0", + "plugin#0", + "tmp%2#1" + ], + "stack_out": [ + "plugin#0", + "address#0", + "escrow#0", + "method#0", + "tmp%2#1", + "0x00", + "0" + ] + }, + "1215": { + "op": "uncover 2", + "stack_out": [ + "plugin#0", + "address#0", + "escrow#0", + "method#0", + "0x00", + "0", + "tmp%2#1" + ] + }, + "1217": { + "op": "setbit", + "defined_out": [ + "address#0", + "aggregate%encoded_bool%0#0", + "escrow#0", + "method#0", + "plugin#0" + ], + "stack_out": [ + "plugin#0", + "address#0", + "escrow#0", + "method#0", + "aggregate%encoded_bool%0#0" + ] + }, + "1218": { + "op": "bytec 7 // 0x151f7c75", + "defined_out": [ + "0x151f7c75", + "address#0", + "aggregate%encoded_bool%0#0", + "escrow#0", + "method#0", + "plugin#0" + ], + "stack_out": [ + "plugin#0", + "address#0", + "escrow#0", + "method#0", + "aggregate%encoded_bool%0#0", + "0x151f7c75" + ] + }, + "1220": { + "op": "swap", + "stack_out": [ + "plugin#0", + "address#0", + "escrow#0", + "method#0", + "0x151f7c75", + "aggregate%encoded_bool%0#0" + ] + }, + "1221": { + "op": "concat", + "defined_out": [ + "address#0", + "escrow#0", + "method#0", + "plugin#0", + "tmp%11#0" + ], + "stack_out": [ + "plugin#0", + "address#0", + "escrow#0", + "method#0", + "tmp%11#0" + ] + }, + "1222": { + "op": "log", + "stack_out": [ + "plugin#0", + "address#0", + "escrow#0", + "method#0" + ] + }, + "1223": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "address#0", + "escrow#0", + "method#0", + "plugin#0" + ], + "stack_out": [ + "plugin#0", + "address#0", + "escrow#0", + "method#0", + "1" + ] + }, + "1224": { + "op": "return", + "stack_out": [ + "plugin#0", + "address#0", + "escrow#0", + "method#0" + ] + }, + "1225": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin[routing]", + "params": {}, + "block": "arc58_rekeyToPlugin", + "stack_in": [], + "op": "txna ApplicationArgs 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] + }, + "1228": { + "op": "dup", + "defined_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ] + }, + "1229": { + "op": "len", + "defined_out": [ + "len%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "len%0#0" + ] + }, + "1230": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "len%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "len%0#0", + "8" + ] + }, + "1231": { + "op": "==", + "defined_out": [ + "eq%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "eq%0#0" + ] + }, + "1232": { + "error": "invalid number of bytes for uint64", + "op": "assert // invalid number of bytes for uint64", + "stack_out": [ + "tmp%0#0" + ] + }, + "1233": { + "op": "btoi", + "defined_out": [ + "tmp%1#0" + ], + "stack_out": [ + "tmp%1#0" + ] + }, + "1234": { + "op": "txna ApplicationArgs 2", + "defined_out": [ + "tmp%1#0", + "tmp%2#0" + ], + "stack_out": [ + "tmp%1#0", + "tmp%2#0" + ] + }, + "1237": { + "op": "dup", + "defined_out": [ + "tmp%1#0", + "tmp%2#0", + "tmp%2#0 (copy)" + ], + "stack_out": [ + "tmp%1#0", + "tmp%2#0", + "tmp%2#0 (copy)" + ] + }, + "1238": { + "op": "len", + "defined_out": [ + "len%1#0", + "tmp%1#0", + "tmp%2#0" + ], + "stack_out": [ + "tmp%1#0", + "tmp%2#0", + "len%1#0" + ] + }, + "1239": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "len%1#0", + "tmp%1#0", + "tmp%2#0" + ], + "stack_out": [ + "tmp%1#0", + "tmp%2#0", + "len%1#0", + "1" + ] + }, + "1240": { + "op": "==", + "defined_out": [ + "eq%1#0", + "tmp%1#0", + "tmp%2#0" + ], + "stack_out": [ + "tmp%1#0", + "tmp%2#0", + "eq%1#0" + ] + }, + "1241": { + "error": "invalid number of bytes for bool8", + "op": "assert // invalid number of bytes for bool8", + "stack_out": [ + "tmp%1#0", + "tmp%2#0" + ] + }, + "1242": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "tmp%1#0", + "tmp%2#0" + ], + "stack_out": [ + "tmp%1#0", + "tmp%2#0", + "0" + ] + }, + "1243": { + "op": "getbit", + "defined_out": [ + "aggregate%get_bit%0#0", + "tmp%1#0" + ], + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0" + ] + }, + "1244": { + "op": "txna ApplicationArgs 3", + "defined_out": [ + "aggregate%get_bit%0#0", + "tmp%1#0", + "tmp%4#0" + ], + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0", + "tmp%4#0" + ] + }, + "1247": { + "op": "dup", + "defined_out": [ + "aggregate%get_bit%0#0", + "tmp%1#0", + "tmp%4#0", + "tmp%4#0 (copy)" + ], + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0", + "tmp%4#0", + "tmp%4#0 (copy)" + ] + }, + "1248": { + "op": "intc_0 // 0", + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0", + "tmp%4#0", + "tmp%4#0 (copy)", + "0" + ] + }, + "1249": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%0#0", + "aggregate%get_bit%0#0", + "tmp%1#0", + "tmp%4#0" + ], + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0", + "tmp%4#0", + "aggregate%array_length%0#0" + ] + }, + "1250": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "aggregate%array_length%0#0", + "aggregate%get_bit%0#0", + "tmp%1#0", + "tmp%4#0" + ], + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0", + "tmp%4#0", + "aggregate%array_length%0#0", + "2" + ] + }, + "1251": { + "op": "+", + "defined_out": [ + "add%0#0", + "aggregate%get_bit%0#0", + "tmp%1#0", + "tmp%4#0" + ], + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0", + "tmp%4#0", + "add%0#0" + ] + }, + "1252": { + "op": "dig 1", + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0", + "tmp%4#0", + "add%0#0", + "tmp%4#0 (copy)" + ] + }, + "1254": { + "op": "len", + "defined_out": [ + "add%0#0", + "aggregate%get_bit%0#0", + "len%2#0", + "tmp%1#0", + "tmp%4#0" + ], + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0", + "tmp%4#0", + "add%0#0", + "len%2#0" + ] + }, + "1255": { + "op": "==", + "defined_out": [ + "aggregate%get_bit%0#0", + "eq%2#0", + "tmp%1#0", + "tmp%4#0" + ], + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0", + "tmp%4#0", + "eq%2#0" + ] + }, + "1256": { + "error": "invalid number of bytes for (len+utf8[])", + "op": "assert // invalid number of bytes for (len+utf8[])", + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0", + "tmp%4#0" + ] + }, + "1257": { + "op": "extract 2 0", + "defined_out": [ + "aggregate%get_bit%0#0", + "tmp%1#0", + "tmp%5#0" + ], + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0", + "tmp%5#0" + ] + }, + "1260": { + "op": "txna ApplicationArgs 4", + "defined_out": [ + "aggregate%get_bit%0#0", + "tmp%1#0", + "tmp%5#0", + "tmp%6#0" + ], + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0", + "tmp%5#0", + "tmp%6#0" + ] + }, + "1263": { + "op": "dup", + "defined_out": [ + "aggregate%get_bit%0#0", + "tmp%1#0", + "tmp%5#0", + "tmp%6#0", + "tmp%6#0 (copy)" + ], + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0", + "tmp%5#0", + "tmp%6#0", + "tmp%6#0 (copy)" + ] + }, + "1264": { + "op": "intc_0 // 0", + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0", + "tmp%5#0", + "tmp%6#0", + "tmp%6#0 (copy)", + "0" + ] + }, + "1265": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%get_bit%0#0", + "tmp%1#0", + "tmp%5#0", + "tmp%6#0" + ], + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0", + "tmp%5#0", + "tmp%6#0", + "aggregate%array_length%1#0" + ] + }, + "1266": { + "op": "intc_3 // 8", + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0", + "tmp%5#0", + "tmp%6#0", + "aggregate%array_length%1#0", + "8" + ] + }, + "1267": { + "op": "*", + "defined_out": [ + "aggregate%get_bit%0#0", + "mul%1#0", + "tmp%1#0", + "tmp%5#0", + "tmp%6#0" + ], + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0", + "tmp%5#0", + "tmp%6#0", + "mul%1#0" + ] + }, + "1268": { + "op": "intc_2 // 2", + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0", + "tmp%5#0", + "tmp%6#0", + "mul%1#0", + "2" + ] + }, + "1269": { + "op": "+", + "defined_out": [ + "add%1#0", + "aggregate%get_bit%0#0", + "tmp%1#0", + "tmp%5#0", + "tmp%6#0" + ], + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0", + "tmp%5#0", + "tmp%6#0", + "add%1#0" + ] + }, + "1270": { + "op": "dig 1", + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0", + "tmp%5#0", + "tmp%6#0", + "add%1#0", + "tmp%6#0 (copy)" + ] + }, + "1272": { + "op": "len", + "defined_out": [ + "add%1#0", + "aggregate%get_bit%0#0", + "len%3#0", + "tmp%1#0", + "tmp%5#0", + "tmp%6#0" + ], + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0", + "tmp%5#0", + "tmp%6#0", + "add%1#0", + "len%3#0" + ] + }, + "1273": { + "op": "==", + "defined_out": [ + "aggregate%get_bit%0#0", + "eq%3#0", + "tmp%1#0", + "tmp%5#0", + "tmp%6#0" + ], + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0", + "tmp%5#0", + "tmp%6#0", + "eq%3#0" + ] + }, + "1274": { + "error": "invalid number of bytes for (len+uint64[])", + "op": "assert // invalid number of bytes for (len+uint64[])", + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0", + "tmp%5#0", + "tmp%6#0" + ] + }, + "1275": { + "op": "txna ApplicationArgs 5", + "defined_out": [ + "aggregate%get_bit%0#0", + "tmp%1#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0" + ], + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0" + ] + }, + "1278": { + "op": "dup", + "defined_out": [ + "aggregate%get_bit%0#0", + "tmp%1#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "tmp%7#0 (copy)" + ], + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "tmp%7#0 (copy)" + ] + }, + "1279": { + "op": "intc_0 // 0", + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "tmp%7#0 (copy)", + "0" + ] + }, + "1280": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%2#0", + "aggregate%get_bit%0#0", + "tmp%1#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0" + ], + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "aggregate%array_length%2#0" + ] + }, + "1281": { + "op": "pushint 16 // 16", + "defined_out": [ + "16", + "aggregate%array_length%2#0", + "aggregate%get_bit%0#0", + "tmp%1#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0" + ], + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "aggregate%array_length%2#0", + "16" + ] + }, + "1283": { + "op": "*", + "defined_out": [ + "aggregate%get_bit%0#0", + "mul%2#0", + "tmp%1#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0" + ], + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "mul%2#0" + ] + }, + "1284": { + "op": "intc_2 // 2", + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "mul%2#0", + "2" + ] + }, + "1285": { + "op": "+", + "defined_out": [ + "add%2#0", + "aggregate%get_bit%0#0", + "tmp%1#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0" + ], + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "add%2#0" + ] + }, + "1286": { + "op": "dig 1", + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "add%2#0", + "tmp%7#0 (copy)" + ] + }, + "1288": { + "op": "len", + "defined_out": [ + "add%2#0", + "aggregate%get_bit%0#0", + "len%4#0", + "tmp%1#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0" + ], + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "add%2#0", + "len%4#0" + ] + }, + "1289": { + "op": "==", + "defined_out": [ + "aggregate%get_bit%0#0", + "eq%4#0", + "tmp%1#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0" + ], + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0", + "eq%4#0" + ] + }, + "1290": { + "error": "invalid number of bytes for (len+(uint64,uint64)[])", + "op": "assert // invalid number of bytes for (len+(uint64,uint64)[])", + "stack_out": [ + "tmp%1#0", + "aggregate%get_bit%0#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0" + ] + }, + "1291": { + "callsub": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin", + "op": "callsub smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin", + "defined_out": [ + "arc58_rekeyToPlugin%0#0", + "arc58_rekeyToPlugin%1#0" + ], + "stack_out": [ + "arc58_rekeyToPlugin%0#0", + "arc58_rekeyToPlugin%1#0" + ] + }, + "1294": { + "op": "popn 2", + "stack_out": [] + }, + "1296": { + "op": "intc_1 // 1", + "stack_out": [ + "1" + ] + }, + "1297": { + "op": "return", + "stack_out": [] + }, + "1298": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToNamedPlugin[routing]", + "params": {}, + "block": "arc58_rekeyToNamedPlugin", + "stack_in": [], + "op": "txna ApplicationArgs 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] + }, + "1301": { + "op": "dup", + "defined_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ] + }, + "1302": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "tmp%0#0", + "tmp%0#0 (copy)", + "0" + ] + }, + "1303": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "aggregate%array_length%0#0" + ] + }, + "1304": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "aggregate%array_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "aggregate%array_length%0#0", + "2" + ] + }, + "1305": { + "op": "+", + "defined_out": [ + "add%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "add%0#0" + ] + }, + "1306": { + "op": "dig 1", + "stack_out": [ + "tmp%0#0", + "add%0#0", + "tmp%0#0 (copy)" + ] + }, + "1308": { + "op": "len", + "defined_out": [ + "add%0#0", + "len%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "add%0#0", + "len%0#0" + ] + }, + "1309": { + "op": "==", + "defined_out": [ + "eq%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "eq%0#0" + ] + }, + "1310": { + "error": "invalid number of bytes for (len+utf8[])", + "op": "assert // invalid number of bytes for (len+utf8[])", + "stack_out": [ + "tmp%0#0" + ] + }, + "1311": { + "op": "extract 2 0", + "defined_out": [ + "name#0" + ], + "stack_out": [ + "name#0" + ] + }, + "1314": { + "op": "txna ApplicationArgs 2", + "defined_out": [ + "name#0", + "tmp%2#0" + ], + "stack_out": [ + "name#0", + "tmp%2#0" + ] + }, + "1317": { + "op": "dup", + "defined_out": [ + "name#0", + "tmp%2#0", + "tmp%2#0 (copy)" + ], + "stack_out": [ + "name#0", + "tmp%2#0", + "tmp%2#0 (copy)" + ] + }, + "1318": { + "op": "len", + "defined_out": [ + "len%1#0", + "name#0", + "tmp%2#0" + ], + "stack_out": [ + "name#0", + "tmp%2#0", + "len%1#0" + ] + }, + "1319": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "len%1#0", + "name#0", + "tmp%2#0" + ], + "stack_out": [ + "name#0", + "tmp%2#0", + "len%1#0", + "1" + ] + }, + "1320": { + "op": "==", + "defined_out": [ + "eq%1#0", + "name#0", + "tmp%2#0" + ], + "stack_out": [ + "name#0", + "tmp%2#0", + "eq%1#0" + ] + }, + "1321": { + "error": "invalid number of bytes for bool8", + "op": "assert // invalid number of bytes for bool8", + "stack_out": [ + "name#0", + "tmp%2#0" + ] + }, + "1322": { + "op": "intc_0 // 0", + "stack_out": [ + "name#0", + "tmp%2#0", + "0" + ] + }, + "1323": { + "op": "getbit", + "defined_out": [ + "global#0", + "name#0" + ], + "stack_out": [ + "name#0", + "global#0" + ] + }, + "1324": { + "op": "txna ApplicationArgs 3", + "defined_out": [ + "global#0", + "name#0", + "tmp%4#0" + ], + "stack_out": [ + "name#0", + "global#0", + "tmp%4#0" + ] + }, + "1327": { + "op": "dup", + "defined_out": [ + "global#0", + "name#0", + "tmp%4#0", + "tmp%4#0 (copy)" + ], + "stack_out": [ + "name#0", + "global#0", + "tmp%4#0", + "tmp%4#0 (copy)" + ] + }, + "1328": { + "op": "intc_0 // 0", + "stack_out": [ + "name#0", + "global#0", + "tmp%4#0", + "tmp%4#0 (copy)", + "0" + ] + }, + "1329": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%1#0", + "global#0", + "name#0", + "tmp%4#0" + ], + "stack_out": [ + "name#0", + "global#0", + "tmp%4#0", + "aggregate%array_length%1#0" + ] + }, + "1330": { + "op": "intc_2 // 2", + "stack_out": [ + "name#0", + "global#0", + "tmp%4#0", + "aggregate%array_length%1#0", + "2" + ] + }, + "1331": { + "op": "+", + "defined_out": [ + "add%1#0", + "global#0", + "name#0", + "tmp%4#0" + ], + "stack_out": [ + "name#0", + "global#0", + "tmp%4#0", + "add%1#0" + ] + }, + "1332": { + "op": "dig 1", + "stack_out": [ + "name#0", + "global#0", + "tmp%4#0", + "add%1#0", + "tmp%4#0 (copy)" + ] + }, + "1334": { + "op": "len", + "defined_out": [ + "add%1#0", + "global#0", + "len%2#0", + "name#0", + "tmp%4#0" + ], + "stack_out": [ + "name#0", + "global#0", + "tmp%4#0", + "add%1#0", + "len%2#0" + ] + }, + "1335": { + "op": "==", + "defined_out": [ + "eq%2#0", + "global#0", + "name#0", + "tmp%4#0" + ], + "stack_out": [ + "name#0", + "global#0", + "tmp%4#0", + "eq%2#0" + ] + }, + "1336": { + "error": "invalid number of bytes for (len+utf8[])", + "op": "assert // invalid number of bytes for (len+utf8[])", + "stack_out": [ + "name#0", + "global#0", + "tmp%4#0" + ] + }, + "1337": { + "op": "extract 2 0", + "defined_out": [ + "escrow#0", + "global#0", + "name#0" + ], + "stack_out": [ + "name#0", + "global#0", + "escrow#0" + ] + }, + "1340": { + "op": "txna ApplicationArgs 4", + "defined_out": [ + "escrow#0", + "global#0", + "methodOffsets#0", + "name#0" + ], + "stack_out": [ + "name#0", + "global#0", + "escrow#0", + "methodOffsets#0" + ] + }, + "1343": { + "op": "dup", + "defined_out": [ + "escrow#0", + "global#0", + "methodOffsets#0", + "methodOffsets#0 (copy)", + "name#0" + ], + "stack_out": [ + "name#0", + "global#0", + "escrow#0", + "methodOffsets#0", + "methodOffsets#0 (copy)" + ] + }, + "1344": { + "op": "intc_0 // 0", + "stack_out": [ + "name#0", + "global#0", + "escrow#0", + "methodOffsets#0", + "methodOffsets#0 (copy)", + "0" + ] + }, + "1345": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%2#0", + "escrow#0", + "global#0", + "methodOffsets#0", + "name#0" + ], + "stack_out": [ + "name#0", + "global#0", + "escrow#0", + "methodOffsets#0", + "aggregate%array_length%2#0" + ] + }, + "1346": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "aggregate%array_length%2#0", + "escrow#0", + "global#0", + "methodOffsets#0", + "name#0" + ], + "stack_out": [ + "name#0", + "global#0", + "escrow#0", + "methodOffsets#0", + "aggregate%array_length%2#0", + "8" + ] + }, + "1347": { + "op": "*", + "defined_out": [ + "escrow#0", + "global#0", + "methodOffsets#0", + "mul%2#0", + "name#0" + ], + "stack_out": [ + "name#0", + "global#0", + "escrow#0", + "methodOffsets#0", + "mul%2#0" + ] + }, + "1348": { + "op": "intc_2 // 2", + "stack_out": [ + "name#0", + "global#0", + "escrow#0", + "methodOffsets#0", + "mul%2#0", + "2" + ] + }, + "1349": { + "op": "+", + "defined_out": [ + "add%2#0", + "escrow#0", + "global#0", + "methodOffsets#0", + "name#0" + ], + "stack_out": [ + "name#0", + "global#0", + "escrow#0", + "methodOffsets#0", + "add%2#0" + ] + }, + "1350": { + "op": "dig 1", + "stack_out": [ + "name#0", + "global#0", + "escrow#0", + "methodOffsets#0", + "add%2#0", + "methodOffsets#0 (copy)" + ] + }, + "1352": { + "op": "len", + "defined_out": [ + "add%2#0", + "escrow#0", + "global#0", + "len%3#0", + "methodOffsets#0", + "name#0" + ], + "stack_out": [ + "name#0", + "global#0", + "escrow#0", + "methodOffsets#0", + "add%2#0", + "len%3#0" + ] + }, + "1353": { + "op": "==", + "defined_out": [ + "eq%3#0", + "escrow#0", + "global#0", + "methodOffsets#0", + "name#0" + ], + "stack_out": [ + "name#0", + "global#0", + "escrow#0", + "methodOffsets#0", + "eq%3#0" + ] + }, + "1354": { + "error": "invalid number of bytes for (len+uint64[])", + "op": "assert // invalid number of bytes for (len+uint64[])", + "stack_out": [ + "name#0", + "global#0", + "escrow#0", + "methodOffsets#0" + ] + }, + "1355": { + "op": "txna ApplicationArgs 5", + "defined_out": [ + "escrow#0", + "fundsRequest#0", + "global#0", + "methodOffsets#0", + "name#0" + ], + "stack_out": [ + "name#0", + "global#0", + "escrow#0", + "methodOffsets#0", + "fundsRequest#0" + ] + }, + "1358": { + "op": "dup", + "defined_out": [ + "escrow#0", + "fundsRequest#0", + "fundsRequest#0 (copy)", + "global#0", + "methodOffsets#0", + "name#0" + ], + "stack_out": [ + "name#0", + "global#0", + "escrow#0", + "methodOffsets#0", + "fundsRequest#0", + "fundsRequest#0 (copy)" + ] + }, + "1359": { + "op": "intc_0 // 0", + "stack_out": [ + "name#0", + "global#0", + "escrow#0", + "methodOffsets#0", + "fundsRequest#0", + "fundsRequest#0 (copy)", + "0" + ] + }, + "1360": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%3#0", + "escrow#0", + "fundsRequest#0", + "global#0", + "methodOffsets#0", + "name#0" + ], + "stack_out": [ + "name#0", + "global#0", + "escrow#0", + "methodOffsets#0", + "fundsRequest#0", + "aggregate%array_length%3#0" + ] + }, + "1361": { + "op": "pushint 16 // 16", + "defined_out": [ + "16", + "aggregate%array_length%3#0", + "escrow#0", + "fundsRequest#0", + "global#0", + "methodOffsets#0", + "name#0" + ], + "stack_out": [ + "name#0", + "global#0", + "escrow#0", + "methodOffsets#0", + "fundsRequest#0", + "aggregate%array_length%3#0", + "16" + ] + }, + "1363": { + "op": "*", + "defined_out": [ + "escrow#0", + "fundsRequest#0", + "global#0", + "methodOffsets#0", + "mul%3#0", + "name#0" + ], + "stack_out": [ + "name#0", + "global#0", + "escrow#0", + "methodOffsets#0", + "fundsRequest#0", + "mul%3#0" + ] + }, + "1364": { + "op": "intc_2 // 2", + "stack_out": [ + "name#0", + "global#0", + "escrow#0", + "methodOffsets#0", + "fundsRequest#0", + "mul%3#0", + "2" + ] + }, + "1365": { + "op": "+", + "defined_out": [ + "add%3#0", + "escrow#0", + "fundsRequest#0", + "global#0", + "methodOffsets#0", + "name#0" + ], + "stack_out": [ + "name#0", + "global#0", + "escrow#0", + "methodOffsets#0", + "fundsRequest#0", + "add%3#0" + ] + }, + "1366": { + "op": "dig 1", + "stack_out": [ + "name#0", + "global#0", + "escrow#0", + "methodOffsets#0", + "fundsRequest#0", + "add%3#0", + "fundsRequest#0 (copy)" + ] + }, + "1368": { + "op": "len", + "defined_out": [ + "add%3#0", + "escrow#0", + "fundsRequest#0", + "global#0", + "len%4#0", + "methodOffsets#0", + "name#0" + ], + "stack_out": [ + "name#0", + "global#0", + "escrow#0", + "methodOffsets#0", + "fundsRequest#0", + "add%3#0", + "len%4#0" + ] + }, + "1369": { + "op": "==", + "defined_out": [ + "eq%4#0", + "escrow#0", + "fundsRequest#0", + "global#0", + "methodOffsets#0", + "name#0" + ], + "stack_out": [ + "name#0", + "global#0", + "escrow#0", + "methodOffsets#0", + "fundsRequest#0", + "eq%4#0" + ] + }, + "1370": { + "error": "invalid number of bytes for (len+(uint64,uint64)[])", + "op": "assert // invalid number of bytes for (len+(uint64,uint64)[])", + "stack_out": [ + "name#0", + "global#0", + "escrow#0", + "methodOffsets#0", + "fundsRequest#0" + ] + }, + "1371": { + "op": "bytec 16 // \"n\"", + "defined_out": [ + "\"n\"", + "escrow#0", + "fundsRequest#0", + "global#0", + "methodOffsets#0", + "name#0" + ], + "stack_out": [ + "name#0", + "global#0", + "escrow#0", + "methodOffsets#0", + "fundsRequest#0", + "\"n\"" + ] + }, + "1373": { + "op": "uncover 5", + "stack_out": [ + "global#0", + "escrow#0", + "methodOffsets#0", + "fundsRequest#0", + "\"n\"", + "name#0" + ] + }, + "1375": { + "op": "concat", + "defined_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "fundsRequest#0", + "global#0", + "methodOffsets#0" + ], + "stack_out": [ + "global#0", + "escrow#0", + "methodOffsets#0", + "fundsRequest#0", + "box_prefixed_key%0#0" + ] + }, + "1376": { + "op": "intc_0 // 0", + "stack_out": [ + "global#0", + "escrow#0", + "methodOffsets#0", + "fundsRequest#0", + "box_prefixed_key%0#0", + "0" + ] + }, + "1377": { + "op": "intc_3 // 8", + "stack_out": [ + "global#0", + "escrow#0", + "methodOffsets#0", + "fundsRequest#0", + "box_prefixed_key%0#0", + "0", + "8" + ] + }, + "1378": { + "op": "box_extract", + "defined_out": [ + "box%box_extract%0#0", + "escrow#0", + "fundsRequest#0", + "global#0", + "methodOffsets#0" + ], + "stack_out": [ + "global#0", + "escrow#0", + "methodOffsets#0", + "fundsRequest#0", + "box%box_extract%0#0" + ] + }, + "1379": { + "op": "btoi", + "defined_out": [ + "escrow#0", + "fundsRequest#0", + "global#0", + "methodOffsets#0", + "values%0#0" + ], + "stack_out": [ + "global#0", + "escrow#0", + "methodOffsets#0", + "fundsRequest#0", + "values%0#0" + ] + }, + "1380": { + "op": "cover 4", + "stack_out": [ + "values%0#0", + "global#0", + "escrow#0", + "methodOffsets#0", + "fundsRequest#0" + ] + }, + "1382": { + "callsub": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin", + "op": "callsub smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin", + "stack_out": [ + "methodOffsets#0", + "fundsRequest#0" + ] + }, + "1385": { + "op": "popn 2", + "stack_out": [] + }, + "1387": { + "op": "intc_1 // 1", + "stack_out": [ + "1" + ] + }, + "1388": { + "op": "return", + "stack_out": [] + }, + "1389": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_addPlugin[routing]", + "params": {}, + "block": "arc58_addPlugin", + "stack_in": [], + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%as_bytes%2#0" + ] + }, + "1390": { + "op": "dupn 3", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0" + ] + }, + "1392": { + "op": "bytec_1 // \"\"", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0" + ] + }, + "1393": { + "op": "dup", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0" + ] + }, + "1394": { + "op": "txna ApplicationArgs 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "tmp%0#0" + ] + }, + "1397": { + "op": "dup", + "defined_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "tmp%0#0", + "tmp%0#0 (copy)" + ] + }, + "1398": { + "op": "len", + "defined_out": [ + "len%0#0", + "tmp%0#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "tmp%0#0", + "len%0#0" + ] + }, + "1399": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "len%0#0", + "tmp%0#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "tmp%0#0", + "len%0#0", + "8" + ] + }, + "1400": { + "op": "==", + "defined_out": [ + "eq%0#0", + "tmp%0#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "tmp%0#0", + "eq%0#0" + ] + }, + "1401": { + "error": "invalid number of bytes for uint64", + "op": "assert // invalid number of bytes for uint64", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "tmp%0#0" + ] + }, + "1402": { + "op": "btoi", + "defined_out": [ + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0" + ] + }, + "1403": { + "op": "txna ApplicationArgs 2" + }, + "1406": { + "op": "dup", + "defined_out": [ + "caller#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "caller#0" + ] + }, + "1407": { + "op": "len", + "defined_out": [ + "caller#0", + "len%1#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "len%1#0" + ] + }, + "1408": { + "op": "pushint 32 // 32", + "defined_out": [ + "32", + "caller#0", + "len%1#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "len%1#0", + "32" + ] + }, + "1410": { + "op": "==", + "defined_out": [ + "caller#0", + "eq%1#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "eq%1#0" + ] + }, + "1411": { + "error": "invalid number of bytes for uint8[32]", + "op": "assert // invalid number of bytes for uint8[32]", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0" + ] + }, + "1412": { + "op": "txna ApplicationArgs 3", + "defined_out": [ + "caller#0", + "plugin#0", + "tmp%3#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "tmp%3#0" + ] + }, + "1415": { + "op": "dup", + "defined_out": [ + "caller#0", + "plugin#0", + "tmp%3#0", + "tmp%3#0 (copy)" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "tmp%3#0", + "tmp%3#0 (copy)" + ] + }, + "1416": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "tmp%3#0", + "tmp%3#0 (copy)", + "0" + ] + }, + "1417": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%0#0", + "caller#0", + "plugin#0", + "tmp%3#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "tmp%3#0", + "aggregate%array_length%0#0" + ] + }, + "1418": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "aggregate%array_length%0#0", + "caller#0", + "plugin#0", + "tmp%3#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "tmp%3#0", + "aggregate%array_length%0#0", + "2" + ] + }, + "1419": { + "op": "+", + "defined_out": [ + "add%0#0", + "caller#0", + "plugin#0", + "tmp%3#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "tmp%3#0", + "add%0#0" + ] + }, + "1420": { + "op": "dig 1", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "tmp%3#0", + "add%0#0", + "tmp%3#0 (copy)" + ] + }, + "1422": { + "op": "len", + "defined_out": [ + "add%0#0", + "caller#0", + "len%2#0", + "plugin#0", + "tmp%3#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "tmp%3#0", + "add%0#0", + "len%2#0" + ] + }, + "1423": { + "op": "==", + "defined_out": [ + "caller#0", + "eq%2#0", + "plugin#0", + "tmp%3#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "tmp%3#0", + "eq%2#0" + ] + }, + "1424": { + "error": "invalid number of bytes for (len+utf8[])", + "op": "assert // invalid number of bytes for (len+utf8[])", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "tmp%3#0" + ] + }, + "1425": { + "op": "extract 2 0", + "defined_out": [ + "caller#0", + "escrow#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0" + ] + }, + "1428": { + "op": "txna ApplicationArgs 4", + "defined_out": [ + "caller#0", + "escrow#0", + "plugin#0", + "tmp%5#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "tmp%5#0" + ] + }, + "1431": { + "op": "dup", + "defined_out": [ + "caller#0", + "escrow#0", + "plugin#0", + "tmp%5#0", + "tmp%5#0 (copy)" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "tmp%5#0", + "tmp%5#0 (copy)" + ] + }, + "1432": { + "op": "len", + "defined_out": [ + "caller#0", + "escrow#0", + "len%3#0", + "plugin#0", + "tmp%5#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "tmp%5#0", + "len%3#0" + ] + }, + "1433": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "caller#0", + "escrow#0", + "len%3#0", + "plugin#0", + "tmp%5#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "tmp%5#0", + "len%3#0", + "1" + ] + }, + "1434": { + "op": "==", + "defined_out": [ + "caller#0", + "eq%3#0", + "escrow#0", + "plugin#0", + "tmp%5#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "tmp%5#0", + "eq%3#0" + ] + }, + "1435": { + "error": "invalid number of bytes for bool8", + "op": "assert // invalid number of bytes for bool8", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "tmp%5#0" + ] + }, + "1436": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "tmp%5#0", + "0" + ] + }, + "1437": { + "op": "getbit", + "defined_out": [ + "admin#0", + "caller#0", + "escrow#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0" + ] + }, + "1438": { + "op": "txna ApplicationArgs 5" + }, + "1441": { + "op": "dupn 2", + "defined_out": [ + "admin#0", + "caller#0", + "delegationType#0", + "delegationType#0 (copy)", + "escrow#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "delegationType#0", + "delegationType#0 (copy)" + ] + }, + "1443": { + "op": "len", + "defined_out": [ + "admin#0", + "caller#0", + "delegationType#0", + "escrow#0", + "len%4#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "delegationType#0", + "len%4#0" + ] + }, + "1444": { + "op": "intc_1 // 1", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "delegationType#0", + "len%4#0", + "1" + ] + }, + "1445": { + "op": "==", + "defined_out": [ + "admin#0", + "caller#0", + "delegationType#0", + "eq%4#0", + "escrow#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "delegationType#0", + "eq%4#0" + ] + }, + "1446": { + "error": "invalid number of bytes for uint8", + "op": "assert // invalid number of bytes for uint8", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "delegationType#0" + ] + }, + "1447": { + "op": "txna ApplicationArgs 6", + "defined_out": [ + "admin#0", + "caller#0", + "delegationType#0", + "escrow#0", + "plugin#0", + "tmp%8#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "delegationType#0", + "tmp%8#0" + ] + }, + "1450": { + "op": "dup", + "defined_out": [ + "admin#0", + "caller#0", + "delegationType#0", + "escrow#0", + "plugin#0", + "tmp%8#0", + "tmp%8#0 (copy)" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "delegationType#0", + "tmp%8#0", + "tmp%8#0 (copy)" + ] + }, + "1451": { + "op": "len", + "defined_out": [ + "admin#0", + "caller#0", + "delegationType#0", + "escrow#0", + "len%5#0", + "plugin#0", + "tmp%8#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "delegationType#0", + "tmp%8#0", + "len%5#0" + ] + }, + "1452": { + "op": "intc_3 // 8", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "delegationType#0", + "tmp%8#0", + "len%5#0", + "8" + ] + }, + "1453": { + "op": "==", + "defined_out": [ + "admin#0", + "caller#0", + "delegationType#0", + "eq%5#0", + "escrow#0", + "plugin#0", + "tmp%8#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "delegationType#0", + "tmp%8#0", + "eq%5#0" + ] + }, + "1454": { + "error": "invalid number of bytes for uint64", + "op": "assert // invalid number of bytes for uint64", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "delegationType#0", + "tmp%8#0" + ] + }, + "1455": { + "op": "btoi", + "defined_out": [ + "admin#0", + "caller#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "delegationType#0", + "lastValid#0" + ] + }, + "1456": { + "op": "swap", + "defined_out": [ + "admin#0", + "caller#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "delegationType#0" + ] + }, + "1457": { + "op": "txna ApplicationArgs 7", + "defined_out": [ + "admin#0", + "caller#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "plugin#0", + "tmp%10#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "delegationType#0", + "tmp%10#0" + ] + }, + "1460": { + "op": "dup", + "defined_out": [ + "admin#0", + "caller#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "plugin#0", + "tmp%10#0", + "tmp%10#0 (copy)" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "delegationType#0", + "tmp%10#0", + "tmp%10#0 (copy)" + ] + }, + "1461": { + "op": "len", + "defined_out": [ + "admin#0", + "caller#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "len%6#0", + "plugin#0", + "tmp%10#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "delegationType#0", + "tmp%10#0", + "len%6#0" + ] + }, + "1462": { + "op": "intc_3 // 8", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "delegationType#0", + "tmp%10#0", + "len%6#0", + "8" + ] + }, + "1463": { + "op": "==", + "defined_out": [ + "admin#0", + "caller#0", + "delegationType#0", + "eq%6#0", + "escrow#0", + "lastValid#0", + "plugin#0", + "tmp%10#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "delegationType#0", + "tmp%10#0", + "eq%6#0" + ] + }, + "1464": { + "error": "invalid number of bytes for uint64", + "op": "assert // invalid number of bytes for uint64", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "delegationType#0", + "tmp%10#0" + ] + }, + "1465": { + "op": "btoi", + "defined_out": [ + "admin#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "delegationType#0", + "cooldown#0" + ] + }, + "1466": { + "op": "swap", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "delegationType#0" + ] + }, + "1467": { + "op": "txna ApplicationArgs 8" + }, + "1470": { + "op": "dup", + "defined_out": [ + "admin#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "delegationType#0", + "methods#0", + "methods#0" + ] + }, + "1471": { + "op": "cover 2", + "defined_out": [ + "admin#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "delegationType#0", + "methods#0" + ] + }, + "1473": { + "op": "dup", + "defined_out": [ + "admin#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "methods#0 (copy)", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "delegationType#0", + "methods#0", + "methods#0 (copy)" + ] + }, + "1474": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "delegationType#0", + "methods#0", + "methods#0 (copy)", + "0" + ] + }, + "1475": { + "op": "extract_uint16", + "defined_out": [ + "admin#0", + "aggregate%array_length%1#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "delegationType#0", + "methods#0", + "aggregate%array_length%1#0" + ] + }, + "1476": { + "op": "dup", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "delegationType#0", + "methods#0", + "aggregate%array_length%1#0", + "aggregate%array_length%1#0" + ] + }, + "1477": { + "op": "cover 3", + "defined_out": [ + "admin#0", + "aggregate%array_length%1#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "delegationType#0", + "methods#0", + "aggregate%array_length%1#0" + ] + }, + "1479": { + "op": "pushint 12 // 12", + "defined_out": [ + "12", + "admin#0", + "aggregate%array_length%1#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "delegationType#0", + "methods#0", + "aggregate%array_length%1#0", + "12" + ] + }, + "1481": { + "op": "*", + "defined_out": [ + "admin#0", + "aggregate%array_length%1#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "mul%1#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "delegationType#0", + "methods#0", + "mul%1#0" + ] + }, + "1482": { + "op": "intc_2 // 2", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "delegationType#0", + "methods#0", + "mul%1#0", + "2" + ] + }, + "1483": { + "op": "+", + "defined_out": [ + "add%1#0", + "admin#0", + "aggregate%array_length%1#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "delegationType#0", + "methods#0", + "add%1#0" + ] + }, + "1484": { + "op": "swap", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "delegationType#0", + "add%1#0", + "methods#0" + ] + }, + "1485": { + "op": "len", + "defined_out": [ + "add%1#0", + "admin#0", + "aggregate%array_length%1#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "len%7#0", + "methods#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "delegationType#0", + "add%1#0", + "len%7#0" + ] + }, + "1486": { + "op": "==", + "defined_out": [ + "admin#0", + "aggregate%array_length%1#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "eq%7#0", + "escrow#0", + "lastValid#0", + "methods#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "delegationType#0", + "eq%7#0" + ] + }, + "1487": { + "error": "invalid number of bytes for (len+(uint8[4],uint64)[])", + "op": "assert // invalid number of bytes for (len+(uint8[4],uint64)[])", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "delegationType#0" + ] + }, + "1488": { + "op": "txna ApplicationArgs 9", + "defined_out": [ + "admin#0", + "aggregate%array_length%1#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "plugin#0", + "tmp%13#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "delegationType#0", + "tmp%13#0" + ] + }, + "1491": { + "op": "dup", + "defined_out": [ + "admin#0", + "aggregate%array_length%1#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "plugin#0", + "tmp%13#0", + "tmp%13#0 (copy)" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "delegationType#0", + "tmp%13#0", + "tmp%13#0 (copy)" + ] + }, + "1492": { + "op": "len", + "defined_out": [ + "admin#0", + "aggregate%array_length%1#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "len%8#0", + "methods#0", + "plugin#0", + "tmp%13#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "delegationType#0", + "tmp%13#0", + "len%8#0" + ] + }, + "1493": { + "op": "intc_1 // 1", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "delegationType#0", + "tmp%13#0", + "len%8#0", + "1" + ] + }, + "1494": { + "op": "==", + "defined_out": [ + "admin#0", + "aggregate%array_length%1#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "eq%8#0", + "escrow#0", + "lastValid#0", + "methods#0", + "plugin#0", + "tmp%13#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "delegationType#0", + "tmp%13#0", + "eq%8#0" + ] + }, + "1495": { + "error": "invalid number of bytes for bool8", + "op": "assert // invalid number of bytes for bool8", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "delegationType#0", + "tmp%13#0" + ] + }, + "1496": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "delegationType#0", + "tmp%13#0", + "0" + ] + }, + "1497": { + "op": "getbit", + "defined_out": [ + "admin#0", + "aggregate%array_length%1#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "plugin#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "delegationType#0", + "useRounds#0" + ] + }, + "1498": { + "op": "swap", + "defined_out": [ + "admin#0", + "aggregate%array_length%1#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "plugin#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "delegationType#0" + ] + }, + "1499": { + "op": "txna ApplicationArgs 10", + "defined_out": [ + "admin#0", + "aggregate%array_length%1#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "plugin#0", + "tmp%15#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "delegationType#0", + "tmp%15#0" + ] + }, + "1502": { + "op": "dup", + "defined_out": [ + "admin#0", + "aggregate%array_length%1#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "plugin#0", + "tmp%15#0", + "tmp%15#0 (copy)", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "delegationType#0", + "tmp%15#0", + "tmp%15#0 (copy)" + ] + }, + "1503": { + "op": "len", + "defined_out": [ + "admin#0", + "aggregate%array_length%1#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "len%9#0", + "methods#0", + "plugin#0", + "tmp%15#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "delegationType#0", + "tmp%15#0", + "len%9#0" + ] + }, + "1504": { + "op": "intc_1 // 1", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "delegationType#0", + "tmp%15#0", + "len%9#0", + "1" + ] + }, + "1505": { + "op": "==", + "defined_out": [ + "admin#0", + "aggregate%array_length%1#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "eq%9#0", + "escrow#0", + "lastValid#0", + "methods#0", + "plugin#0", + "tmp%15#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "delegationType#0", + "tmp%15#0", + "eq%9#0" + ] + }, + "1506": { + "error": "invalid number of bytes for bool8", + "op": "assert // invalid number of bytes for bool8", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "delegationType#0", + "tmp%15#0" + ] + }, + "1507": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "delegationType#0", + "tmp%15#0", + "0" + ] + }, + "1508": { + "op": "getbit", + "defined_out": [ + "admin#0", + "aggregate%array_length%1#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "plugin#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "delegationType#0", + "useExecutionKey#0" + ] + }, + "1509": { + "op": "swap", + "defined_out": [ + "admin#0", + "aggregate%array_length%1#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "plugin#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "delegationType#0" + ] + }, + "1510": { + "op": "txna ApplicationArgs 11", + "defined_out": [ + "admin#0", + "aggregate%array_length%1#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "plugin#0", + "tmp%17#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "delegationType#0", + "tmp%17#0" + ] + }, + "1513": { + "op": "dup", + "defined_out": [ + "admin#0", + "aggregate%array_length%1#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "plugin#0", + "tmp%17#0", + "tmp%17#0 (copy)", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "delegationType#0", + "tmp%17#0", + "tmp%17#0 (copy)" + ] + }, + "1514": { + "op": "len", + "defined_out": [ + "admin#0", + "aggregate%array_length%1#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "len%10#0", + "methods#0", + "plugin#0", + "tmp%17#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "delegationType#0", + "tmp%17#0", + "len%10#0" + ] + }, + "1515": { + "op": "intc_1 // 1", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "delegationType#0", + "tmp%17#0", + "len%10#0", + "1" + ] + }, + "1516": { + "op": "==", + "defined_out": [ + "admin#0", + "aggregate%array_length%1#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "eq%10#0", + "escrow#0", + "lastValid#0", + "methods#0", + "plugin#0", + "tmp%17#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "delegationType#0", + "tmp%17#0", + "eq%10#0" + ] + }, + "1517": { + "error": "invalid number of bytes for bool8", + "op": "assert // invalid number of bytes for bool8", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "delegationType#0", + "tmp%17#0" + ] + }, + "1518": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "delegationType#0", + "tmp%17#0", + "0" + ] + }, + "1519": { + "op": "getbit", + "defined_out": [ + "admin#0", + "aggregate%array_length%1#0", + "caller#0", + "cooldown#0", + "defaultToEscrow#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "plugin#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "delegationType#0", + "defaultToEscrow#0" + ] + }, + "1520": { + "op": "swap", + "defined_out": [ + "admin#0", + "aggregate%array_length%1#0", + "caller#0", + "cooldown#0", + "defaultToEscrow#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "plugin#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "delegationType#0" + ] + }, + "1521": { + "op": "txn Sender", + "defined_out": [ + "admin#0", + "aggregate%array_length%1#0", + "caller#0", + "cooldown#0", + "defaultToEscrow#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "plugin#0", + "tmp%0#1", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "delegationType#0", + "tmp%0#1" + ] + }, + "1523": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "delegationType#0", + "tmp%0#1", + "0" + ] + }, + "1524": { + "op": "bytec_2 // \"admin\"", + "defined_out": [ + "\"admin\"", + "0", + "admin#0", + "aggregate%array_length%1#0", + "caller#0", + "cooldown#0", + "defaultToEscrow#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "plugin#0", + "tmp%0#1", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "delegationType#0", + "tmp%0#1", + "0", + "\"admin\"" + ] + }, + "1525": { + "op": "app_global_get_ex", + "defined_out": [ + "admin#0", + "aggregate%array_length%1#0", + "caller#0", + "cooldown#0", + "defaultToEscrow#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "maybe_exists%0#0", + "maybe_value%0#0", + "methods#0", + "plugin#0", + "tmp%0#1", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "delegationType#0", + "tmp%0#1", + "maybe_value%0#0", + "maybe_exists%0#0" + ] + }, + "1526": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "delegationType#0", + "tmp%0#1", + "maybe_value%0#0" + ] + }, + "1527": { + "op": "==", + "defined_out": [ + "admin#0", + "aggregate%array_length%1#0", + "caller#0", + "cooldown#0", + "defaultToEscrow#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "plugin#0", + "tmp%1#1", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "delegationType#0", + "tmp%1#1" + ] + }, + "1528": { + "error": "admin only", + "op": "assert // admin only", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "delegationType#0" + ] + }, + "1529": { + "op": "bytec 15 // 0x01", + "defined_out": [ + "0x01", + "admin#0", + "aggregate%array_length%1#0", + "caller#0", + "cooldown#0", + "defaultToEscrow#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "plugin#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "delegationType#0", + "0x01" + ] + }, + "1531": { + "op": "==", + "defined_out": [ + "admin#0", + "aggregate%array_length%1#0", + "caller#0", + "cooldown#0", + "defaultToEscrow#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "plugin#0", + "tmp%2#1", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "tmp%2#1" + ] + }, + "1532": { + "op": "bz arc58_addPlugin_bool_false@4", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ] + }, + "1535": { + "op": "dig 10", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "caller#0" + ] + }, + "1537": { + "op": "global ZeroAddress", + "defined_out": [ + "admin#0", + "aggregate%array_length%1#0", + "caller#0", + "cooldown#0", + "defaultToEscrow#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "plugin#0", + "tmp%4#1", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "caller#0", + "tmp%4#1" + ] + }, + "1539": { + "op": "==", + "defined_out": [ + "admin#0", + "aggregate%array_length%1#0", + "caller#0", + "cooldown#0", + "defaultToEscrow#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "plugin#0", + "tmp%5#1", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "tmp%5#1" + ] + }, + "1540": { + "op": "bz arc58_addPlugin_bool_false@4", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ] + }, + "1543": { + "op": "intc_1 // 1", + "defined_out": [ + "admin#0", + "aggregate%array_length%1#0", + "and_result%0#0", + "caller#0", + "cooldown#0", + "defaultToEscrow#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "plugin#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "and_result%0#0" + ] + }, + "1544": { + "block": "arc58_addPlugin_bool_merge@5", + "stack_in": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "and_result%0#0" + ], + "op": "!", + "defined_out": [ + "tmp%6#1" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "tmp%6#1" + ] + }, + "1545": { + "error": "delegation type must not be self for global plugins", + "op": "assert // delegation type must not be self for global plugins", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ] + }, + "1546": { + "op": "dig 1", + "defined_out": [ + "useExecutionKey#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "useExecutionKey#0" + ] + }, + "1548": { + "op": "bz arc58_addPlugin_bool_false@8", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ] + }, + "1551": { + "op": "dig 10", + "defined_out": [ + "caller#0", + "useExecutionKey#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "caller#0" + ] + }, + "1553": { + "op": "global ZeroAddress", + "defined_out": [ + "caller#0", + "tmp%8#1", + "useExecutionKey#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "caller#0", + "tmp%8#1" + ] + }, + "1555": { + "op": "!=", + "defined_out": [ + "caller#0", + "tmp%9#1", + "useExecutionKey#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "tmp%9#1" + ] + }, + "1556": { + "op": "bz arc58_addPlugin_bool_false@8", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ] + }, + "1559": { + "op": "intc_1 // 1", + "defined_out": [ + "and_result%1#0", + "caller#0", + "useExecutionKey#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "and_result%1#0" + ] + }, + "1560": { + "block": "arc58_addPlugin_bool_merge@9", + "stack_in": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "and_result%1#0" + ], + "op": "!", + "defined_out": [ + "tmp%10#1" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "tmp%10#1" + ] + }, + "1561": { + "error": "using execution key requires global plugin", + "op": "assert // using execution key requires global plugin", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ] + }, + "1562": { + "op": "dup", + "defined_out": [ + "defaultToEscrow#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "defaultToEscrow#0" + ] + }, + "1563": { + "op": "bnz arc58_addPlugin_if_body@10", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ] + }, + "1566": { + "op": "dig 9", + "defined_out": [ + "defaultToEscrow#0", + "escrowKey#1" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "escrowKey#1" + ] + }, + "1568": { + "op": "bury 17", + "defined_out": [ + "defaultToEscrow#0", + "escrowKey#1" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ] + }, + "1570": { + "block": "arc58_addPlugin_after_if_else@11", + "stack_in": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ], + "op": "dig 11", + "defined_out": [ + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "plugin#0" + ] + }, + "1572": { + "op": "itob", + "defined_out": [ + "aggregate%val_as_bytes%0#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%val_as_bytes%0#0" + ] + }, + "1573": { + "op": "dig 11", + "defined_out": [ + "aggregate%val_as_bytes%0#0", + "caller#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%val_as_bytes%0#0", + "caller#0" + ] + }, + "1575": { + "op": "concat", + "defined_out": [ + "aggregate%head%1#0", + "caller#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%head%1#0" + ] + }, + "1576": { + "op": "dig 17", + "defined_out": [ + "aggregate%head%1#0", + "caller#0", + "escrowKey#1", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%head%1#0", + "escrowKey#1" + ] + }, + "1578": { + "op": "dup", + "defined_out": [ + "aggregate%head%1#0", + "caller#0", + "escrowKey#1", + "escrowKey#1 (copy)", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%head%1#0", + "escrowKey#1", + "escrowKey#1 (copy)" + ] + }, + "1579": { + "op": "len", + "defined_out": [ + "aggregate%head%1#0", + "aggregate%length%0#0", + "caller#0", + "escrowKey#1", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%head%1#0", + "escrowKey#1", + "aggregate%length%0#0" + ] + }, + "1580": { + "op": "itob", + "defined_out": [ + "aggregate%as_bytes%0#0", + "aggregate%head%1#0", + "caller#0", + "escrowKey#1", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%head%1#0", + "escrowKey#1", + "aggregate%as_bytes%0#0" + ] + }, + "1581": { + "op": "extract 6 2", + "defined_out": [ + "aggregate%head%1#0", + "aggregate%length_uint16%0#0", + "caller#0", + "escrowKey#1", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%head%1#0", + "escrowKey#1", + "aggregate%length_uint16%0#0" + ] + }, + "1584": { + "op": "swap", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%head%1#0", + "aggregate%length_uint16%0#0", + "escrowKey#1" + ] + }, + "1585": { + "op": "concat", + "defined_out": [ + "aggregate%encoded_value%0#0", + "aggregate%head%1#0", + "caller#0", + "escrowKey#1", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%head%1#0", + "aggregate%encoded_value%0#0" + ] + }, + "1586": { + "op": "swap", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%encoded_value%0#0", + "aggregate%head%1#0" + ] + }, + "1587": { + "op": "bytec 12 // 0x002a", + "defined_out": [ + "0x002a", + "aggregate%encoded_value%0#0", + "aggregate%head%1#0", + "caller#0", + "escrowKey#1", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%encoded_value%0#0", + "aggregate%head%1#0", + "0x002a" + ] + }, + "1589": { + "op": "concat", + "defined_out": [ + "aggregate%encoded_value%0#0", + "aggregate%head%2#0", + "caller#0", + "escrowKey#1", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%encoded_value%0#0", + "aggregate%head%2#0" + ] + }, + "1590": { + "op": "swap", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%head%2#0", + "aggregate%encoded_value%0#0" + ] + }, + "1591": { + "op": "concat", + "defined_out": [ + "caller#0", + "escrowKey#1", + "key#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "key#0" + ] + }, + "1592": { + "op": "bury 16", + "defined_out": [ + "caller#0", + "escrowKey#1", + "key#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ] + }, + "1594": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "0" + ] + }, + "1595": { + "op": "itob", + "defined_out": [ + "aggregate%as_bytes%2#0", + "caller#0", + "escrowKey#1", + "key#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%as_bytes%2#0" + ] + }, + "1596": { + "op": "bury 18", + "defined_out": [ + "aggregate%as_bytes%2#0", + "caller#0", + "escrowKey#1", + "key#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ] + }, + "1598": { + "op": "bytec 10 // 0x0000", + "defined_out": [ + "aggregate%as_bytes%2#0", + "caller#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "methodInfos#0" + ] + }, + "1600": { + "op": "bury 15", + "defined_out": [ + "aggregate%as_bytes%2#0", + "caller#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ] + }, + "1602": { + "op": "intc_0 // 0", + "defined_out": [ + "aggregate%as_bytes%2#0", + "caller#0", + "escrowKey#1", + "i#0", + "key#0", + "methodInfos#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "i#0" + ] + }, + "1603": { + "op": "bury 13", + "defined_out": [ + "aggregate%as_bytes%2#0", + "caller#0", + "escrowKey#1", + "i#0", + "key#0", + "methodInfos#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ] + }, + "1605": { + "block": "arc58_addPlugin_while_top@12", + "stack_in": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ], + "op": "dig 12", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "i#0" + ] + }, + "1607": { + "op": "dig 4", + "defined_out": [ + "aggregate%array_length%1#0", + "i#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "i#0", + "aggregate%array_length%1#0" + ] + }, + "1609": { + "op": "<", + "defined_out": [ + "aggregate%array_length%1#0", + "i#0", + "tmp%15#1" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "tmp%15#1" + ] + }, + "1610": { + "op": "bz arc58_addPlugin_after_while@14", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ] + }, + "1613": { + "op": "dig 4", + "defined_out": [ + "aggregate%array_length%1#0", + "i#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "methods#0" + ] + }, + "1615": { + "op": "extract 2 0", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%array_trimmed%0#0", + "i#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%array_trimmed%0#0" + ] + }, + "1618": { + "op": "dig 13", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%array_trimmed%0#0", + "i#0" + ] + }, + "1620": { + "op": "dup", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%array_trimmed%0#0", + "i#0", + "i#0 (copy)", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%array_trimmed%0#0", + "i#0 (copy)", + "i#0 (copy)" + ] + }, + "1621": { + "op": "cover 2", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "i#0", + "aggregate%array_trimmed%0#0", + "i#0 (copy)" + ] + }, + "1623": { + "op": "pushint 12 // 12", + "defined_out": [ + "12", + "aggregate%array_length%1#0", + "aggregate%array_trimmed%0#0", + "i#0", + "i#0 (copy)", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "i#0", + "aggregate%array_trimmed%0#0", + "i#0 (copy)", + "12" + ] + }, + "1625": { + "op": "*", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0", + "i#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "i#0", + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0" + ] + }, + "1626": { + "op": "pushint 12 // 12", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "i#0", + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0", + "12" + ] + }, + "1628": { + "error": "index access is out of bounds", + "op": "extract3 // on error: index access is out of bounds", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "i#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "i#0", + "aggregate%encoded_element%0#0" + ] + }, + "1629": { + "op": "dup", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%encoded_element%0#0 (copy)", + "i#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "i#0", + "aggregate%encoded_element%0#0", + "aggregate%encoded_element%0#0 (copy)" + ] + }, + "1630": { + "op": "extract 0 4", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%extract%0#0", + "i#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "i#0", + "aggregate%encoded_element%0#0", + "aggregate%extract%0#0" + ] + }, + "1633": { + "op": "swap", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "i#0", + "aggregate%extract%0#0", + "aggregate%encoded_element%0#0" + ] + }, + "1634": { + "op": "extract 4 8", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%extract%0#0", + "aggregate%extract%1#0", + "i#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "i#0", + "aggregate%extract%0#0", + "aggregate%extract%1#0" + ] + }, + "1637": { + "op": "dig 1", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%extract%0#0", + "aggregate%extract%0#0 (copy)", + "aggregate%extract%1#0", + "i#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "i#0", + "aggregate%extract%0#0", + "aggregate%extract%1#0", + "aggregate%extract%0#0 (copy)" + ] + }, + "1639": { + "op": "len", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%extract%0#0", + "aggregate%extract%1#0", + "aggregate%length%1#0", + "i#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "i#0", + "aggregate%extract%0#0", + "aggregate%extract%1#0", + "aggregate%length%1#0" + ] + }, + "1640": { + "op": "pushint 4 // 4", + "defined_out": [ + "4", + "aggregate%array_length%1#0", + "aggregate%extract%0#0", + "aggregate%extract%1#0", + "aggregate%length%1#0", + "i#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "i#0", + "aggregate%extract%0#0", + "aggregate%extract%1#0", + "aggregate%length%1#0", + "4" + ] + }, + "1642": { + "op": "==", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%extract%0#0", + "aggregate%extract%1#0", + "aggregate%lengths_equal%0#0", + "i#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "i#0", + "aggregate%extract%0#0", + "aggregate%extract%1#0", + "aggregate%lengths_equal%0#0" + ] + }, + "1643": { + "error": "invalid size", + "op": "assert // invalid size", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "i#0", + "aggregate%extract%0#0", + "aggregate%extract%1#0" + ] + }, + "1644": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%head%4#0", + "i#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "i#0", + "aggregate%head%4#0" + ] + }, + "1645": { + "op": "dig 19", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%as_bytes%2#0", + "aggregate%head%4#0", + "i#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "i#0", + "aggregate%head%4#0", + "aggregate%as_bytes%2#0" + ] + }, + "1647": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%as_bytes%2#0", + "aggregate%head%5#0", + "i#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "i#0", + "aggregate%head%5#0" + ] + }, + "1648": { + "op": "dig 16", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%as_bytes%2#0", + "aggregate%head%5#0", + "i#0", + "methodInfos#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "i#0", + "aggregate%head%5#0", + "methodInfos#0" + ] + }, + "1650": { + "op": "dup" + }, + "1651": { + "op": "uncover 2", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%as_bytes%2#0", + "aggregate%head%5#0", + "i#0", + "methodInfos#0", + "methodInfos#0 (copy)", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "i#0", + "methodInfos#0", + "methodInfos#0 (copy)", + "aggregate%head%5#0" + ] + }, + "1653": { + "error": "max array length exceeded", + "op": "concat // on error: max array length exceeded", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%as_bytes%2#0", + "concat%0#0", + "i#0", + "methodInfos#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "i#0", + "methodInfos#0", + "concat%0#0" + ] + }, + "1654": { + "op": "swap", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "i#0", + "concat%0#0", + "methodInfos#0" + ] + }, + "1655": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "aggregate%array_length%1#0", + "aggregate%as_bytes%2#0", + "concat%0#0", + "i#0", + "methodInfos#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "i#0", + "concat%0#0", + "methodInfos#0", + "0" + ] + }, + "1656": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%as_bytes%2#0", + "concat%0#0", + "extract_uint16%0#0", + "i#0", + "methodInfos#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "i#0", + "concat%0#0", + "extract_uint16%0#0" + ] + }, + "1657": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "aggregate%array_length%1#0", + "aggregate%as_bytes%2#0", + "concat%0#0", + "extract_uint16%0#0", + "i#0", + "methodInfos#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "i#0", + "concat%0#0", + "extract_uint16%0#0", + "1" + ] + }, + "1658": { + "op": "+", + "defined_out": [ + "add%0#0", + "aggregate%array_length%1#0", + "aggregate%as_bytes%2#0", + "concat%0#0", + "i#0", + "methodInfos#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "i#0", + "concat%0#0", + "add%0#0" + ] + }, + "1659": { + "op": "itob", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%as_bytes%2#0", + "as_bytes%0#0", + "concat%0#0", + "i#0", + "methodInfos#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "i#0", + "concat%0#0", + "as_bytes%0#0" + ] + }, + "1660": { + "op": "extract 6 2", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%as_bytes%2#0", + "as_u16_bytes%0#0", + "concat%0#0", + "i#0", + "methodInfos#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "i#0", + "concat%0#0", + "as_u16_bytes%0#0" + ] + }, + "1663": { + "op": "replace2 0", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "i#0", + "methodInfos#0" + ] + }, + "1665": { + "op": "bury 16", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%as_bytes%2#0", + "i#0", + "methodInfos#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "i#0" + ] + }, + "1667": { + "op": "intc_1 // 1", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "i#0", + "1" + ] + }, + "1668": { + "op": "+", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "i#0" + ] + }, + "1669": { + "op": "bury 13", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%as_bytes%2#0", + "i#0", + "methodInfos#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ] + }, + "1671": { + "op": "b arc58_addPlugin_while_top@12" + }, + "1674": { + "block": "arc58_addPlugin_after_while@14", + "stack_in": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ], + "op": "dig 2", + "defined_out": [ + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "useRounds#0" + ] + }, + "1676": { + "op": "bz arc58_addPlugin_ternary_false@16", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ] + }, + "1679": { + "op": "global Round", + "defined_out": [ + "epochRef#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "epochRef#0" + ] + }, + "1681": { + "op": "bury 14", + "defined_out": [ + "epochRef#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ] + }, + "1683": { + "block": "arc58_addPlugin_ternary_merge@17", + "stack_in": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ], + "op": "intc_0 // 0", + "defined_out": [ + "0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "0" + ] + }, + "1684": { + "op": "bytec_0 // \"controlled_address\"", + "defined_out": [ + "\"controlled_address\"", + "0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "0", + "\"controlled_address\"" + ] + }, + "1685": { + "op": "app_global_get_ex", + "defined_out": [ + "maybe_exists%1#0", + "maybe_value%1#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "maybe_value%1#0", + "maybe_exists%1#0" + ] + }, + "1686": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "maybe_value%1#0" + ] + }, + "1687": { + "op": "global CurrentApplicationAddress", + "defined_out": [ + "maybe_value%1#0", + "tmp%20#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "maybe_value%1#0", + "tmp%20#0" + ] + }, + "1689": { + "op": "!=", + "defined_out": [ + "tmp%21#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "tmp%21#0" + ] + }, + "1690": { + "op": "bz arc58_addPlugin_after_if_else@20", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ] + }, + "1693": { + "op": "itxn_begin" + }, + "1694": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "0" + ] + }, + "1695": { + "op": "bytec_0 // \"controlled_address\"", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "0", + "\"controlled_address\"" + ] + }, + "1696": { + "op": "app_global_get_ex", + "defined_out": [ + "maybe_exists%2#0", + "maybe_value%2#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "maybe_value%2#0", + "maybe_exists%2#0" + ] + }, + "1697": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "maybe_value%2#0" + ] + }, + "1698": { + "op": "global CurrentApplicationAddress", + "defined_out": [ + "inner_txn_params%0%%param_Receiver_idx_0#0", + "maybe_value%2#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Receiver_idx_0#0" + ] + }, + "1700": { + "op": "dig 16", + "defined_out": [ + "inner_txn_params%0%%param_Receiver_idx_0#0", + "maybe_value%2#0", + "methodInfos#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "methodInfos#0" + ] + }, + "1702": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "methodInfos#0", + "0" + ] + }, + "1703": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%3#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "maybe_value%2#0", + "methodInfos#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "aggregate%array_length%3#0" + ] + }, + "1704": { + "op": "dig 19", + "defined_out": [ + "aggregate%array_length%3#0", + "escrowKey#1", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "maybe_value%2#0", + "methodInfos#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "aggregate%array_length%3#0", + "escrowKey#1" + ] + }, + "1706": { + "op": "swap", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "escrowKey#1", + "aggregate%array_length%3#0" + ] + }, + "1707": { + "callsub": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.pluginsMbr", + "op": "callsub pluginsMbr", + "defined_out": [ + "escrowKey#1", + "inner_txn_params%0%%param_Amount_idx_0#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "maybe_value%2#0", + "methodInfos#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "inner_txn_params%0%%param_Amount_idx_0#0" + ] + }, + "1710": { + "op": "itxn_field Amount", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Receiver_idx_0#0" + ] + }, + "1712": { + "op": "itxn_field Receiver", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "maybe_value%2#0" + ] + }, + "1714": { + "op": "itxn_field Sender", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ] + }, + "1716": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "escrowKey#1", + "methodInfos#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "1" + ] + }, + "1717": { + "op": "itxn_field TypeEnum", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ] + }, + "1719": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "0" + ] + }, + "1720": { + "op": "itxn_field Fee", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ] + }, + "1722": { + "op": "itxn_submit" + }, + "1723": { + "block": "arc58_addPlugin_after_if_else@20", + "stack_in": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ], + "op": "dig 9", + "defined_out": [ + "escrow#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "escrow#0" + ] + }, + "1725": { + "callsub": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.maybeNewEscrow", + "op": "callsub maybeNewEscrow", + "defined_out": [ + "escrow#0", + "escrowID#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "escrowID#0" + ] + }, + "1728": { + "op": "itob", + "defined_out": [ + "aggregate%val_as_bytes%3#0", + "escrow#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%val_as_bytes%3#0" + ] + }, + "1729": { + "op": "dig 8", + "defined_out": [ + "aggregate%val_as_bytes%3#0", + "delegationType#0", + "escrow#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%val_as_bytes%3#0", + "delegationType#0" + ] + }, + "1731": { + "op": "concat", + "defined_out": [ + "aggregate%head%8#0", + "delegationType#0", + "escrow#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%head%8#0" + ] + }, + "1732": { + "op": "dig 7", + "defined_out": [ + "aggregate%head%8#0", + "delegationType#0", + "escrow#0", + "lastValid#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%head%8#0", + "lastValid#0" + ] + }, + "1734": { + "op": "itob", + "defined_out": [ + "aggregate%head%8#0", + "aggregate%val_as_bytes%4#0", + "delegationType#0", + "escrow#0", + "lastValid#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%head%8#0", + "aggregate%val_as_bytes%4#0" + ] + }, + "1735": { + "op": "concat", + "defined_out": [ + "aggregate%head%9#0", + "delegationType#0", + "escrow#0", + "lastValid#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%head%9#0" + ] + }, + "1736": { + "op": "dig 6", + "defined_out": [ + "aggregate%head%9#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%head%9#0", + "cooldown#0" + ] + }, + "1738": { + "op": "itob", + "defined_out": [ + "aggregate%head%9#0", + "aggregate%val_as_bytes%5#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%head%9#0", + "aggregate%val_as_bytes%5#0" + ] + }, + "1739": { + "op": "concat", + "defined_out": [ + "aggregate%head%10#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%head%10#0" + ] + }, + "1740": { + "op": "bytec 23 // 0x002c", + "defined_out": [ + "0x002c", + "aggregate%head%10#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%head%10#0", + "0x002c" + ] + }, + "1742": { + "op": "concat", + "defined_out": [ + "aggregate%head%11#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%head%11#0" + ] + }, + "1743": { + "op": "bytec 9 // 0x00", + "defined_out": [ + "0x00", + "aggregate%head%11#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%head%11#0", + "0x00" + ] + }, + "1745": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "0x00", + "aggregate%head%11#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%head%11#0", + "0x00", + "0" + ] + }, + "1746": { + "op": "dig 11", + "defined_out": [ + "0", + "0x00", + "admin#0", + "aggregate%head%11#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%head%11#0", + "0x00", + "0", + "admin#0" + ] + }, + "1748": { + "op": "setbit", + "defined_out": [ + "admin#0", + "aggregate%encoded_bool%0#0", + "aggregate%head%11#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%head%11#0", + "aggregate%encoded_bool%0#0" + ] + }, + "1749": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "admin#0", + "aggregate%encoded_bool%0#0", + "aggregate%head%11#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%head%11#0", + "aggregate%encoded_bool%0#0", + "1" + ] + }, + "1750": { + "op": "dig 5", + "defined_out": [ + "1", + "admin#0", + "aggregate%encoded_bool%0#0", + "aggregate%head%11#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%head%11#0", + "aggregate%encoded_bool%0#0", + "1", + "useRounds#0" + ] + }, + "1752": { + "op": "setbit", + "defined_out": [ + "admin#0", + "aggregate%head%11#0", + "aggregate%set_bit%0#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%head%11#0", + "aggregate%set_bit%0#0" + ] + }, + "1753": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "admin#0", + "aggregate%head%11#0", + "aggregate%set_bit%0#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%head%11#0", + "aggregate%set_bit%0#0", + "2" + ] + }, + "1754": { + "op": "dig 4", + "defined_out": [ + "2", + "admin#0", + "aggregate%head%11#0", + "aggregate%set_bit%0#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%head%11#0", + "aggregate%set_bit%0#0", + "2", + "useExecutionKey#0" + ] + }, + "1756": { + "op": "setbit", + "defined_out": [ + "admin#0", + "aggregate%head%11#0", + "aggregate%set_bit%1#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%head%11#0", + "aggregate%set_bit%1#0" + ] + }, + "1757": { + "op": "concat", + "defined_out": [ + "admin#0", + "aggregate%head%12#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%head%12#0" + ] + }, + "1758": { + "op": "dig 18", + "defined_out": [ + "admin#0", + "aggregate%as_bytes%2#0", + "aggregate%head%12#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%head%12#0", + "aggregate%as_bytes%2#0" + ] + }, + "1760": { + "op": "concat", + "defined_out": [ + "admin#0", + "aggregate%as_bytes%2#0", + "aggregate%head%13#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%head%13#0" + ] + }, + "1761": { + "op": "dig 14", + "defined_out": [ + "admin#0", + "aggregate%as_bytes%2#0", + "aggregate%head%13#0", + "cooldown#0", + "delegationType#0", + "epochRef#0", + "escrow#0", + "lastValid#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%head%13#0", + "epochRef#0" + ] + }, + "1763": { + "op": "itob", + "defined_out": [ + "admin#0", + "aggregate%as_bytes%2#0", + "aggregate%head%13#0", + "aggregate%val_as_bytes%7#0", + "cooldown#0", + "delegationType#0", + "epochRef#0", + "escrow#0", + "lastValid#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%head%13#0", + "aggregate%val_as_bytes%7#0" + ] + }, + "1764": { + "op": "concat", + "defined_out": [ + "admin#0", + "aggregate%as_bytes%2#0", + "aggregate%head%14#0", + "cooldown#0", + "delegationType#0", + "epochRef#0", + "escrow#0", + "lastValid#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%head%14#0" + ] + }, + "1765": { + "op": "dig 15", + "defined_out": [ + "admin#0", + "aggregate%as_bytes%2#0", + "aggregate%head%14#0", + "cooldown#0", + "delegationType#0", + "epochRef#0", + "escrow#0", + "lastValid#0", + "methodInfos#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%head%14#0", + "methodInfos#0" + ] + }, + "1767": { + "op": "concat", + "defined_out": [ + "admin#0", + "aggregate%as_bytes%2#0", + "aggregate%concat%1#0", + "cooldown#0", + "delegationType#0", + "epochRef#0", + "escrow#0", + "lastValid#0", + "methodInfos#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%concat%1#0" + ] + }, + "1768": { + "op": "bytec 4 // \"p\"", + "defined_out": [ + "\"p\"", + "admin#0", + "aggregate%as_bytes%2#0", + "aggregate%concat%1#0", + "cooldown#0", + "delegationType#0", + "epochRef#0", + "escrow#0", + "lastValid#0", + "methodInfos#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%concat%1#0", + "\"p\"" + ] + }, + "1770": { + "op": "dig 17", + "defined_out": [ + "\"p\"", + "admin#0", + "aggregate%as_bytes%2#0", + "aggregate%concat%1#0", + "cooldown#0", + "delegationType#0", + "epochRef#0", + "escrow#0", + "key#0", + "lastValid#0", + "methodInfos#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%concat%1#0", + "\"p\"", + "key#0" + ] + }, + "1772": { + "op": "concat", + "defined_out": [ + "admin#0", + "aggregate%as_bytes%2#0", + "aggregate%concat%1#0", + "box_prefixed_key%0#0", + "cooldown#0", + "delegationType#0", + "epochRef#0", + "escrow#0", + "key#0", + "lastValid#0", + "methodInfos#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%concat%1#0", + "box_prefixed_key%0#0" + ] + }, + "1773": { + "op": "dup", + "defined_out": [ + "admin#0", + "aggregate%as_bytes%2#0", + "aggregate%concat%1#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "cooldown#0", + "delegationType#0", + "epochRef#0", + "escrow#0", + "key#0", + "lastValid#0", + "methodInfos#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%concat%1#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)" + ] + }, + "1774": { + "op": "box_del", + "defined_out": [ + "admin#0", + "aggregate%as_bytes%2#0", + "aggregate%concat%1#0", + "box_prefixed_key%0#0", + "cooldown#0", + "delegationType#0", + "epochRef#0", + "escrow#0", + "key#0", + "lastValid#0", + "methodInfos#0", + "useExecutionKey#0", + "useRounds#0", + "{box_del}" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%concat%1#0", + "box_prefixed_key%0#0", + "{box_del}" + ] + }, + "1775": { + "op": "pop", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "aggregate%concat%1#0", + "box_prefixed_key%0#0" + ] + }, + "1776": { + "op": "swap", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "aggregate%concat%1#0" + ] + }, + "1777": { + "op": "box_put", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ] + }, + "1778": { + "op": "bytec_3 // \"last_user_interaction\"", + "defined_out": [ + "\"last_user_interaction\"", + "admin#0", + "aggregate%as_bytes%2#0", + "cooldown#0", + "delegationType#0", + "epochRef#0", + "escrow#0", + "key#0", + "lastValid#0", + "methodInfos#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "\"last_user_interaction\"" + ] + }, + "1779": { + "op": "global LatestTimestamp", + "defined_out": [ + "\"last_user_interaction\"", + "admin#0", + "aggregate%as_bytes%2#0", + "cooldown#0", + "delegationType#0", + "epochRef#0", + "escrow#0", + "key#0", + "lastValid#0", + "methodInfos#0", + "tmp%0#2", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "\"last_user_interaction\"", + "tmp%0#2" + ] + }, + "1781": { + "op": "app_global_put", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ] + }, + "1782": { + "op": "bytec 6 // \"last_change\"", + "defined_out": [ + "\"last_change\"", + "admin#0", + "aggregate%as_bytes%2#0", + "cooldown#0", + "delegationType#0", + "epochRef#0", + "escrow#0", + "key#0", + "lastValid#0", + "methodInfos#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "\"last_change\"" + ] + }, + "1784": { + "op": "global LatestTimestamp", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "\"last_change\"", + "tmp%0#2" + ] + }, + "1786": { + "op": "app_global_put", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ] + }, + "1787": { + "op": "intc_1 // 1", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "1" + ] + }, + "1788": { + "op": "return", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ] + }, + "1789": { + "block": "arc58_addPlugin_ternary_false@16", + "stack_in": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ], + "op": "global LatestTimestamp", + "defined_out": [ + "epochRef#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "epochRef#0" + ] + }, + "1791": { + "op": "bury 14", + "defined_out": [ + "epochRef#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ] + }, + "1793": { + "op": "b arc58_addPlugin_ternary_merge@17" + }, + "1796": { + "block": "arc58_addPlugin_if_body@10", + "stack_in": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ], + "op": "dig 9", + "defined_out": [ + "escrow#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "escrow#0" + ] + }, + "1798": { + "op": "bytec_1 // \"\"", + "defined_out": [ + "\"\"", + "escrow#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "escrow#0", + "\"\"" + ] + }, + "1799": { + "op": "!=", + "defined_out": [ + "escrow#0", + "tmp%11#1" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "tmp%11#1" + ] + }, + "1800": { + "error": "escrow must be set if defaultToEscrow is true", + "op": "assert // escrow must be set if defaultToEscrow is true", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ] + }, + "1801": { + "op": "bytec_1 // \"\"", + "defined_out": [ + "escrow#0", + "escrowKey#1" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "escrowKey#1" + ] + }, + "1802": { + "op": "bury 17", + "defined_out": [ + "escrow#0", + "escrowKey#1" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ] + }, + "1804": { + "op": "b arc58_addPlugin_after_if_else@11" + }, + "1807": { + "block": "arc58_addPlugin_bool_false@8", + "stack_in": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ], + "op": "intc_0 // 0", + "defined_out": [ + "and_result%1#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "and_result%1#0" + ] + }, + "1808": { + "op": "b arc58_addPlugin_bool_merge@9" + }, + "1811": { + "block": "arc58_addPlugin_bool_false@4", + "stack_in": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0" + ], + "op": "intc_0 // 0", + "defined_out": [ + "and_result%0#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "epochRef#0", + "i#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%1#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "and_result%0#0" + ] + }, + "1812": { + "op": "b arc58_addPlugin_bool_merge@5" + }, + "1815": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_removePlugin[routing]", + "params": {}, + "block": "arc58_removePlugin", + "stack_in": [], + "op": "txna ApplicationArgs 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] + }, + "1818": { + "op": "dup", + "defined_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ] + }, + "1819": { + "op": "len", + "defined_out": [ + "len%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "len%0#0" + ] + }, + "1820": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "len%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "len%0#0", + "8" + ] + }, + "1821": { + "op": "==", + "defined_out": [ + "eq%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "eq%0#0" + ] + }, + "1822": { + "error": "invalid number of bytes for uint64", + "op": "assert // invalid number of bytes for uint64", + "stack_out": [ + "tmp%0#0" + ] + }, + "1823": { + "op": "btoi", + "defined_out": [ + "plugin#0" + ], + "stack_out": [ + "plugin#0" + ] + }, + "1824": { + "op": "txna ApplicationArgs 2", + "defined_out": [ + "caller#0", + "plugin#0" + ], + "stack_out": [ + "plugin#0", + "caller#0" + ] + }, + "1827": { + "op": "dup", + "defined_out": [ + "caller#0", + "caller#0 (copy)", + "plugin#0" + ], + "stack_out": [ + "plugin#0", + "caller#0", + "caller#0 (copy)" + ] + }, + "1828": { + "op": "len", + "defined_out": [ + "caller#0", + "len%1#0", + "plugin#0" + ], + "stack_out": [ + "plugin#0", + "caller#0", + "len%1#0" + ] + }, + "1829": { + "op": "pushint 32 // 32", + "defined_out": [ + "32", + "caller#0", + "len%1#0", + "plugin#0" + ], + "stack_out": [ + "plugin#0", + "caller#0", + "len%1#0", + "32" + ] + }, + "1831": { + "op": "==", + "defined_out": [ + "caller#0", + "eq%1#0", + "plugin#0" + ], + "stack_out": [ + "plugin#0", + "caller#0", + "eq%1#0" + ] + }, + "1832": { + "error": "invalid number of bytes for uint8[32]", + "op": "assert // invalid number of bytes for uint8[32]", + "stack_out": [ + "plugin#0", + "caller#0" + ] + }, + "1833": { + "op": "txna ApplicationArgs 3", + "defined_out": [ + "caller#0", + "plugin#0", + "tmp%3#0" + ], + "stack_out": [ + "plugin#0", + "caller#0", + "tmp%3#0" + ] + }, + "1836": { + "op": "dup", + "defined_out": [ + "caller#0", + "plugin#0", + "tmp%3#0", + "tmp%3#0 (copy)" + ], + "stack_out": [ + "plugin#0", + "caller#0", + "tmp%3#0", + "tmp%3#0 (copy)" + ] + }, + "1837": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "caller#0", + "plugin#0", + "tmp%3#0", + "tmp%3#0 (copy)" + ], + "stack_out": [ + "plugin#0", + "caller#0", + "tmp%3#0", + "tmp%3#0 (copy)", + "0" + ] + }, + "1838": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%0#0", + "caller#0", + "plugin#0", + "tmp%3#0" + ], + "stack_out": [ + "plugin#0", + "caller#0", + "tmp%3#0", + "aggregate%array_length%0#0" + ] + }, + "1839": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "aggregate%array_length%0#0", + "caller#0", + "plugin#0", + "tmp%3#0" + ], + "stack_out": [ + "plugin#0", + "caller#0", + "tmp%3#0", + "aggregate%array_length%0#0", + "2" + ] + }, + "1840": { + "op": "+", + "defined_out": [ + "add%0#0", + "caller#0", + "plugin#0", + "tmp%3#0" + ], + "stack_out": [ + "plugin#0", + "caller#0", + "tmp%3#0", + "add%0#0" + ] + }, + "1841": { + "op": "dig 1", + "stack_out": [ + "plugin#0", + "caller#0", + "tmp%3#0", + "add%0#0", + "tmp%3#0 (copy)" + ] + }, + "1843": { + "op": "len", + "defined_out": [ + "add%0#0", + "caller#0", + "len%2#0", + "plugin#0", + "tmp%3#0" + ], + "stack_out": [ + "plugin#0", + "caller#0", + "tmp%3#0", + "add%0#0", + "len%2#0" + ] + }, + "1844": { + "op": "==", + "defined_out": [ + "caller#0", + "eq%2#0", + "plugin#0", + "tmp%3#0" + ], + "stack_out": [ + "plugin#0", + "caller#0", + "tmp%3#0", + "eq%2#0" + ] + }, + "1845": { + "error": "invalid number of bytes for (len+utf8[])", + "op": "assert // invalid number of bytes for (len+utf8[])", + "stack_out": [ + "plugin#0", + "caller#0", + "tmp%3#0" + ] + }, + "1846": { + "op": "extract 2 0", + "defined_out": [ + "caller#0", + "escrow#0", + "plugin#0" + ], + "stack_out": [ + "plugin#0", + "caller#0", + "escrow#0" + ] + }, + "1849": { + "op": "dup", + "stack_out": [ + "plugin#0", + "caller#0", + "escrow#0", + "escrow#0" + ] + }, + "1850": { + "op": "cover 3", + "defined_out": [ + "caller#0", + "escrow#0", + "plugin#0" + ], + "stack_out": [ + "escrow#0", + "plugin#0", + "caller#0", + "escrow#0" + ] + }, + "1852": { + "op": "txn Sender", + "defined_out": [ + "caller#0", + "escrow#0", + "plugin#0", + "tmp%0#1" + ], + "stack_out": [ + "escrow#0", + "plugin#0", + "caller#0", + "escrow#0", + "tmp%0#1" + ] + }, + "1854": { + "op": "intc_0 // 0", + "stack_out": [ + "escrow#0", + "plugin#0", + "caller#0", + "escrow#0", + "tmp%0#1", + "0" + ] + }, + "1855": { + "op": "bytec_2 // \"admin\"", + "defined_out": [ + "\"admin\"", + "0", + "caller#0", + "escrow#0", + "plugin#0", + "tmp%0#1" + ], + "stack_out": [ + "escrow#0", + "plugin#0", + "caller#0", + "escrow#0", + "tmp%0#1", + "0", + "\"admin\"" + ] + }, + "1856": { + "op": "app_global_get_ex", + "defined_out": [ + "caller#0", + "escrow#0", + "maybe_exists%0#0", + "maybe_value%0#0", + "plugin#0", + "tmp%0#1" + ], + "stack_out": [ + "escrow#0", + "plugin#0", + "caller#0", + "escrow#0", + "tmp%0#1", + "maybe_value%0#0", + "maybe_exists%0#0" + ] + }, + "1857": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "escrow#0", + "plugin#0", + "caller#0", + "escrow#0", + "tmp%0#1", + "maybe_value%0#0" + ] + }, + "1858": { + "op": "==", + "defined_out": [ + "caller#0", + "escrow#0", + "plugin#0", + "tmp%1#1" + ], + "stack_out": [ + "escrow#0", + "plugin#0", + "caller#0", + "escrow#0", + "tmp%1#1" + ] + }, + "1859": { + "error": "admin only", + "op": "assert // admin only", + "stack_out": [ + "escrow#0", + "plugin#0", + "caller#0", + "escrow#0" + ] + }, + "1860": { + "op": "uncover 2", + "stack_out": [ + "escrow#0", + "caller#0", + "escrow#0", + "plugin#0" + ] + }, + "1862": { + "op": "itob", + "defined_out": [ + "aggregate%val_as_bytes%0#0", + "caller#0", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "caller#0", + "escrow#0", + "aggregate%val_as_bytes%0#0" + ] + }, + "1863": { + "op": "uncover 2", + "stack_out": [ + "escrow#0", + "escrow#0", + "aggregate%val_as_bytes%0#0", + "caller#0" + ] + }, + "1865": { + "op": "concat", + "defined_out": [ + "aggregate%head%1#0", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "escrow#0", + "aggregate%head%1#0" + ] + }, + "1866": { + "op": "dig 1", + "defined_out": [ + "aggregate%head%1#0", + "escrow#0", + "escrow#0 (copy)" + ], + "stack_out": [ + "escrow#0", + "escrow#0", + "aggregate%head%1#0", + "escrow#0 (copy)" + ] + }, + "1868": { + "op": "len", + "defined_out": [ + "aggregate%head%1#0", + "aggregate%length%0#0", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "escrow#0", + "aggregate%head%1#0", + "aggregate%length%0#0" + ] + }, + "1869": { + "op": "itob", + "defined_out": [ + "aggregate%as_bytes%0#0", + "aggregate%head%1#0", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "escrow#0", + "aggregate%head%1#0", + "aggregate%as_bytes%0#0" + ] + }, + "1870": { + "op": "extract 6 2", + "defined_out": [ + "aggregate%head%1#0", + "aggregate%length_uint16%0#0", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "escrow#0", + "aggregate%head%1#0", + "aggregate%length_uint16%0#0" + ] + }, + "1873": { + "op": "uncover 2", + "stack_out": [ + "escrow#0", + "aggregate%head%1#0", + "aggregate%length_uint16%0#0", + "escrow#0" + ] + }, + "1875": { + "op": "concat", + "defined_out": [ + "aggregate%encoded_value%0#0", + "aggregate%head%1#0", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "aggregate%head%1#0", + "aggregate%encoded_value%0#0" + ] + }, + "1876": { + "op": "swap", + "stack_out": [ + "escrow#0", + "aggregate%encoded_value%0#0", + "aggregate%head%1#0" + ] + }, + "1877": { + "op": "bytec 12 // 0x002a", + "defined_out": [ + "0x002a", + "aggregate%encoded_value%0#0", + "aggregate%head%1#0", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "aggregate%encoded_value%0#0", + "aggregate%head%1#0", + "0x002a" + ] + }, + "1879": { + "op": "concat", + "defined_out": [ + "aggregate%encoded_value%0#0", + "aggregate%head%2#0", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "aggregate%encoded_value%0#0", + "aggregate%head%2#0" + ] + }, + "1880": { + "op": "swap", + "stack_out": [ + "escrow#0", + "aggregate%head%2#0", + "aggregate%encoded_value%0#0" + ] + }, + "1881": { + "op": "concat", + "defined_out": [ + "escrow#0", + "key#0" + ], + "stack_out": [ + "escrow#0", + "key#0" + ] + }, + "1882": { + "op": "bytec 4 // \"p\"", + "defined_out": [ + "\"p\"", + "escrow#0", + "key#0" + ], + "stack_out": [ + "escrow#0", + "key#0", + "\"p\"" + ] + }, + "1884": { + "op": "swap", + "stack_out": [ + "escrow#0", + "\"p\"", + "key#0" + ] + }, + "1885": { + "op": "concat", + "defined_out": [ + "box_prefixed_key%0#0", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "box_prefixed_key%0#0" + ] + }, + "1886": { + "op": "dup", + "defined_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)" + ] + }, + "1887": { + "op": "box_len", + "defined_out": [ + "_%0#0", + "box_prefixed_key%0#0", + "escrow#0", + "maybe_exists%1#0" + ], + "stack_out": [ + "escrow#0", + "box_prefixed_key%0#0", + "_%0#0", + "maybe_exists%1#0" + ] + }, + "1888": { + "op": "bury 1", + "stack_out": [ + "escrow#0", + "box_prefixed_key%0#0", + "maybe_exists%1#0" + ] + }, + "1890": { + "error": "plugin does not exist", + "op": "assert // plugin does not exist", + "stack_out": [ + "escrow#0", + "box_prefixed_key%0#0" + ] + }, + "1891": { + "op": "dup", + "stack_out": [ + "escrow#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)" + ] + }, + "1892": { + "op": "pushint 44 // 44", + "defined_out": [ + "44", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "44" + ] + }, + "1894": { + "op": "intc_2 // 2", + "stack_out": [ + "escrow#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "44", + "2" + ] + }, + "1895": { + "op": "box_extract", + "defined_out": [ + "box%box_extract%0#0", + "box_prefixed_key%0#0", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "box_prefixed_key%0#0", + "box%box_extract%0#0" + ] + }, + "1896": { + "op": "btoi", + "defined_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "methodsLength#0" + ], + "stack_out": [ + "escrow#0", + "box_prefixed_key%0#0", + "methodsLength#0" + ] + }, + "1897": { + "op": "swap", + "defined_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "methodsLength#0" + ], + "stack_out": [ + "escrow#0", + "methodsLength#0", + "box_prefixed_key%0#0" + ] + }, + "1898": { + "op": "box_del", + "defined_out": [ + "escrow#0", + "methodsLength#0", + "{box_del}" + ], + "stack_out": [ + "escrow#0", + "methodsLength#0", + "{box_del}" + ] + }, + "1899": { + "op": "pop", + "stack_out": [ + "escrow#0", + "methodsLength#0" + ] + }, + "1900": { + "op": "intc_0 // 0", + "stack_out": [ + "escrow#0", + "methodsLength#0", + "0" + ] + }, + "1901": { + "op": "bytec_0 // \"controlled_address\"", + "defined_out": [ + "\"controlled_address\"", + "0", + "escrow#0", + "methodsLength#0" + ], + "stack_out": [ + "escrow#0", + "methodsLength#0", + "0", + "\"controlled_address\"" + ] + }, + "1902": { + "op": "app_global_get_ex", + "defined_out": [ + "escrow#0", + "maybe_exists%2#0", + "maybe_value%1#0", + "methodsLength#0" + ], + "stack_out": [ + "escrow#0", + "methodsLength#0", + "maybe_value%1#0", + "maybe_exists%2#0" + ] + }, + "1903": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "escrow#0", + "methodsLength#0", + "maybe_value%1#0" + ] + }, + "1904": { + "op": "global CurrentApplicationAddress", + "defined_out": [ + "escrow#0", + "maybe_value%1#0", + "methodsLength#0", + "tmp%5#0" + ], + "stack_out": [ + "escrow#0", + "methodsLength#0", + "maybe_value%1#0", + "tmp%5#0" + ] + }, + "1906": { + "op": "!=", + "defined_out": [ + "escrow#0", + "methodsLength#0", + "tmp%6#0" + ], + "stack_out": [ + "escrow#0", + "methodsLength#0", + "tmp%6#0" + ] + }, + "1907": { + "op": "bz arc58_removePlugin_after_if_else@4", + "stack_out": [ + "escrow#0", + "methodsLength#0" + ] + }, + "1910": { + "op": "itxn_begin" + }, + "1911": { + "op": "intc_0 // 0", + "stack_out": [ + "escrow#0", + "methodsLength#0", + "0" + ] + }, + "1912": { + "op": "bytec_0 // \"controlled_address\"", + "stack_out": [ + "escrow#0", + "methodsLength#0", + "0", + "\"controlled_address\"" + ] + }, + "1913": { + "op": "app_global_get_ex", + "defined_out": [ + "escrow#0", + "maybe_exists%3#0", + "maybe_value%2#0", + "methodsLength#0" + ], + "stack_out": [ + "escrow#0", + "methodsLength#0", + "maybe_value%2#0", + "maybe_exists%3#0" + ] + }, + "1914": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "escrow#0", + "methodsLength#0", + "maybe_value%2#0" + ] + }, + "1915": { + "op": "dig 2", + "stack_out": [ + "escrow#0", + "methodsLength#0", + "maybe_value%2#0", + "escrow#0" + ] + }, + "1917": { + "op": "dig 2", + "stack_out": [ + "escrow#0", + "methodsLength#0", + "maybe_value%2#0", + "escrow#0", + "methodsLength#0" + ] + }, + "1919": { + "callsub": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.pluginsMbr", + "op": "callsub pluginsMbr", + "defined_out": [ + "escrow#0", + "inner_txn_params%0%%param_Amount_idx_0#0", + "maybe_value%2#0", + "methodsLength#0" + ], + "stack_out": [ + "escrow#0", + "methodsLength#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Amount_idx_0#0" + ] + }, + "1922": { + "op": "itxn_field Amount", + "stack_out": [ + "escrow#0", + "methodsLength#0", + "maybe_value%2#0" + ] + }, + "1924": { + "op": "itxn_field Receiver", + "stack_out": [ + "escrow#0", + "methodsLength#0" + ] + }, + "1926": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "escrow#0", + "methodsLength#0" + ], + "stack_out": [ + "escrow#0", + "methodsLength#0", + "1" + ] + }, + "1927": { + "op": "itxn_field TypeEnum", + "stack_out": [ + "escrow#0", + "methodsLength#0" + ] + }, + "1929": { + "op": "intc_0 // 0", + "stack_out": [ + "escrow#0", + "methodsLength#0", + "0" + ] + }, + "1930": { + "op": "itxn_field Fee", + "stack_out": [ + "escrow#0", + "methodsLength#0" + ] + }, + "1932": { + "op": "itxn_submit" + }, + "1933": { + "block": "arc58_removePlugin_after_if_else@4", + "stack_in": [ + "escrow#0", + "methodsLength#0" + ], + "op": "bytec_3 // \"last_user_interaction\"", + "defined_out": [ + "\"last_user_interaction\"" + ], + "stack_out": [ + "escrow#0", + "methodsLength#0", + "\"last_user_interaction\"" + ] + }, + "1934": { + "op": "global LatestTimestamp", + "defined_out": [ + "\"last_user_interaction\"", + "tmp%0#2" + ], + "stack_out": [ + "escrow#0", + "methodsLength#0", + "\"last_user_interaction\"", + "tmp%0#2" + ] + }, + "1936": { + "op": "app_global_put", + "stack_out": [ + "escrow#0", + "methodsLength#0" + ] + }, + "1937": { + "op": "bytec 6 // \"last_change\"", + "defined_out": [ + "\"last_change\"" + ], + "stack_out": [ + "escrow#0", + "methodsLength#0", + "\"last_change\"" + ] + }, + "1939": { + "op": "global LatestTimestamp", + "stack_out": [ + "escrow#0", + "methodsLength#0", + "\"last_change\"", + "tmp%0#2" + ] + }, + "1941": { + "op": "app_global_put", + "stack_out": [ + "escrow#0", + "methodsLength#0" + ] + }, + "1942": { + "op": "intc_1 // 1", + "defined_out": [ + "1" + ], + "stack_out": [ + "escrow#0", + "methodsLength#0", + "1" + ] + }, + "1943": { + "op": "return", + "stack_out": [ + "escrow#0", + "methodsLength#0" + ] + }, + "1944": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_addNamedPlugin[routing]", + "params": {}, + "block": "arc58_addNamedPlugin", + "stack_in": [], + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%as_bytes%2#0" + ] + }, + "1945": { + "op": "dupn 3", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0" + ] + }, + "1947": { + "op": "bytec_1 // \"\"", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0" + ] + }, + "1948": { + "op": "dup", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0" + ] + }, + "1949": { + "op": "txna ApplicationArgs 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "tmp%0#0" + ] + }, + "1952": { + "op": "dup", + "defined_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "tmp%0#0", + "tmp%0#0 (copy)" + ] + }, + "1953": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "tmp%0#0", + "tmp%0#0 (copy)", + "0" + ] + }, + "1954": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "tmp%0#0", + "aggregate%array_length%0#0" + ] + }, + "1955": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "aggregate%array_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "tmp%0#0", + "aggregate%array_length%0#0", + "2" + ] + }, + "1956": { + "op": "+", + "defined_out": [ + "add%0#0", + "tmp%0#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "tmp%0#0", + "add%0#0" + ] + }, + "1957": { + "op": "dig 1", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "tmp%0#0", + "add%0#0", + "tmp%0#0 (copy)" + ] + }, + "1959": { + "op": "len", + "defined_out": [ + "add%0#0", + "len%0#0", + "tmp%0#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "tmp%0#0", + "add%0#0", + "len%0#0" + ] + }, + "1960": { + "op": "==", + "defined_out": [ + "eq%0#0", + "tmp%0#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "tmp%0#0", + "eq%0#0" + ] + }, + "1961": { + "error": "invalid number of bytes for (len+utf8[])", + "op": "assert // invalid number of bytes for (len+utf8[])", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "tmp%0#0" + ] + }, + "1962": { + "op": "extract 2 0", + "defined_out": [ + "name#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0" + ] + }, + "1965": { + "op": "dup", + "defined_out": [ + "name#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "name#0" + ] + }, + "1966": { + "op": "txna ApplicationArgs 2", + "defined_out": [ + "name#0", + "tmp%2#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "name#0", + "tmp%2#0" + ] + }, + "1969": { + "op": "dup", + "defined_out": [ + "name#0", + "tmp%2#0", + "tmp%2#0 (copy)" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "name#0", + "tmp%2#0", + "tmp%2#0 (copy)" + ] + }, + "1970": { + "op": "len", + "defined_out": [ + "len%1#0", + "name#0", + "tmp%2#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "name#0", + "tmp%2#0", + "len%1#0" + ] + }, + "1971": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "len%1#0", + "name#0", + "tmp%2#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "name#0", + "tmp%2#0", + "len%1#0", + "8" + ] + }, + "1972": { + "op": "==", + "defined_out": [ + "eq%1#0", + "name#0", + "tmp%2#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "name#0", + "tmp%2#0", + "eq%1#0" + ] + }, + "1973": { + "error": "invalid number of bytes for uint64", + "op": "assert // invalid number of bytes for uint64", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "name#0", + "tmp%2#0" + ] + }, + "1974": { + "op": "btoi", + "defined_out": [ + "name#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "name#0", + "plugin#0" + ] + }, + "1975": { + "op": "swap", + "defined_out": [ + "name#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "name#0" + ] + }, + "1976": { + "op": "txna ApplicationArgs 3" + }, + "1979": { + "op": "dup", + "defined_out": [ + "caller#0", + "name#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "name#0", + "caller#0", + "caller#0" + ] + }, + "1980": { + "op": "cover 2", + "defined_out": [ + "caller#0", + "name#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "name#0", + "caller#0" + ] + }, + "1982": { + "op": "len", + "defined_out": [ + "caller#0", + "len%2#0", + "name#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "name#0", + "len%2#0" + ] + }, + "1983": { + "op": "pushint 32 // 32", + "defined_out": [ + "32", + "caller#0", + "len%2#0", + "name#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "name#0", + "len%2#0", + "32" + ] + }, + "1985": { + "op": "==", + "defined_out": [ + "caller#0", + "eq%2#0", + "name#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "name#0", + "eq%2#0" + ] + }, + "1986": { + "error": "invalid number of bytes for uint8[32]", + "op": "assert // invalid number of bytes for uint8[32]", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "name#0" + ] + }, + "1987": { + "op": "txna ApplicationArgs 4", + "defined_out": [ + "caller#0", + "name#0", + "plugin#0", + "tmp%5#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "name#0", + "tmp%5#0" + ] + }, + "1990": { + "op": "dup", + "defined_out": [ + "caller#0", + "name#0", + "plugin#0", + "tmp%5#0", + "tmp%5#0 (copy)" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "name#0", + "tmp%5#0", + "tmp%5#0 (copy)" + ] + }, + "1991": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "name#0", + "tmp%5#0", + "tmp%5#0 (copy)", + "0" + ] + }, + "1992": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%1#0", + "caller#0", + "name#0", + "plugin#0", + "tmp%5#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "name#0", + "tmp%5#0", + "aggregate%array_length%1#0" + ] + }, + "1993": { + "op": "intc_2 // 2", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "name#0", + "tmp%5#0", + "aggregate%array_length%1#0", + "2" + ] + }, + "1994": { + "op": "+", + "defined_out": [ + "add%1#0", + "caller#0", + "name#0", + "plugin#0", + "tmp%5#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "name#0", + "tmp%5#0", + "add%1#0" + ] + }, + "1995": { + "op": "dig 1", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "name#0", + "tmp%5#0", + "add%1#0", + "tmp%5#0 (copy)" + ] + }, + "1997": { + "op": "len", + "defined_out": [ + "add%1#0", + "caller#0", + "len%3#0", + "name#0", + "plugin#0", + "tmp%5#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "name#0", + "tmp%5#0", + "add%1#0", + "len%3#0" + ] + }, + "1998": { + "op": "==", + "defined_out": [ + "caller#0", + "eq%3#0", + "name#0", + "plugin#0", + "tmp%5#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "name#0", + "tmp%5#0", + "eq%3#0" + ] + }, + "1999": { + "error": "invalid number of bytes for (len+utf8[])", + "op": "assert // invalid number of bytes for (len+utf8[])", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "name#0", + "tmp%5#0" + ] + }, + "2000": { + "op": "extract 2 0", + "defined_out": [ + "caller#0", + "escrow#0", + "name#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "name#0", + "escrow#0" + ] + }, + "2003": { + "op": "swap", + "defined_out": [ + "caller#0", + "escrow#0", + "name#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "name#0" + ] + }, + "2004": { + "op": "txna ApplicationArgs 5", + "defined_out": [ + "caller#0", + "escrow#0", + "name#0", + "plugin#0", + "tmp%7#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "name#0", + "tmp%7#0" + ] + }, + "2007": { + "op": "dup", + "defined_out": [ + "caller#0", + "escrow#0", + "name#0", + "plugin#0", + "tmp%7#0", + "tmp%7#0 (copy)" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "name#0", + "tmp%7#0", + "tmp%7#0 (copy)" + ] + }, + "2008": { + "op": "len", + "defined_out": [ + "caller#0", + "escrow#0", + "len%4#0", + "name#0", + "plugin#0", + "tmp%7#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "name#0", + "tmp%7#0", + "len%4#0" + ] + }, + "2009": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "caller#0", + "escrow#0", + "len%4#0", + "name#0", + "plugin#0", + "tmp%7#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "name#0", + "tmp%7#0", + "len%4#0", + "1" + ] + }, + "2010": { + "op": "==", + "defined_out": [ + "caller#0", + "eq%4#0", + "escrow#0", + "name#0", + "plugin#0", + "tmp%7#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "name#0", + "tmp%7#0", + "eq%4#0" + ] + }, + "2011": { + "error": "invalid number of bytes for bool8", + "op": "assert // invalid number of bytes for bool8", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "name#0", + "tmp%7#0" + ] + }, + "2012": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "name#0", + "tmp%7#0", + "0" + ] + }, + "2013": { + "op": "getbit", + "defined_out": [ + "admin#0", + "caller#0", + "escrow#0", + "name#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "name#0", + "admin#0" + ] + }, + "2014": { + "op": "swap", + "defined_out": [ + "admin#0", + "caller#0", + "escrow#0", + "name#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "name#0" + ] + }, + "2015": { + "op": "txna ApplicationArgs 6" + }, + "2018": { + "op": "dup", + "defined_out": [ + "admin#0", + "caller#0", + "delegationType#0", + "escrow#0", + "name#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "name#0", + "delegationType#0", + "delegationType#0" + ] + }, + "2019": { + "op": "cover 2", + "defined_out": [ + "admin#0", + "caller#0", + "delegationType#0", + "escrow#0", + "name#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "name#0", + "delegationType#0" + ] + }, + "2021": { + "op": "dup", + "defined_out": [ + "admin#0", + "caller#0", + "delegationType#0", + "delegationType#0 (copy)", + "escrow#0", + "name#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "name#0", + "delegationType#0", + "delegationType#0 (copy)" + ] + }, + "2022": { + "op": "len", + "defined_out": [ + "admin#0", + "caller#0", + "delegationType#0", + "escrow#0", + "len%5#0", + "name#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "name#0", + "delegationType#0", + "len%5#0" + ] + }, + "2023": { + "op": "intc_1 // 1", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "name#0", + "delegationType#0", + "len%5#0", + "1" + ] + }, + "2024": { + "op": "==", + "defined_out": [ + "admin#0", + "caller#0", + "delegationType#0", + "eq%5#0", + "escrow#0", + "name#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "name#0", + "delegationType#0", + "eq%5#0" + ] + }, + "2025": { + "error": "invalid number of bytes for uint8", + "op": "assert // invalid number of bytes for uint8", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "name#0", + "delegationType#0" + ] + }, + "2026": { + "op": "txna ApplicationArgs 7", + "defined_out": [ + "admin#0", + "caller#0", + "delegationType#0", + "escrow#0", + "name#0", + "plugin#0", + "tmp%10#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "name#0", + "delegationType#0", + "tmp%10#0" + ] + }, + "2029": { + "op": "dup", + "defined_out": [ + "admin#0", + "caller#0", + "delegationType#0", + "escrow#0", + "name#0", + "plugin#0", + "tmp%10#0", + "tmp%10#0 (copy)" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "name#0", + "delegationType#0", + "tmp%10#0", + "tmp%10#0 (copy)" + ] + }, + "2030": { + "op": "len", + "defined_out": [ + "admin#0", + "caller#0", + "delegationType#0", + "escrow#0", + "len%6#0", + "name#0", + "plugin#0", + "tmp%10#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "name#0", + "delegationType#0", + "tmp%10#0", + "len%6#0" + ] + }, + "2031": { + "op": "intc_3 // 8", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "name#0", + "delegationType#0", + "tmp%10#0", + "len%6#0", + "8" + ] + }, + "2032": { + "op": "==", + "defined_out": [ + "admin#0", + "caller#0", + "delegationType#0", + "eq%6#0", + "escrow#0", + "name#0", + "plugin#0", + "tmp%10#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "name#0", + "delegationType#0", + "tmp%10#0", + "eq%6#0" + ] + }, + "2033": { + "error": "invalid number of bytes for uint64", + "op": "assert // invalid number of bytes for uint64", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "name#0", + "delegationType#0", + "tmp%10#0" + ] + }, + "2034": { + "op": "btoi", + "defined_out": [ + "admin#0", + "caller#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "name#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "name#0", + "delegationType#0", + "lastValid#0" + ] + }, + "2035": { + "op": "cover 2", + "defined_out": [ + "admin#0", + "caller#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "name#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "name#0", + "delegationType#0" + ] + }, + "2037": { + "op": "txna ApplicationArgs 8", + "defined_out": [ + "admin#0", + "caller#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "name#0", + "plugin#0", + "tmp%12#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "name#0", + "delegationType#0", + "tmp%12#0" + ] + }, + "2040": { + "op": "dup", + "defined_out": [ + "admin#0", + "caller#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "name#0", + "plugin#0", + "tmp%12#0", + "tmp%12#0 (copy)" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "name#0", + "delegationType#0", + "tmp%12#0", + "tmp%12#0 (copy)" + ] + }, + "2041": { + "op": "len", + "defined_out": [ + "admin#0", + "caller#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "len%7#0", + "name#0", + "plugin#0", + "tmp%12#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "name#0", + "delegationType#0", + "tmp%12#0", + "len%7#0" + ] + }, + "2042": { + "op": "intc_3 // 8", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "name#0", + "delegationType#0", + "tmp%12#0", + "len%7#0", + "8" + ] + }, + "2043": { + "op": "==", + "defined_out": [ + "admin#0", + "caller#0", + "delegationType#0", + "eq%7#0", + "escrow#0", + "lastValid#0", + "name#0", + "plugin#0", + "tmp%12#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "name#0", + "delegationType#0", + "tmp%12#0", + "eq%7#0" + ] + }, + "2044": { + "error": "invalid number of bytes for uint64", + "op": "assert // invalid number of bytes for uint64", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "name#0", + "delegationType#0", + "tmp%12#0" + ] + }, + "2045": { + "op": "btoi", + "defined_out": [ + "admin#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "name#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "name#0", + "delegationType#0", + "cooldown#0" + ] + }, + "2046": { + "op": "cover 2", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "name#0", + "delegationType#0" + ] + }, + "2048": { + "op": "txna ApplicationArgs 9" + }, + "2051": { + "op": "dup", + "defined_out": [ + "admin#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "name#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "name#0", + "delegationType#0", + "methods#0", + "methods#0" + ] + }, + "2052": { + "op": "cover 3", + "defined_out": [ + "admin#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "name#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "name#0", + "delegationType#0", + "methods#0" + ] + }, + "2054": { + "op": "dup", + "defined_out": [ + "admin#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "methods#0 (copy)", + "name#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "name#0", + "delegationType#0", + "methods#0", + "methods#0 (copy)" + ] + }, + "2055": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "name#0", + "delegationType#0", + "methods#0", + "methods#0 (copy)", + "0" + ] + }, + "2056": { + "op": "extract_uint16", + "defined_out": [ + "admin#0", + "aggregate%array_length%2#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "name#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "name#0", + "delegationType#0", + "methods#0", + "aggregate%array_length%2#0" + ] + }, + "2057": { + "op": "dup", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "name#0", + "delegationType#0", + "methods#0", + "aggregate%array_length%2#0", + "aggregate%array_length%2#0" + ] + }, + "2058": { + "op": "cover 4", + "defined_out": [ + "admin#0", + "aggregate%array_length%2#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "name#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "name#0", + "delegationType#0", + "methods#0", + "aggregate%array_length%2#0" + ] + }, + "2060": { + "op": "pushint 12 // 12", + "defined_out": [ + "12", + "admin#0", + "aggregate%array_length%2#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "name#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "name#0", + "delegationType#0", + "methods#0", + "aggregate%array_length%2#0", + "12" + ] + }, + "2062": { + "op": "*", + "defined_out": [ + "admin#0", + "aggregate%array_length%2#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "mul%2#0", + "name#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "name#0", + "delegationType#0", + "methods#0", + "mul%2#0" + ] + }, + "2063": { + "op": "intc_2 // 2", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "name#0", + "delegationType#0", + "methods#0", + "mul%2#0", + "2" + ] + }, + "2064": { + "op": "+", + "defined_out": [ + "add%2#0", + "admin#0", + "aggregate%array_length%2#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "name#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "name#0", + "delegationType#0", + "methods#0", + "add%2#0" + ] + }, + "2065": { + "op": "swap", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "name#0", + "delegationType#0", + "add%2#0", + "methods#0" + ] + }, + "2066": { + "op": "len", + "defined_out": [ + "add%2#0", + "admin#0", + "aggregate%array_length%2#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "len%8#0", + "methods#0", + "name#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "name#0", + "delegationType#0", + "add%2#0", + "len%8#0" + ] + }, + "2067": { + "op": "==", + "defined_out": [ + "admin#0", + "aggregate%array_length%2#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "eq%8#0", + "escrow#0", + "lastValid#0", + "methods#0", + "name#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "name#0", + "delegationType#0", + "eq%8#0" + ] + }, + "2068": { + "error": "invalid number of bytes for (len+(uint8[4],uint64)[])", + "op": "assert // invalid number of bytes for (len+(uint8[4],uint64)[])", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "name#0", + "delegationType#0" + ] + }, + "2069": { + "op": "txna ApplicationArgs 10", + "defined_out": [ + "admin#0", + "aggregate%array_length%2#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "name#0", + "plugin#0", + "tmp%15#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "name#0", + "delegationType#0", + "tmp%15#0" + ] + }, + "2072": { + "op": "dup", + "defined_out": [ + "admin#0", + "aggregate%array_length%2#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "name#0", + "plugin#0", + "tmp%15#0", + "tmp%15#0 (copy)" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "name#0", + "delegationType#0", + "tmp%15#0", + "tmp%15#0 (copy)" + ] + }, + "2073": { + "op": "len", + "defined_out": [ + "admin#0", + "aggregate%array_length%2#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "len%9#0", + "methods#0", + "name#0", + "plugin#0", + "tmp%15#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "name#0", + "delegationType#0", + "tmp%15#0", + "len%9#0" + ] + }, + "2074": { + "op": "intc_1 // 1", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "name#0", + "delegationType#0", + "tmp%15#0", + "len%9#0", + "1" + ] + }, + "2075": { + "op": "==", + "defined_out": [ + "admin#0", + "aggregate%array_length%2#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "eq%9#0", + "escrow#0", + "lastValid#0", + "methods#0", + "name#0", + "plugin#0", + "tmp%15#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "name#0", + "delegationType#0", + "tmp%15#0", + "eq%9#0" + ] + }, + "2076": { + "error": "invalid number of bytes for bool8", + "op": "assert // invalid number of bytes for bool8", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "name#0", + "delegationType#0", + "tmp%15#0" + ] + }, + "2077": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "name#0", + "delegationType#0", + "tmp%15#0", + "0" + ] + }, + "2078": { + "op": "getbit", + "defined_out": [ + "admin#0", + "aggregate%array_length%2#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "name#0", + "plugin#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "name#0", + "delegationType#0", + "useRounds#0" + ] + }, + "2079": { + "op": "cover 2", + "defined_out": [ + "admin#0", + "aggregate%array_length%2#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "name#0", + "plugin#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "name#0", + "delegationType#0" + ] + }, + "2081": { + "op": "txna ApplicationArgs 11", + "defined_out": [ + "admin#0", + "aggregate%array_length%2#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "name#0", + "plugin#0", + "tmp%17#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "name#0", + "delegationType#0", + "tmp%17#0" + ] + }, + "2084": { + "op": "dup", + "defined_out": [ + "admin#0", + "aggregate%array_length%2#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "name#0", + "plugin#0", + "tmp%17#0", + "tmp%17#0 (copy)", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "name#0", + "delegationType#0", + "tmp%17#0", + "tmp%17#0 (copy)" + ] + }, + "2085": { + "op": "len", + "defined_out": [ + "admin#0", + "aggregate%array_length%2#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "len%10#0", + "methods#0", + "name#0", + "plugin#0", + "tmp%17#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "name#0", + "delegationType#0", + "tmp%17#0", + "len%10#0" + ] + }, + "2086": { + "op": "intc_1 // 1", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "name#0", + "delegationType#0", + "tmp%17#0", + "len%10#0", + "1" + ] + }, + "2087": { + "op": "==", + "defined_out": [ + "admin#0", + "aggregate%array_length%2#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "eq%10#0", + "escrow#0", + "lastValid#0", + "methods#0", + "name#0", + "plugin#0", + "tmp%17#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "name#0", + "delegationType#0", + "tmp%17#0", + "eq%10#0" + ] + }, + "2088": { + "error": "invalid number of bytes for bool8", + "op": "assert // invalid number of bytes for bool8", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "name#0", + "delegationType#0", + "tmp%17#0" + ] + }, + "2089": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "name#0", + "delegationType#0", + "tmp%17#0", + "0" + ] + }, + "2090": { + "op": "getbit", + "defined_out": [ + "admin#0", + "aggregate%array_length%2#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "name#0", + "plugin#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "name#0", + "delegationType#0", + "useExecutionKey#0" + ] + }, + "2091": { + "op": "cover 2", + "defined_out": [ + "admin#0", + "aggregate%array_length%2#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "name#0", + "plugin#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "name#0", + "delegationType#0" + ] + }, + "2093": { + "op": "txna ApplicationArgs 12", + "defined_out": [ + "admin#0", + "aggregate%array_length%2#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "name#0", + "plugin#0", + "tmp%19#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "name#0", + "delegationType#0", + "tmp%19#0" + ] + }, + "2096": { + "op": "dup", + "defined_out": [ + "admin#0", + "aggregate%array_length%2#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "name#0", + "plugin#0", + "tmp%19#0", + "tmp%19#0 (copy)", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "name#0", + "delegationType#0", + "tmp%19#0", + "tmp%19#0 (copy)" + ] + }, + "2097": { + "op": "len", + "defined_out": [ + "admin#0", + "aggregate%array_length%2#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "len%11#0", + "methods#0", + "name#0", + "plugin#0", + "tmp%19#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "name#0", + "delegationType#0", + "tmp%19#0", + "len%11#0" + ] + }, + "2098": { + "op": "intc_1 // 1", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "name#0", + "delegationType#0", + "tmp%19#0", + "len%11#0", + "1" + ] + }, + "2099": { + "op": "==", + "defined_out": [ + "admin#0", + "aggregate%array_length%2#0", + "caller#0", + "cooldown#0", + "delegationType#0", + "eq%11#0", + "escrow#0", + "lastValid#0", + "methods#0", + "name#0", + "plugin#0", + "tmp%19#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "name#0", + "delegationType#0", + "tmp%19#0", + "eq%11#0" + ] + }, + "2100": { + "error": "invalid number of bytes for bool8", + "op": "assert // invalid number of bytes for bool8", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "name#0", + "delegationType#0", + "tmp%19#0" + ] + }, + "2101": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "name#0", + "delegationType#0", + "tmp%19#0", + "0" + ] + }, + "2102": { + "op": "getbit", + "defined_out": [ + "admin#0", + "aggregate%array_length%2#0", + "caller#0", + "cooldown#0", + "defaultToEscrow#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "name#0", + "plugin#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "name#0", + "delegationType#0", + "defaultToEscrow#0" + ] + }, + "2103": { + "op": "cover 2", + "defined_out": [ + "admin#0", + "aggregate%array_length%2#0", + "caller#0", + "cooldown#0", + "defaultToEscrow#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "name#0", + "plugin#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "name#0", + "delegationType#0" + ] + }, + "2105": { + "op": "txn Sender", + "defined_out": [ + "admin#0", + "aggregate%array_length%2#0", + "caller#0", + "cooldown#0", + "defaultToEscrow#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "name#0", + "plugin#0", + "tmp%0#1", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "name#0", + "delegationType#0", + "tmp%0#1" + ] + }, + "2107": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "name#0", + "delegationType#0", + "tmp%0#1", + "0" + ] + }, + "2108": { + "op": "bytec_2 // \"admin\"", + "defined_out": [ + "\"admin\"", + "0", + "admin#0", + "aggregate%array_length%2#0", + "caller#0", + "cooldown#0", + "defaultToEscrow#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "name#0", + "plugin#0", + "tmp%0#1", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "name#0", + "delegationType#0", + "tmp%0#1", + "0", + "\"admin\"" + ] + }, + "2109": { + "op": "app_global_get_ex", + "defined_out": [ + "admin#0", + "aggregate%array_length%2#0", + "caller#0", + "cooldown#0", + "defaultToEscrow#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "maybe_exists%0#0", + "maybe_value%0#0", + "methods#0", + "name#0", + "plugin#0", + "tmp%0#1", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "name#0", + "delegationType#0", + "tmp%0#1", + "maybe_value%0#0", + "maybe_exists%0#0" + ] + }, + "2110": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "name#0", + "delegationType#0", + "tmp%0#1", + "maybe_value%0#0" + ] + }, + "2111": { + "op": "==", + "defined_out": [ + "admin#0", + "aggregate%array_length%2#0", + "caller#0", + "cooldown#0", + "defaultToEscrow#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "name#0", + "plugin#0", + "tmp%1#1", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "name#0", + "delegationType#0", + "tmp%1#1" + ] + }, + "2112": { + "error": "admin only", + "op": "assert // admin only", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "name#0", + "delegationType#0" + ] + }, + "2113": { + "op": "bytec 16 // \"n\"", + "defined_out": [ + "\"n\"", + "admin#0", + "aggregate%array_length%2#0", + "caller#0", + "cooldown#0", + "defaultToEscrow#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "name#0", + "plugin#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "name#0", + "delegationType#0", + "\"n\"" + ] + }, + "2115": { + "op": "uncover 2", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "delegationType#0", + "\"n\"", + "name#0" + ] + }, + "2117": { + "op": "concat", + "defined_out": [ + "admin#0", + "aggregate%array_length%2#0", + "box_prefixed_key%0#0", + "caller#0", + "cooldown#0", + "defaultToEscrow#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "name#0", + "plugin#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "delegationType#0", + "box_prefixed_key%0#0" + ] + }, + "2118": { + "op": "dup", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "delegationType#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0" + ] + }, + "2119": { + "op": "cover 2", + "defined_out": [ + "admin#0", + "aggregate%array_length%2#0", + "box_prefixed_key%0#0", + "caller#0", + "cooldown#0", + "defaultToEscrow#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "name#0", + "plugin#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "delegationType#0", + "box_prefixed_key%0#0" + ] + }, + "2121": { + "op": "box_len", + "defined_out": [ + "_%0#0", + "admin#0", + "aggregate%array_length%2#0", + "box_prefixed_key%0#0", + "caller#0", + "cooldown#0", + "defaultToEscrow#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "maybe_exists%1#0", + "methods#0", + "name#0", + "plugin#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "delegationType#0", + "_%0#0", + "maybe_exists%1#0" + ] + }, + "2122": { + "op": "bury 1", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "delegationType#0", + "maybe_exists%1#0" + ] + }, + "2124": { + "op": "!", + "defined_out": [ + "admin#0", + "aggregate%array_length%2#0", + "box_prefixed_key%0#0", + "caller#0", + "cooldown#0", + "defaultToEscrow#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "name#0", + "plugin#0", + "tmp%2#1", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "delegationType#0", + "tmp%2#1" + ] + }, + "2125": { + "op": "assert", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "delegationType#0" + ] + }, + "2126": { + "op": "bytec 15 // 0x01", + "defined_out": [ + "0x01", + "admin#0", + "aggregate%array_length%2#0", + "box_prefixed_key%0#0", + "caller#0", + "cooldown#0", + "defaultToEscrow#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "name#0", + "plugin#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "delegationType#0", + "0x01" + ] + }, + "2128": { + "op": "==", + "defined_out": [ + "admin#0", + "aggregate%array_length%2#0", + "box_prefixed_key%0#0", + "caller#0", + "cooldown#0", + "defaultToEscrow#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "name#0", + "plugin#0", + "tmp%3#1", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "tmp%3#1" + ] + }, + "2129": { + "op": "bz arc58_addNamedPlugin_bool_false@4", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0" + ] + }, + "2132": { + "op": "dig 11", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "caller#0" + ] + }, + "2134": { + "op": "global ZeroAddress", + "defined_out": [ + "admin#0", + "aggregate%array_length%2#0", + "box_prefixed_key%0#0", + "caller#0", + "cooldown#0", + "defaultToEscrow#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "name#0", + "plugin#0", + "tmp%5#1", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "caller#0", + "tmp%5#1" + ] + }, + "2136": { + "op": "==", + "defined_out": [ + "admin#0", + "aggregate%array_length%2#0", + "box_prefixed_key%0#0", + "caller#0", + "cooldown#0", + "defaultToEscrow#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "name#0", + "plugin#0", + "tmp%6#1", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "tmp%6#1" + ] + }, + "2137": { + "op": "bz arc58_addNamedPlugin_bool_false@4", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0" + ] + }, + "2140": { + "op": "intc_1 // 1", + "defined_out": [ + "admin#0", + "aggregate%array_length%2#0", + "and_result%0#0", + "box_prefixed_key%0#0", + "caller#0", + "cooldown#0", + "defaultToEscrow#0", + "delegationType#0", + "escrow#0", + "lastValid#0", + "methods#0", + "name#0", + "plugin#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "and_result%0#0" + ] + }, + "2141": { + "block": "arc58_addNamedPlugin_bool_merge@5", + "stack_in": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "and_result%0#0" + ], + "op": "!", + "defined_out": [ + "tmp%7#1" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "tmp%7#1" + ] + }, + "2142": { + "error": "delegation type must not be self for global plugins", + "op": "assert // delegation type must not be self for global plugins", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0" + ] + }, + "2143": { + "op": "dig 2", + "defined_out": [ + "useExecutionKey#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "useExecutionKey#0" + ] + }, + "2145": { + "op": "bz arc58_addNamedPlugin_bool_false@8", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0" + ] + }, + "2148": { + "op": "dig 11", + "defined_out": [ + "caller#0", + "useExecutionKey#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "caller#0" + ] + }, + "2150": { + "op": "global ZeroAddress", + "defined_out": [ + "caller#0", + "tmp%9#1", + "useExecutionKey#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "caller#0", + "tmp%9#1" + ] + }, + "2152": { + "op": "!=", + "defined_out": [ + "caller#0", + "tmp%10#1", + "useExecutionKey#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "tmp%10#1" + ] + }, + "2153": { + "op": "bz arc58_addNamedPlugin_bool_false@8", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0" + ] + }, + "2156": { + "op": "intc_1 // 1", + "defined_out": [ + "and_result%1#0", + "caller#0", + "useExecutionKey#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "and_result%1#0" + ] + }, + "2157": { + "block": "arc58_addNamedPlugin_bool_merge@9", + "stack_in": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "and_result%1#0" + ], + "op": "!", + "defined_out": [ + "tmp%11#1" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "tmp%11#1" + ] + }, + "2158": { + "error": "using execution key requires global plugin", + "op": "assert // using execution key requires global plugin", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0" + ] + }, + "2159": { + "op": "dig 1", + "defined_out": [ + "defaultToEscrow#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "defaultToEscrow#0" + ] + }, + "2161": { + "op": "bnz arc58_addNamedPlugin_if_body@10", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0" + ] + }, + "2164": { + "op": "dig 10", + "defined_out": [ + "defaultToEscrow#0", + "escrowKey#1" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "escrowKey#1" + ] + }, + "2166": { + "op": "bury 19", + "defined_out": [ + "defaultToEscrow#0", + "escrowKey#1" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0" + ] + }, + "2168": { + "block": "arc58_addNamedPlugin_after_if_else@11", + "stack_in": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0" + ], + "op": "dig 12", + "defined_out": [ + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "plugin#0" + ] + }, + "2170": { + "op": "itob", + "defined_out": [ + "aggregate%val_as_bytes%0#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "aggregate%val_as_bytes%0#0" + ] + }, + "2171": { + "op": "dig 12", + "defined_out": [ + "aggregate%val_as_bytes%0#0", + "caller#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "aggregate%val_as_bytes%0#0", + "caller#0" + ] + }, + "2173": { + "op": "concat", + "defined_out": [ + "aggregate%head%1#0", + "caller#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "aggregate%head%1#0" + ] + }, + "2174": { + "op": "dig 19", + "defined_out": [ + "aggregate%head%1#0", + "caller#0", + "escrowKey#1", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "aggregate%head%1#0", + "escrowKey#1" + ] + }, + "2176": { + "op": "dup", + "defined_out": [ + "aggregate%head%1#0", + "caller#0", + "escrowKey#1", + "escrowKey#1 (copy)", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "aggregate%head%1#0", + "escrowKey#1", + "escrowKey#1 (copy)" + ] + }, + "2177": { + "op": "len", + "defined_out": [ + "aggregate%head%1#0", + "aggregate%length%0#0", + "caller#0", + "escrowKey#1", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "aggregate%head%1#0", + "escrowKey#1", + "aggregate%length%0#0" + ] + }, + "2178": { + "op": "itob", + "defined_out": [ + "aggregate%as_bytes%0#0", + "aggregate%head%1#0", + "caller#0", + "escrowKey#1", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "aggregate%head%1#0", + "escrowKey#1", + "aggregate%as_bytes%0#0" + ] + }, + "2179": { + "op": "extract 6 2", + "defined_out": [ + "aggregate%head%1#0", + "aggregate%length_uint16%0#0", + "caller#0", + "escrowKey#1", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "aggregate%head%1#0", + "escrowKey#1", + "aggregate%length_uint16%0#0" + ] + }, + "2182": { + "op": "swap", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "aggregate%head%1#0", + "aggregate%length_uint16%0#0", + "escrowKey#1" + ] + }, + "2183": { + "op": "concat", + "defined_out": [ + "aggregate%encoded_value%0#0", + "aggregate%head%1#0", + "caller#0", + "escrowKey#1", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "aggregate%head%1#0", + "aggregate%encoded_value%0#0" + ] + }, + "2184": { + "op": "swap", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "aggregate%encoded_value%0#0", + "aggregate%head%1#0" + ] + }, + "2185": { + "op": "bytec 12 // 0x002a", + "defined_out": [ + "0x002a", + "aggregate%encoded_value%0#0", + "aggregate%head%1#0", + "caller#0", + "escrowKey#1", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "aggregate%encoded_value%0#0", + "aggregate%head%1#0", + "0x002a" + ] + }, + "2187": { + "op": "concat", + "defined_out": [ + "aggregate%encoded_value%0#0", + "aggregate%head%2#0", + "caller#0", + "escrowKey#1", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "aggregate%encoded_value%0#0", + "aggregate%head%2#0" + ] + }, + "2188": { + "op": "swap", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "aggregate%head%2#0", + "aggregate%encoded_value%0#0" + ] + }, + "2189": { + "op": "concat", + "defined_out": [ + "caller#0", + "escrowKey#1", + "key#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "key#0" + ] + }, + "2190": { + "op": "dup", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "key#0", + "key#0" + ] + }, + "2191": { + "op": "bury 19", + "defined_out": [ + "caller#0", + "escrowKey#1", + "key#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "key#0" + ] + }, + "2193": { + "op": "dig 1", + "defined_out": [ + "box_prefixed_key%0#0", + "caller#0", + "escrowKey#1", + "key#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "key#0", + "box_prefixed_key%0#0" + ] + }, + "2195": { + "op": "dup", + "defined_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "caller#0", + "escrowKey#1", + "key#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "key#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)" + ] + }, + "2196": { + "op": "box_del", + "defined_out": [ + "box_prefixed_key%0#0", + "caller#0", + "escrowKey#1", + "key#0", + "plugin#0", + "{box_del}" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "key#0", + "box_prefixed_key%0#0", + "{box_del}" + ] + }, + "2197": { + "op": "pop", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "key#0", + "box_prefixed_key%0#0" + ] + }, + "2198": { + "op": "swap", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "key#0" + ] + }, + "2199": { + "op": "box_put", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0" + ] + }, + "2200": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "0" + ] + }, + "2201": { + "op": "itob", + "defined_out": [ + "aggregate%as_bytes%2#0", + "box_prefixed_key%0#0", + "caller#0", + "escrowKey#1", + "key#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "aggregate%as_bytes%2#0" + ] + }, + "2202": { + "op": "bury 20", + "defined_out": [ + "aggregate%as_bytes%2#0", + "box_prefixed_key%0#0", + "caller#0", + "escrowKey#1", + "key#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0" + ] + }, + "2204": { + "op": "bytec 10 // 0x0000", + "defined_out": [ + "aggregate%as_bytes%2#0", + "box_prefixed_key%0#0", + "caller#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "methodInfos#0" + ] + }, + "2206": { + "op": "bury 17", + "defined_out": [ + "aggregate%as_bytes%2#0", + "box_prefixed_key%0#0", + "caller#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0" + ] + }, + "2208": { + "op": "intc_0 // 0", + "defined_out": [ + "aggregate%as_bytes%2#0", + "box_prefixed_key%0#0", + "caller#0", + "escrowKey#1", + "i#0", + "key#0", + "methodInfos#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "i#0" + ] + }, + "2209": { + "op": "bury 15", + "defined_out": [ + "aggregate%as_bytes%2#0", + "box_prefixed_key%0#0", + "caller#0", + "escrowKey#1", + "i#0", + "key#0", + "methodInfos#0", + "plugin#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0" + ] + }, + "2211": { + "block": "arc58_addNamedPlugin_while_top@12", + "stack_in": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0" + ], + "op": "dig 14", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "i#0" + ] + }, + "2213": { + "op": "dig 5", + "defined_out": [ + "aggregate%array_length%2#0", + "i#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "i#0", + "aggregate%array_length%2#0" + ] + }, + "2215": { + "op": "<", + "defined_out": [ + "aggregate%array_length%2#0", + "i#0", + "tmp%16#1" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "tmp%16#1" + ] + }, + "2216": { + "op": "bz arc58_addNamedPlugin_after_while@14", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0" + ] + }, + "2219": { + "op": "dig 5", + "defined_out": [ + "aggregate%array_length%2#0", + "i#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "methods#0" + ] + }, + "2221": { + "op": "extract 2 0", + "defined_out": [ + "aggregate%array_length%2#0", + "aggregate%array_trimmed%0#0", + "i#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "aggregate%array_trimmed%0#0" + ] + }, + "2224": { + "op": "dig 15", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "aggregate%array_trimmed%0#0", + "i#0" + ] + }, + "2226": { + "op": "dup", + "defined_out": [ + "aggregate%array_length%2#0", + "aggregate%array_trimmed%0#0", + "i#0", + "i#0 (copy)", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "aggregate%array_trimmed%0#0", + "i#0 (copy)", + "i#0 (copy)" + ] + }, + "2227": { + "op": "cover 2", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "i#0", + "aggregate%array_trimmed%0#0", + "i#0 (copy)" + ] + }, + "2229": { + "op": "pushint 12 // 12", + "defined_out": [ + "12", + "aggregate%array_length%2#0", + "aggregate%array_trimmed%0#0", + "i#0", + "i#0 (copy)", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "i#0", + "aggregate%array_trimmed%0#0", + "i#0 (copy)", + "12" + ] + }, + "2231": { + "op": "*", + "defined_out": [ + "aggregate%array_length%2#0", + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0", + "i#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "i#0", + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0" + ] + }, + "2232": { + "op": "pushint 12 // 12", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "i#0", + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0", + "12" + ] + }, + "2234": { + "error": "index access is out of bounds", + "op": "extract3 // on error: index access is out of bounds", + "defined_out": [ + "aggregate%array_length%2#0", + "aggregate%encoded_element%0#0", + "i#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "i#0", + "aggregate%encoded_element%0#0" + ] + }, + "2235": { + "op": "dup", + "defined_out": [ + "aggregate%array_length%2#0", + "aggregate%encoded_element%0#0", + "aggregate%encoded_element%0#0 (copy)", + "i#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "i#0", + "aggregate%encoded_element%0#0", + "aggregate%encoded_element%0#0 (copy)" + ] + }, + "2236": { + "op": "extract 0 4", + "defined_out": [ + "aggregate%array_length%2#0", + "aggregate%encoded_element%0#0", + "aggregate%extract%0#0", + "i#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "i#0", + "aggregate%encoded_element%0#0", + "aggregate%extract%0#0" + ] + }, + "2239": { + "op": "swap", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "i#0", + "aggregate%extract%0#0", + "aggregate%encoded_element%0#0" + ] + }, + "2240": { + "op": "extract 4 8", + "defined_out": [ + "aggregate%array_length%2#0", + "aggregate%extract%0#0", + "aggregate%extract%1#0", + "i#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "i#0", + "aggregate%extract%0#0", + "aggregate%extract%1#0" + ] + }, + "2243": { + "op": "dig 1", + "defined_out": [ + "aggregate%array_length%2#0", + "aggregate%extract%0#0", + "aggregate%extract%0#0 (copy)", + "aggregate%extract%1#0", + "i#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "i#0", + "aggregate%extract%0#0", + "aggregate%extract%1#0", + "aggregate%extract%0#0 (copy)" + ] + }, + "2245": { + "op": "len", + "defined_out": [ + "aggregate%array_length%2#0", + "aggregate%extract%0#0", + "aggregate%extract%1#0", + "aggregate%length%1#0", + "i#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "i#0", + "aggregate%extract%0#0", + "aggregate%extract%1#0", + "aggregate%length%1#0" + ] + }, + "2246": { + "op": "pushint 4 // 4", + "defined_out": [ + "4", + "aggregate%array_length%2#0", + "aggregate%extract%0#0", + "aggregate%extract%1#0", + "aggregate%length%1#0", + "i#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "i#0", + "aggregate%extract%0#0", + "aggregate%extract%1#0", + "aggregate%length%1#0", + "4" + ] + }, + "2248": { + "op": "==", + "defined_out": [ + "aggregate%array_length%2#0", + "aggregate%extract%0#0", + "aggregate%extract%1#0", + "aggregate%lengths_equal%0#0", + "i#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "i#0", + "aggregate%extract%0#0", + "aggregate%extract%1#0", + "aggregate%lengths_equal%0#0" + ] + }, + "2249": { + "error": "invalid size", + "op": "assert // invalid size", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "i#0", + "aggregate%extract%0#0", + "aggregate%extract%1#0" + ] + }, + "2250": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%2#0", + "aggregate%head%4#0", + "i#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "i#0", + "aggregate%head%4#0" + ] + }, + "2251": { + "op": "dig 21", + "defined_out": [ + "aggregate%array_length%2#0", + "aggregate%as_bytes%2#0", + "aggregate%head%4#0", + "i#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "i#0", + "aggregate%head%4#0", + "aggregate%as_bytes%2#0" + ] + }, + "2253": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%2#0", + "aggregate%as_bytes%2#0", + "aggregate%head%5#0", + "i#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "i#0", + "aggregate%head%5#0" + ] + }, + "2254": { + "op": "dig 18", + "defined_out": [ + "aggregate%array_length%2#0", + "aggregate%as_bytes%2#0", + "aggregate%head%5#0", + "i#0", + "methodInfos#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "i#0", + "aggregate%head%5#0", + "methodInfos#0" + ] + }, + "2256": { + "op": "dup" + }, + "2257": { + "op": "uncover 2", + "defined_out": [ + "aggregate%array_length%2#0", + "aggregate%as_bytes%2#0", + "aggregate%head%5#0", + "i#0", + "methodInfos#0", + "methodInfos#0 (copy)", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "i#0", + "methodInfos#0", + "methodInfos#0 (copy)", + "aggregate%head%5#0" + ] + }, + "2259": { + "error": "max array length exceeded", + "op": "concat // on error: max array length exceeded", + "defined_out": [ + "aggregate%array_length%2#0", + "aggregate%as_bytes%2#0", + "concat%0#0", + "i#0", + "methodInfos#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "i#0", + "methodInfos#0", + "concat%0#0" + ] + }, + "2260": { + "op": "swap", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "i#0", + "concat%0#0", + "methodInfos#0" + ] + }, + "2261": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "aggregate%array_length%2#0", + "aggregate%as_bytes%2#0", + "concat%0#0", + "i#0", + "methodInfos#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "i#0", + "concat%0#0", + "methodInfos#0", + "0" + ] + }, + "2262": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%2#0", + "aggregate%as_bytes%2#0", + "concat%0#0", + "extract_uint16%0#0", + "i#0", + "methodInfos#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "i#0", + "concat%0#0", + "extract_uint16%0#0" + ] + }, + "2263": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "aggregate%array_length%2#0", + "aggregate%as_bytes%2#0", + "concat%0#0", + "extract_uint16%0#0", + "i#0", + "methodInfos#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "i#0", + "concat%0#0", + "extract_uint16%0#0", + "1" + ] + }, + "2264": { + "op": "+", + "defined_out": [ + "add%0#0", + "aggregate%array_length%2#0", + "aggregate%as_bytes%2#0", + "concat%0#0", + "i#0", + "methodInfos#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "i#0", + "concat%0#0", + "add%0#0" + ] + }, + "2265": { + "op": "itob", + "defined_out": [ + "aggregate%array_length%2#0", + "aggregate%as_bytes%2#0", + "as_bytes%0#0", + "concat%0#0", + "i#0", + "methodInfos#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "i#0", + "concat%0#0", + "as_bytes%0#0" + ] + }, + "2266": { + "op": "extract 6 2", + "defined_out": [ + "aggregate%array_length%2#0", + "aggregate%as_bytes%2#0", + "as_u16_bytes%0#0", + "concat%0#0", + "i#0", + "methodInfos#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "i#0", + "concat%0#0", + "as_u16_bytes%0#0" + ] + }, + "2269": { + "op": "replace2 0", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "i#0", + "methodInfos#0" + ] + }, + "2271": { + "op": "bury 18", + "defined_out": [ + "aggregate%array_length%2#0", + "aggregate%as_bytes%2#0", + "i#0", + "methodInfos#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "i#0" + ] + }, + "2273": { + "op": "intc_1 // 1", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "i#0", + "1" + ] + }, + "2274": { + "op": "+", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "i#0" + ] + }, + "2275": { + "op": "bury 15", + "defined_out": [ + "aggregate%array_length%2#0", + "aggregate%as_bytes%2#0", + "i#0", + "methodInfos#0", + "methods#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0" + ] + }, + "2277": { + "op": "b arc58_addNamedPlugin_while_top@12" + }, + "2280": { + "block": "arc58_addNamedPlugin_after_while@14", + "stack_in": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0" + ], + "op": "intc_0 // 0", + "defined_out": [ + "0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "0" + ] + }, + "2281": { + "op": "bytec_0 // \"controlled_address\"", + "defined_out": [ + "\"controlled_address\"", + "0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "0", + "\"controlled_address\"" + ] + }, + "2282": { + "op": "app_global_get_ex", + "defined_out": [ + "maybe_exists%2#0", + "maybe_value%1#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "maybe_value%1#0", + "maybe_exists%2#0" + ] + }, + "2283": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "maybe_value%1#0" + ] + }, + "2284": { + "op": "global CurrentApplicationAddress", + "defined_out": [ + "maybe_value%1#0", + "tmp%21#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "maybe_value%1#0", + "tmp%21#0" + ] + }, + "2286": { + "op": "!=", + "defined_out": [ + "tmp%22#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "tmp%22#0" + ] + }, + "2287": { + "op": "bz arc58_addNamedPlugin_after_if_else@17", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0" + ] + }, + "2290": { + "op": "itxn_begin" + }, + "2291": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "0" + ] + }, + "2292": { + "op": "bytec_0 // \"controlled_address\"", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "0", + "\"controlled_address\"" + ] + }, + "2293": { + "op": "app_global_get_ex", + "defined_out": [ + "maybe_exists%3#0", + "maybe_value%2#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "maybe_value%2#0", + "maybe_exists%3#0" + ] + }, + "2294": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "maybe_value%2#0" + ] + }, + "2295": { + "op": "global CurrentApplicationAddress", + "defined_out": [ + "inner_txn_params%0%%param_Receiver_idx_0#0", + "maybe_value%2#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Receiver_idx_0#0" + ] + }, + "2297": { + "op": "dig 18", + "defined_out": [ + "inner_txn_params%0%%param_Receiver_idx_0#0", + "maybe_value%2#0", + "methodInfos#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "methodInfos#0" + ] + }, + "2299": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "methodInfos#0", + "0" + ] + }, + "2300": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%4#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "maybe_value%2#0", + "methodInfos#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "aggregate%array_length%4#0" + ] + }, + "2301": { + "op": "dig 21", + "defined_out": [ + "aggregate%array_length%4#0", + "escrowKey#1", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "maybe_value%2#0", + "methodInfos#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "aggregate%array_length%4#0", + "escrowKey#1" + ] + }, + "2303": { + "op": "swap", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "escrowKey#1", + "aggregate%array_length%4#0" + ] + }, + "2304": { + "callsub": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.pluginsMbr", + "op": "callsub pluginsMbr", + "defined_out": [ + "escrowKey#1", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "maybe_value%2#0", + "methodInfos#0", + "tmp%24#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "tmp%24#0" + ] + }, + "2307": { + "op": "dig 16", + "defined_out": [ + "escrowKey#1", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "maybe_value%2#0", + "methodInfos#0", + "name#0", + "tmp%24#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "tmp%24#0", + "name#0" + ] + }, + "2309": { + "op": "len", + "defined_out": [ + "escrowKey#1", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "maybe_value%2#0", + "methodInfos#0", + "name#0", + "tmp%0#2", + "tmp%24#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "tmp%24#0", + "tmp%0#2" + ] + }, + "2310": { + "op": "intc 4 // 400", + "defined_out": [ + "400", + "escrowKey#1", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "maybe_value%2#0", + "methodInfos#0", + "name#0", + "tmp%0#2", + "tmp%24#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "tmp%24#0", + "tmp%0#2", + "400" + ] + }, + "2312": { + "op": "*", + "defined_out": [ + "escrowKey#1", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "maybe_value%2#0", + "methodInfos#0", + "name#0", + "tmp%1#2", + "tmp%24#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "tmp%24#0", + "tmp%1#2" + ] + }, + "2313": { + "op": "intc 5 // 21700", + "defined_out": [ + "21700", + "escrowKey#1", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "maybe_value%2#0", + "methodInfos#0", + "name#0", + "tmp%1#2", + "tmp%24#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "tmp%24#0", + "tmp%1#2", + "21700" + ] + }, + "2315": { + "op": "+", + "defined_out": [ + "escrowKey#1", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "maybe_value%2#0", + "methodInfos#0", + "name#0", + "tmp%2#2", + "tmp%24#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "tmp%24#0", + "tmp%2#2" + ] + }, + "2316": { + "op": "+", + "defined_out": [ + "escrowKey#1", + "inner_txn_params%0%%param_Amount_idx_0#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "maybe_value%2#0", + "methodInfos#0", + "name#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "inner_txn_params%0%%param_Amount_idx_0#0" + ] + }, + "2317": { + "op": "itxn_field Amount", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Receiver_idx_0#0" + ] + }, + "2319": { + "op": "itxn_field Receiver", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "maybe_value%2#0" + ] + }, + "2321": { + "op": "itxn_field Sender", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0" + ] + }, + "2323": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "escrowKey#1", + "methodInfos#0", + "name#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "1" + ] + }, + "2324": { + "op": "itxn_field TypeEnum", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0" + ] + }, + "2326": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "0" + ] + }, + "2327": { + "op": "itxn_field Fee", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0" + ] + }, + "2329": { + "op": "itxn_submit" + }, + "2330": { + "block": "arc58_addNamedPlugin_after_if_else@17", + "stack_in": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0" + ], + "op": "dig 10", + "defined_out": [ + "escrow#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "escrow#0" + ] + }, + "2332": { + "callsub": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.maybeNewEscrow", + "op": "callsub maybeNewEscrow", + "defined_out": [ + "escrow#0", + "escrowID#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "escrowID#0" + ] + }, + "2335": { + "op": "bury 16", + "defined_out": [ + "escrow#0", + "escrowID#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0" + ] + }, + "2337": { + "op": "dig 3", + "defined_out": [ + "escrow#0", + "escrowID#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "useRounds#0" + ] + }, + "2339": { + "op": "bz arc58_addNamedPlugin_ternary_false@19", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0" + ] + }, + "2342": { + "op": "global Round", + "defined_out": [ + "epochRef#0", + "escrow#0", + "escrowID#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "epochRef#0" + ] + }, + "2344": { + "block": "arc58_addNamedPlugin_ternary_merge@20", + "stack_in": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "epochRef#0" + ], + "op": "dig 16", + "defined_out": [ + "escrowID#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "epochRef#0", + "escrowID#0" + ] + }, + "2346": { + "op": "itob", + "defined_out": [ + "aggregate%val_as_bytes%3#0", + "escrowID#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "epochRef#0", + "aggregate%val_as_bytes%3#0" + ] + }, + "2347": { + "op": "dig 10", + "defined_out": [ + "aggregate%val_as_bytes%3#0", + "delegationType#0", + "escrowID#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "epochRef#0", + "aggregate%val_as_bytes%3#0", + "delegationType#0" + ] + }, + "2349": { + "op": "concat", + "defined_out": [ + "aggregate%head%8#0", + "delegationType#0", + "escrowID#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "epochRef#0", + "aggregate%head%8#0" + ] + }, + "2350": { + "op": "dig 9", + "defined_out": [ + "aggregate%head%8#0", + "delegationType#0", + "escrowID#0", + "lastValid#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "epochRef#0", + "aggregate%head%8#0", + "lastValid#0" + ] + }, + "2352": { + "op": "itob", + "defined_out": [ + "aggregate%head%8#0", + "aggregate%val_as_bytes%4#0", + "delegationType#0", + "escrowID#0", + "lastValid#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "epochRef#0", + "aggregate%head%8#0", + "aggregate%val_as_bytes%4#0" + ] + }, + "2353": { + "op": "concat", + "defined_out": [ + "aggregate%head%9#0", + "delegationType#0", + "escrowID#0", + "lastValid#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "epochRef#0", + "aggregate%head%9#0" + ] + }, + "2354": { + "op": "dig 8", + "defined_out": [ + "aggregate%head%9#0", + "cooldown#0", + "delegationType#0", + "escrowID#0", + "lastValid#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "epochRef#0", + "aggregate%head%9#0", + "cooldown#0" + ] + }, + "2356": { + "op": "itob", + "defined_out": [ + "aggregate%head%9#0", + "aggregate%val_as_bytes%5#0", + "cooldown#0", + "delegationType#0", + "escrowID#0", + "lastValid#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "epochRef#0", + "aggregate%head%9#0", + "aggregate%val_as_bytes%5#0" + ] + }, + "2357": { + "op": "concat", + "defined_out": [ + "aggregate%head%10#0", + "cooldown#0", + "delegationType#0", + "escrowID#0", + "lastValid#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "epochRef#0", + "aggregate%head%10#0" + ] + }, + "2358": { + "op": "bytec 23 // 0x002c", + "defined_out": [ + "0x002c", + "aggregate%head%10#0", + "cooldown#0", + "delegationType#0", + "escrowID#0", + "lastValid#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "epochRef#0", + "aggregate%head%10#0", + "0x002c" + ] + }, + "2360": { + "op": "concat", + "defined_out": [ + "aggregate%head%11#0", + "cooldown#0", + "delegationType#0", + "escrowID#0", + "lastValid#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "epochRef#0", + "aggregate%head%11#0" + ] + }, + "2361": { + "op": "bytec 9 // 0x00", + "defined_out": [ + "0x00", + "aggregate%head%11#0", + "cooldown#0", + "delegationType#0", + "escrowID#0", + "lastValid#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "epochRef#0", + "aggregate%head%11#0", + "0x00" + ] + }, + "2363": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "0x00", + "aggregate%head%11#0", + "cooldown#0", + "delegationType#0", + "escrowID#0", + "lastValid#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "epochRef#0", + "aggregate%head%11#0", + "0x00", + "0" + ] + }, + "2364": { + "op": "dig 13", + "defined_out": [ + "0", + "0x00", + "admin#0", + "aggregate%head%11#0", + "cooldown#0", + "delegationType#0", + "escrowID#0", + "lastValid#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "epochRef#0", + "aggregate%head%11#0", + "0x00", + "0", + "admin#0" + ] + }, + "2366": { + "op": "setbit", + "defined_out": [ + "admin#0", + "aggregate%encoded_bool%0#0", + "aggregate%head%11#0", + "cooldown#0", + "delegationType#0", + "escrowID#0", + "lastValid#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "epochRef#0", + "aggregate%head%11#0", + "aggregate%encoded_bool%0#0" + ] + }, + "2367": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "admin#0", + "aggregate%encoded_bool%0#0", + "aggregate%head%11#0", + "cooldown#0", + "delegationType#0", + "escrowID#0", + "lastValid#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "epochRef#0", + "aggregate%head%11#0", + "aggregate%encoded_bool%0#0", + "1" + ] + }, + "2368": { + "op": "dig 7", + "defined_out": [ + "1", + "admin#0", + "aggregate%encoded_bool%0#0", + "aggregate%head%11#0", + "cooldown#0", + "delegationType#0", + "escrowID#0", + "lastValid#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "epochRef#0", + "aggregate%head%11#0", + "aggregate%encoded_bool%0#0", + "1", + "useRounds#0" + ] + }, + "2370": { + "op": "setbit", + "defined_out": [ + "admin#0", + "aggregate%head%11#0", + "aggregate%set_bit%0#0", + "cooldown#0", + "delegationType#0", + "escrowID#0", + "lastValid#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "epochRef#0", + "aggregate%head%11#0", + "aggregate%set_bit%0#0" + ] + }, + "2371": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "admin#0", + "aggregate%head%11#0", + "aggregate%set_bit%0#0", + "cooldown#0", + "delegationType#0", + "escrowID#0", + "lastValid#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "epochRef#0", + "aggregate%head%11#0", + "aggregate%set_bit%0#0", + "2" + ] + }, + "2372": { + "op": "dig 6", + "defined_out": [ + "2", + "admin#0", + "aggregate%head%11#0", + "aggregate%set_bit%0#0", + "cooldown#0", + "delegationType#0", + "escrowID#0", + "lastValid#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "epochRef#0", + "aggregate%head%11#0", + "aggregate%set_bit%0#0", + "2", + "useExecutionKey#0" + ] + }, + "2374": { + "op": "setbit", + "defined_out": [ + "admin#0", + "aggregate%head%11#0", + "aggregate%set_bit%1#0", + "cooldown#0", + "delegationType#0", + "escrowID#0", + "lastValid#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "epochRef#0", + "aggregate%head%11#0", + "aggregate%set_bit%1#0" + ] + }, + "2375": { + "op": "concat", + "defined_out": [ + "admin#0", + "aggregate%head%12#0", + "cooldown#0", + "delegationType#0", + "escrowID#0", + "lastValid#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "epochRef#0", + "aggregate%head%12#0" + ] + }, + "2376": { + "op": "dig 21", + "defined_out": [ + "admin#0", + "aggregate%as_bytes%2#0", + "aggregate%head%12#0", + "cooldown#0", + "delegationType#0", + "escrowID#0", + "lastValid#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "epochRef#0", + "aggregate%head%12#0", + "aggregate%as_bytes%2#0" + ] + }, + "2378": { + "op": "concat", + "defined_out": [ + "admin#0", + "aggregate%as_bytes%2#0", + "aggregate%head%13#0", + "cooldown#0", + "delegationType#0", + "escrowID#0", + "lastValid#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "epochRef#0", + "aggregate%head%13#0" + ] + }, + "2379": { + "op": "swap", + "defined_out": [ + "admin#0", + "aggregate%as_bytes%2#0", + "aggregate%head%13#0", + "cooldown#0", + "delegationType#0", + "epochRef#0", + "escrowID#0", + "lastValid#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "aggregate%head%13#0", + "epochRef#0" + ] + }, + "2380": { + "op": "itob", + "defined_out": [ + "admin#0", + "aggregate%as_bytes%2#0", + "aggregate%head%13#0", + "aggregate%val_as_bytes%7#0", + "cooldown#0", + "delegationType#0", + "escrowID#0", + "lastValid#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "aggregate%head%13#0", + "aggregate%val_as_bytes%7#0" + ] + }, + "2381": { + "op": "concat", + "defined_out": [ + "admin#0", + "aggregate%as_bytes%2#0", + "aggregate%head%14#0", + "cooldown#0", + "delegationType#0", + "escrowID#0", + "lastValid#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "aggregate%head%14#0" + ] + }, + "2382": { + "op": "dig 17", + "defined_out": [ + "admin#0", + "aggregate%as_bytes%2#0", + "aggregate%head%14#0", + "cooldown#0", + "delegationType#0", + "escrowID#0", + "lastValid#0", + "methodInfos#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "aggregate%head%14#0", + "methodInfos#0" + ] + }, + "2384": { + "op": "concat", + "defined_out": [ + "admin#0", + "aggregate%as_bytes%2#0", + "aggregate%concat%1#0", + "cooldown#0", + "delegationType#0", + "escrowID#0", + "lastValid#0", + "methodInfos#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "aggregate%concat%1#0" + ] + }, + "2385": { + "op": "bytec 4 // \"p\"", + "defined_out": [ + "\"p\"", + "admin#0", + "aggregate%as_bytes%2#0", + "aggregate%concat%1#0", + "cooldown#0", + "delegationType#0", + "escrowID#0", + "lastValid#0", + "methodInfos#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "aggregate%concat%1#0", + "\"p\"" + ] + }, + "2387": { + "op": "dig 19", + "defined_out": [ + "\"p\"", + "admin#0", + "aggregate%as_bytes%2#0", + "aggregate%concat%1#0", + "cooldown#0", + "delegationType#0", + "escrowID#0", + "key#0", + "lastValid#0", + "methodInfos#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "aggregate%concat%1#0", + "\"p\"", + "key#0" + ] + }, + "2389": { + "op": "concat", + "defined_out": [ + "admin#0", + "aggregate%as_bytes%2#0", + "aggregate%concat%1#0", + "box_prefixed_key%2#0", + "cooldown#0", + "delegationType#0", + "escrowID#0", + "key#0", + "lastValid#0", + "methodInfos#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "aggregate%concat%1#0", + "box_prefixed_key%2#0" + ] + }, + "2390": { + "op": "dup", + "defined_out": [ + "admin#0", + "aggregate%as_bytes%2#0", + "aggregate%concat%1#0", + "box_prefixed_key%2#0", + "box_prefixed_key%2#0 (copy)", + "cooldown#0", + "delegationType#0", + "escrowID#0", + "key#0", + "lastValid#0", + "methodInfos#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "aggregate%concat%1#0", + "box_prefixed_key%2#0", + "box_prefixed_key%2#0 (copy)" + ] + }, + "2391": { + "op": "box_del", + "defined_out": [ + "admin#0", + "aggregate%as_bytes%2#0", + "aggregate%concat%1#0", + "box_prefixed_key%2#0", + "cooldown#0", + "delegationType#0", + "escrowID#0", + "key#0", + "lastValid#0", + "methodInfos#0", + "useExecutionKey#0", + "useRounds#0", + "{box_del}" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "aggregate%concat%1#0", + "box_prefixed_key%2#0", + "{box_del}" + ] + }, + "2392": { + "op": "pop", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "aggregate%concat%1#0", + "box_prefixed_key%2#0" + ] + }, + "2393": { + "op": "swap", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "aggregate%concat%1#0" + ] + }, + "2394": { + "op": "box_put", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0" + ] + }, + "2395": { + "op": "bytec_3 // \"last_user_interaction\"", + "defined_out": [ + "\"last_user_interaction\"", + "admin#0", + "aggregate%as_bytes%2#0", + "cooldown#0", + "delegationType#0", + "escrowID#0", + "key#0", + "lastValid#0", + "methodInfos#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "\"last_user_interaction\"" + ] + }, + "2396": { + "op": "global LatestTimestamp", + "defined_out": [ + "\"last_user_interaction\"", + "admin#0", + "aggregate%as_bytes%2#0", + "cooldown#0", + "delegationType#0", + "escrowID#0", + "key#0", + "lastValid#0", + "methodInfos#0", + "tmp%0#2", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "\"last_user_interaction\"", + "tmp%0#2" + ] + }, + "2398": { + "op": "app_global_put", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0" + ] + }, + "2399": { + "op": "bytec 6 // \"last_change\"", + "defined_out": [ + "\"last_change\"", + "admin#0", + "aggregate%as_bytes%2#0", + "cooldown#0", + "delegationType#0", + "escrowID#0", + "key#0", + "lastValid#0", + "methodInfos#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "\"last_change\"" + ] + }, + "2401": { + "op": "global LatestTimestamp", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "\"last_change\"", + "tmp%0#2" + ] + }, + "2403": { + "op": "app_global_put", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0" + ] + }, + "2404": { + "op": "intc_1 // 1", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "1" + ] + }, + "2405": { + "op": "return", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0" + ] + }, + "2406": { + "block": "arc58_addNamedPlugin_ternary_false@19", + "stack_in": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0" + ], + "op": "global LatestTimestamp", + "defined_out": [ + "epochRef#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "epochRef#0" + ] + }, + "2408": { + "op": "b arc58_addNamedPlugin_ternary_merge@20" + }, + "2411": { + "block": "arc58_addNamedPlugin_if_body@10", + "stack_in": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0" + ], + "op": "dig 10", + "defined_out": [ + "escrow#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "escrow#0" + ] + }, + "2413": { + "op": "bytec_1 // \"\"", + "defined_out": [ + "\"\"", + "escrow#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "escrow#0", + "\"\"" + ] + }, + "2414": { + "op": "!=", + "defined_out": [ + "escrow#0", + "tmp%12#1" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "tmp%12#1" + ] + }, + "2415": { + "error": "escrow must be set if defaultToEscrow is true", + "op": "assert // escrow must be set if defaultToEscrow is true", + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0" + ] + }, + "2416": { + "op": "bytec_1 // \"\"", + "defined_out": [ + "escrow#0", + "escrowKey#1" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "escrowKey#1" + ] + }, + "2417": { + "op": "bury 19", + "defined_out": [ + "escrow#0", + "escrowKey#1" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0" + ] + }, + "2419": { + "op": "b arc58_addNamedPlugin_after_if_else@11" + }, + "2422": { + "block": "arc58_addNamedPlugin_bool_false@8", + "stack_in": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0" + ], + "op": "intc_0 // 0", + "defined_out": [ + "and_result%1#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "and_result%1#0" + ] + }, + "2423": { + "op": "b arc58_addNamedPlugin_bool_merge@9" + }, + "2426": { + "block": "arc58_addNamedPlugin_bool_false@4", + "stack_in": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0" + ], + "op": "intc_0 // 0", + "defined_out": [ + "and_result%0#0" + ], + "stack_out": [ + "aggregate%as_bytes%2#0", + "escrowKey#1", + "key#0", + "methodInfos#0", + "escrowID#0", + "i#0", + "name#0", + "plugin#0", + "caller#0", + "escrow#0", + "admin#0", + "delegationType#0", + "lastValid#0", + "cooldown#0", + "methods#0", + "aggregate%array_length%2#0", + "useRounds#0", + "useExecutionKey#0", + "defaultToEscrow#0", + "box_prefixed_key%0#0", + "and_result%0#0" + ] + }, + "2427": { + "op": "b arc58_addNamedPlugin_bool_merge@5" + }, + "2430": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_removeNamedPlugin[routing]", + "params": {}, + "block": "arc58_removeNamedPlugin", + "stack_in": [], + "op": "txna ApplicationArgs 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] + }, + "2433": { + "op": "dup", + "defined_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ] + }, + "2434": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "tmp%0#0", + "tmp%0#0 (copy)", + "0" + ] + }, + "2435": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "aggregate%array_length%0#0" + ] + }, + "2436": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "aggregate%array_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "aggregate%array_length%0#0", + "2" + ] + }, + "2437": { + "op": "+", + "defined_out": [ + "add%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "add%0#0" + ] + }, + "2438": { + "op": "dig 1", + "stack_out": [ + "tmp%0#0", + "add%0#0", + "tmp%0#0 (copy)" + ] + }, + "2440": { + "op": "len", + "defined_out": [ + "add%0#0", + "len%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "add%0#0", + "len%0#0" + ] + }, + "2441": { + "op": "==", + "defined_out": [ + "eq%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "eq%0#0" + ] + }, + "2442": { + "error": "invalid number of bytes for (len+utf8[])", + "op": "assert // invalid number of bytes for (len+utf8[])", + "stack_out": [ + "tmp%0#0" + ] + }, + "2443": { + "op": "extract 2 0", + "defined_out": [ + "name#0" + ], + "stack_out": [ + "name#0" + ] + }, + "2446": { + "op": "dup", + "defined_out": [ + "name#0" + ], + "stack_out": [ + "name#0", + "name#0" + ] + }, + "2447": { + "op": "txn Sender", + "defined_out": [ + "name#0", + "tmp%0#1" + ], + "stack_out": [ + "name#0", + "name#0", + "tmp%0#1" + ] + }, + "2449": { + "op": "intc_0 // 0", + "stack_out": [ + "name#0", + "name#0", + "tmp%0#1", + "0" + ] + }, + "2450": { + "op": "bytec_2 // \"admin\"", + "defined_out": [ + "\"admin\"", + "0", + "name#0", + "tmp%0#1" + ], + "stack_out": [ + "name#0", + "name#0", + "tmp%0#1", + "0", + "\"admin\"" + ] + }, + "2451": { + "op": "app_global_get_ex", + "defined_out": [ + "maybe_exists%0#0", + "maybe_value%0#0", + "name#0", + "tmp%0#1" + ], + "stack_out": [ + "name#0", + "name#0", + "tmp%0#1", + "maybe_value%0#0", + "maybe_exists%0#0" + ] + }, + "2452": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "name#0", + "name#0", + "tmp%0#1", + "maybe_value%0#0" + ] + }, + "2453": { + "op": "==", + "defined_out": [ + "name#0", + "tmp%1#1" + ], + "stack_out": [ + "name#0", + "name#0", + "tmp%1#1" + ] + }, + "2454": { + "error": "admin only", + "op": "assert // admin only", + "stack_out": [ + "name#0", + "name#0" + ] + }, + "2455": { + "op": "bytec 16 // \"n\"", + "defined_out": [ + "\"n\"", + "name#0" + ], + "stack_out": [ + "name#0", + "name#0", + "\"n\"" + ] + }, + "2457": { + "op": "swap", + "stack_out": [ + "name#0", + "\"n\"", + "name#0" + ] + }, + "2458": { + "op": "concat", + "defined_out": [ + "box_prefixed_key%0#0", + "name#0" + ], + "stack_out": [ + "name#0", + "box_prefixed_key%0#0" + ] + }, + "2459": { + "op": "dup", + "defined_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "name#0" + ], + "stack_out": [ + "name#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)" + ] + }, + "2460": { + "op": "box_len", + "defined_out": [ + "_%0#0", + "box_prefixed_key%0#0", + "maybe_exists%1#0", + "name#0" + ], + "stack_out": [ + "name#0", + "box_prefixed_key%0#0", + "_%0#0", + "maybe_exists%1#0" + ] + }, + "2461": { + "op": "bury 1", + "stack_out": [ + "name#0", + "box_prefixed_key%0#0", + "maybe_exists%1#0" + ] + }, + "2463": { + "error": "plugin does not exist", + "op": "assert // plugin does not exist", + "stack_out": [ + "name#0", + "box_prefixed_key%0#0" + ] + }, + "2464": { + "op": "dup", + "stack_out": [ + "name#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)" + ] + }, + "2465": { + "op": "box_get", + "defined_out": [ + "aggregate%box_get%1#0", + "app#0", + "box_prefixed_key%0#0", + "name#0" + ], + "stack_out": [ + "name#0", + "box_prefixed_key%0#0", + "app#0", + "aggregate%box_get%1#0" + ] + }, + "2466": { + "op": "pop", + "stack_out": [ + "name#0", + "box_prefixed_key%0#0", + "app#0" + ] + }, + "2467": { + "op": "dup", + "stack_out": [ + "name#0", + "box_prefixed_key%0#0", + "app#0", + "app#0" + ] + }, + "2468": { + "op": "cover 2", + "defined_out": [ + "app#0", + "box_prefixed_key%0#0", + "name#0" + ], + "stack_out": [ + "name#0", + "app#0", + "box_prefixed_key%0#0", + "app#0" + ] + }, + "2470": { + "op": "bytec 4 // \"p\"", + "defined_out": [ + "\"p\"", + "app#0", + "box_prefixed_key%0#0", + "name#0" + ], + "stack_out": [ + "name#0", + "app#0", + "box_prefixed_key%0#0", + "app#0", + "\"p\"" + ] + }, + "2472": { + "op": "swap", + "stack_out": [ + "name#0", + "app#0", + "box_prefixed_key%0#0", + "\"p\"", + "app#0" + ] + }, + "2473": { + "op": "concat", + "defined_out": [ + "app#0", + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "name#0" + ], + "stack_out": [ + "name#0", + "app#0", + "box_prefixed_key%0#0", + "box_prefixed_key%2#0" + ] + }, + "2474": { + "op": "dup", + "defined_out": [ + "app#0", + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "box_prefixed_key%2#0 (copy)", + "name#0" + ], + "stack_out": [ + "name#0", + "app#0", + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "box_prefixed_key%2#0 (copy)" + ] + }, + "2475": { + "op": "box_len", + "defined_out": [ + "_%1#0", + "app#0", + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "maybe_exists%2#0", + "name#0" + ], + "stack_out": [ + "name#0", + "app#0", + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "_%1#0", + "maybe_exists%2#0" + ] + }, + "2476": { + "op": "bury 1", + "stack_out": [ + "name#0", + "app#0", + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "maybe_exists%2#0" + ] + }, + "2478": { + "error": "plugin does not exist", + "op": "assert // plugin does not exist", + "stack_out": [ + "name#0", + "app#0", + "box_prefixed_key%0#0", + "box_prefixed_key%2#0" + ] + }, + "2479": { + "op": "dup", + "stack_out": [ + "name#0", + "app#0", + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "box_prefixed_key%2#0 (copy)" + ] + }, + "2480": { + "op": "pushint 44 // 44", + "defined_out": [ + "44", + "app#0", + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "box_prefixed_key%2#0 (copy)", + "name#0" + ], + "stack_out": [ + "name#0", + "app#0", + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "box_prefixed_key%2#0 (copy)", + "44" + ] + }, + "2482": { + "op": "intc_2 // 2", + "stack_out": [ + "name#0", + "app#0", + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "box_prefixed_key%2#0 (copy)", + "44", + "2" + ] + }, + "2483": { + "op": "box_extract", + "defined_out": [ + "app#0", + "box%box_extract%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "name#0" + ], + "stack_out": [ + "name#0", + "app#0", + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "box%box_extract%0#0" + ] + }, + "2484": { + "op": "btoi", + "defined_out": [ + "app#0", + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "methodsLength#0", + "name#0" + ], + "stack_out": [ + "name#0", + "app#0", + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "methodsLength#0" + ] + }, + "2485": { + "op": "cover 2", + "defined_out": [ + "app#0", + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "methodsLength#0", + "name#0" + ], + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "box_prefixed_key%0#0", + "box_prefixed_key%2#0" + ] + }, + "2487": { + "op": "swap", + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "box_prefixed_key%2#0", + "box_prefixed_key%0#0" + ] + }, + "2488": { + "op": "box_del", + "defined_out": [ + "app#0", + "box_prefixed_key%2#0", + "methodsLength#0", + "name#0", + "{box_del}" + ], + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "box_prefixed_key%2#0", + "{box_del}" + ] + }, + "2489": { + "op": "pop", + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "box_prefixed_key%2#0" + ] + }, + "2490": { + "op": "box_del", + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "{box_del}" + ] + }, + "2491": { + "op": "pop", + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0" + ] + }, + "2492": { + "op": "intc_0 // 0", + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "0" + ] + }, + "2493": { + "op": "bytec_0 // \"controlled_address\"", + "defined_out": [ + "\"controlled_address\"", + "0", + "app#0", + "methodsLength#0", + "name#0" + ], + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "0", + "\"controlled_address\"" + ] + }, + "2494": { + "op": "app_global_get_ex", + "defined_out": [ + "app#0", + "maybe_exists%3#0", + "maybe_value%1#0", + "methodsLength#0", + "name#0" + ], + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "maybe_value%1#0", + "maybe_exists%3#0" + ] + }, + "2495": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "maybe_value%1#0" + ] + }, + "2496": { + "op": "global CurrentApplicationAddress", + "defined_out": [ + "app#0", + "maybe_value%1#0", + "methodsLength#0", + "name#0", + "tmp%3#0" + ], + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "maybe_value%1#0", + "tmp%3#0" + ] + }, + "2498": { + "op": "!=", + "defined_out": [ + "app#0", + "methodsLength#0", + "name#0", + "tmp%4#0" + ], + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "tmp%4#0" + ] + }, + "2499": { + "op": "bz arc58_removeNamedPlugin_after_if_else@4", + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0" + ] + }, + "2502": { + "op": "itxn_begin" + }, + "2503": { + "op": "intc_0 // 0", + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "0" + ] + }, + "2504": { + "op": "bytec_0 // \"controlled_address\"", + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "0", + "\"controlled_address\"" + ] + }, + "2505": { + "op": "app_global_get_ex", + "defined_out": [ + "app#0", + "maybe_exists%4#0", + "maybe_value%2#0", + "methodsLength#0", + "name#0" + ], + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "maybe_value%2#0", + "maybe_exists%4#0" + ] + }, + "2506": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "maybe_value%2#0" + ] + }, + "2507": { + "op": "dig 3", + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "maybe_value%2#0", + "name#0" + ] + }, + "2509": { + "op": "len", + "defined_out": [ + "app#0", + "maybe_value%2#0", + "methodsLength#0", + "name#0", + "tmp%0#2" + ], + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "maybe_value%2#0", + "tmp%0#2" + ] + }, + "2510": { + "op": "intc 4 // 400", + "defined_out": [ + "400", + "app#0", + "maybe_value%2#0", + "methodsLength#0", + "name#0", + "tmp%0#2" + ], + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "maybe_value%2#0", + "tmp%0#2", + "400" + ] + }, + "2512": { + "op": "*", + "defined_out": [ + "app#0", + "maybe_value%2#0", + "methodsLength#0", + "name#0", + "tmp%1#2" + ], + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "maybe_value%2#0", + "tmp%1#2" + ] + }, + "2513": { + "op": "intc 5 // 21700", + "defined_out": [ + "21700", + "app#0", + "maybe_value%2#0", + "methodsLength#0", + "name#0", + "tmp%1#2" + ], + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "maybe_value%2#0", + "tmp%1#2", + "21700" + ] + }, + "2515": { + "op": "+", + "defined_out": [ + "app#0", + "maybe_value%2#0", + "methodsLength#0", + "name#0", + "tmp%2#0" + ], + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "maybe_value%2#0", + "tmp%2#0" + ] + }, + "2516": { + "op": "dig 3", + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "maybe_value%2#0", + "tmp%2#0", + "app#0" + ] + }, + "2518": { + "op": "dup", + "defined_out": [ + "app#0", + "app#0 (copy)", + "maybe_value%2#0", + "methodsLength#0", + "name#0", + "tmp%2#0" + ], + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "maybe_value%2#0", + "tmp%2#0", + "app#0", + "app#0 (copy)" + ] + }, + "2519": { + "op": "pushint 40 // 40", + "defined_out": [ + "40", + "app#0", + "app#0 (copy)", + "maybe_value%2#0", + "methodsLength#0", + "name#0", + "tmp%2#0" + ], + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "maybe_value%2#0", + "tmp%2#0", + "app#0", + "app#0 (copy)", + "40" + ] + }, + "2521": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%extract_uint16%0#0", + "app#0", + "maybe_value%2#0", + "methodsLength#0", + "name#0", + "tmp%2#0" + ], + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "maybe_value%2#0", + "tmp%2#0", + "app#0", + "aggregate%extract_uint16%0#0" + ] + }, + "2522": { + "op": "dig 1", + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "maybe_value%2#0", + "tmp%2#0", + "app#0", + "aggregate%extract_uint16%0#0", + "app#0 (copy)" + ] + }, + "2524": { + "op": "len", + "defined_out": [ + "aggregate%extract_uint16%0#0", + "aggregate%len%0#0", + "app#0", + "maybe_value%2#0", + "methodsLength#0", + "name#0", + "tmp%2#0" + ], + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "maybe_value%2#0", + "tmp%2#0", + "app#0", + "aggregate%extract_uint16%0#0", + "aggregate%len%0#0" + ] + }, + "2525": { + "op": "substring3", + "defined_out": [ + "aggregate%substring3%0#0", + "app#0", + "maybe_value%2#0", + "methodsLength#0", + "name#0", + "tmp%2#0" + ], + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "maybe_value%2#0", + "tmp%2#0", + "aggregate%substring3%0#0" + ] + }, + "2526": { + "op": "extract 2 0", + "defined_out": [ + "app#0", + "maybe_value%2#0", + "methodsLength#0", + "name#0", + "tmp%2#0", + "values%0#0" + ], + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "maybe_value%2#0", + "tmp%2#0", + "values%0#0" + ] + }, + "2529": { + "op": "dig 3", + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "maybe_value%2#0", + "tmp%2#0", + "values%0#0", + "methodsLength#0" + ] + }, + "2531": { + "callsub": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.pluginsMbr", + "op": "callsub pluginsMbr", + "defined_out": [ + "app#0", + "maybe_value%2#0", + "methodsLength#0", + "name#0", + "tmp%2#0", + "tmp%6#0" + ], + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "maybe_value%2#0", + "tmp%2#0", + "tmp%6#0" + ] + }, + "2534": { + "op": "+", + "defined_out": [ + "app#0", + "inner_txn_params%0%%param_Amount_idx_0#0", + "maybe_value%2#0", + "methodsLength#0", + "name#0" + ], + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Amount_idx_0#0" + ] + }, + "2535": { + "op": "itxn_field Amount", + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "maybe_value%2#0" + ] + }, + "2537": { + "op": "itxn_field Receiver", + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0" + ] + }, + "2539": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "app#0", + "methodsLength#0", + "name#0" + ], + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "1" + ] + }, + "2540": { + "op": "itxn_field TypeEnum", + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0" + ] + }, + "2542": { + "op": "intc_0 // 0", + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "0" + ] + }, + "2543": { + "op": "itxn_field Fee", + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0" + ] + }, + "2545": { + "op": "itxn_submit" + }, + "2546": { + "block": "arc58_removeNamedPlugin_after_if_else@4", + "stack_in": [ + "name#0", + "app#0", + "methodsLength#0" + ], + "op": "bytec_3 // \"last_user_interaction\"", + "defined_out": [ + "\"last_user_interaction\"" + ], + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "\"last_user_interaction\"" + ] + }, + "2547": { + "op": "global LatestTimestamp", + "defined_out": [ + "\"last_user_interaction\"", + "tmp%0#2" + ], + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "\"last_user_interaction\"", + "tmp%0#2" + ] + }, + "2549": { + "op": "app_global_put", + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0" + ] + }, + "2550": { + "op": "bytec 6 // \"last_change\"", + "defined_out": [ + "\"last_change\"" + ], + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "\"last_change\"" + ] + }, + "2552": { + "op": "global LatestTimestamp", + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "\"last_change\"", + "tmp%0#2" + ] + }, + "2554": { + "op": "app_global_put", + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0" + ] + }, + "2555": { + "op": "intc_1 // 1", + "defined_out": [ + "1" + ], + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0", + "1" + ] + }, + "2556": { + "op": "return", + "stack_out": [ + "name#0", + "app#0", + "methodsLength#0" + ] + }, + "2557": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_newEscrow[routing]", + "params": {}, + "block": "arc58_newEscrow", + "stack_in": [], + "op": "txna ApplicationArgs 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] + }, + "2560": { + "op": "dup", + "defined_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ] + }, + "2561": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "tmp%0#0", + "tmp%0#0 (copy)", + "0" + ] + }, + "2562": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "aggregate%array_length%0#0" + ] + }, + "2563": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "aggregate%array_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "aggregate%array_length%0#0", + "2" + ] + }, + "2564": { + "op": "+", + "defined_out": [ + "add%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "add%0#0" + ] + }, + "2565": { + "op": "dig 1", + "stack_out": [ + "tmp%0#0", + "add%0#0", + "tmp%0#0 (copy)" + ] + }, + "2567": { + "op": "len", + "defined_out": [ + "add%0#0", + "len%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "add%0#0", + "len%0#0" + ] + }, + "2568": { + "op": "==", + "defined_out": [ + "eq%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "eq%0#0" + ] + }, + "2569": { + "error": "invalid number of bytes for (len+utf8[])", + "op": "assert // invalid number of bytes for (len+utf8[])", + "stack_out": [ + "tmp%0#0" + ] + }, + "2570": { + "op": "extract 2 0", + "defined_out": [ + "escrow#0" + ], + "stack_out": [ + "escrow#0" + ] + }, + "2573": { + "op": "txn Sender", + "defined_out": [ + "escrow#0", + "tmp%0#1" + ], + "stack_out": [ + "escrow#0", + "tmp%0#1" + ] + }, + "2575": { + "op": "intc_0 // 0", + "stack_out": [ + "escrow#0", + "tmp%0#1", + "0" + ] + }, + "2576": { + "op": "bytec_2 // \"admin\"", + "defined_out": [ + "\"admin\"", + "0", + "escrow#0", + "tmp%0#1" + ], + "stack_out": [ + "escrow#0", + "tmp%0#1", + "0", + "\"admin\"" + ] + }, + "2577": { + "op": "app_global_get_ex", + "defined_out": [ + "escrow#0", + "maybe_exists%0#0", + "maybe_value%0#0", + "tmp%0#1" + ], + "stack_out": [ + "escrow#0", + "tmp%0#1", + "maybe_value%0#0", + "maybe_exists%0#0" + ] + }, + "2578": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "escrow#0", + "tmp%0#1", + "maybe_value%0#0" + ] + }, + "2579": { + "op": "==", + "defined_out": [ + "escrow#0", + "tmp%1#1" + ], + "stack_out": [ + "escrow#0", + "tmp%1#1" + ] + }, + "2580": { + "error": "admin only", + "op": "assert // admin only", + "stack_out": [ + "escrow#0" + ] + }, + "2581": { + "op": "bytec 5 // \"e\"", + "defined_out": [ + "\"e\"", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "\"e\"" + ] + }, + "2583": { + "op": "dig 1", + "defined_out": [ + "\"e\"", + "escrow#0", + "escrow#0 (copy)" + ], + "stack_out": [ + "escrow#0", + "\"e\"", + "escrow#0 (copy)" + ] + }, + "2585": { + "op": "concat", + "defined_out": [ + "box_prefixed_key%0#0", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "box_prefixed_key%0#0" + ] + }, + "2586": { + "op": "box_len", + "defined_out": [ + "_%0#0", + "escrow#0", + "maybe_exists%1#0" + ], + "stack_out": [ + "escrow#0", + "_%0#0", + "maybe_exists%1#0" + ] + }, + "2587": { + "op": "bury 1", + "stack_out": [ + "escrow#0", + "maybe_exists%1#0" + ] + }, + "2589": { + "op": "!", + "defined_out": [ + "escrow#0", + "tmp%2#1" + ], + "stack_out": [ + "escrow#0", + "tmp%2#1" + ] + }, + "2590": { + "error": "escrow already exists", + "op": "assert // escrow already exists", + "stack_out": [ + "escrow#0" + ] + }, + "2591": { + "op": "dup", + "stack_out": [ + "escrow#0", + "escrow#0 (copy)" + ] + }, + "2592": { + "op": "bytec_1 // \"\"", + "defined_out": [ + "\"\"", + "escrow#0", + "escrow#0 (copy)" + ], + "stack_out": [ + "escrow#0", + "escrow#0 (copy)", + "\"\"" + ] + }, + "2593": { + "op": "!=", + "defined_out": [ + "escrow#0", + "tmp%3#1" + ], + "stack_out": [ + "escrow#0", + "tmp%3#1" + ] + }, + "2594": { + "error": "Escrow name is required", + "op": "assert // Escrow name is required", + "stack_out": [ + "escrow#0" + ] + }, + "2595": { + "callsub": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.newEscrow", + "op": "callsub newEscrow", + "defined_out": [ + "tmp%4#1" + ], + "stack_out": [ + "tmp%4#1" + ] + }, + "2598": { + "op": "itob", + "defined_out": [ + "aggregate%val_as_bytes%0#0" + ], + "stack_out": [ + "aggregate%val_as_bytes%0#0" + ] + }, + "2599": { + "op": "bytec 7 // 0x151f7c75", + "defined_out": [ + "0x151f7c75", + "aggregate%val_as_bytes%0#0" + ], + "stack_out": [ + "aggregate%val_as_bytes%0#0", + "0x151f7c75" + ] + }, + "2601": { + "op": "swap", + "stack_out": [ + "0x151f7c75", + "aggregate%val_as_bytes%0#0" + ] + }, + "2602": { + "op": "concat", + "defined_out": [ + "tmp%4#0" + ], + "stack_out": [ + "tmp%4#0" + ] + }, + "2603": { + "op": "log", + "stack_out": [] + }, + "2604": { + "op": "intc_1 // 1", + "defined_out": [ + "1" + ], + "stack_out": [ + "1" + ] + }, + "2605": { + "op": "return", + "stack_out": [] + }, + "2606": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_toggleEscrowLock[routing]", + "params": {}, + "block": "arc58_toggleEscrowLock", + "stack_in": [], + "op": "txna ApplicationArgs 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] + }, + "2609": { + "op": "dup", + "defined_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ] + }, + "2610": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "tmp%0#0", + "tmp%0#0 (copy)", + "0" + ] + }, + "2611": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "aggregate%array_length%0#0" + ] + }, + "2612": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "aggregate%array_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "aggregate%array_length%0#0", + "2" + ] + }, + "2613": { + "op": "+", + "defined_out": [ + "add%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "add%0#0" + ] + }, + "2614": { + "op": "dig 1", + "stack_out": [ + "tmp%0#0", + "add%0#0", + "tmp%0#0 (copy)" + ] + }, + "2616": { + "op": "len", + "defined_out": [ + "add%0#0", + "len%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "add%0#0", + "len%0#0" + ] + }, + "2617": { + "op": "==", + "defined_out": [ + "eq%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "eq%0#0" + ] + }, + "2618": { + "error": "invalid number of bytes for (len+utf8[])", + "op": "assert // invalid number of bytes for (len+utf8[])", + "stack_out": [ + "tmp%0#0" + ] + }, + "2619": { + "op": "extract 2 0", + "defined_out": [ + "escrow#0" + ], + "stack_out": [ + "escrow#0" + ] + }, + "2622": { + "op": "txn Sender", + "defined_out": [ + "escrow#0", + "tmp%0#1" + ], + "stack_out": [ + "escrow#0", + "tmp%0#1" + ] + }, + "2624": { + "op": "intc_0 // 0", + "stack_out": [ + "escrow#0", + "tmp%0#1", + "0" + ] + }, + "2625": { + "op": "bytec_2 // \"admin\"", + "defined_out": [ + "\"admin\"", + "0", + "escrow#0", + "tmp%0#1" + ], + "stack_out": [ + "escrow#0", + "tmp%0#1", + "0", + "\"admin\"" + ] + }, + "2626": { + "op": "app_global_get_ex", + "defined_out": [ + "escrow#0", + "maybe_exists%0#0", + "maybe_value%0#0", + "tmp%0#1" + ], + "stack_out": [ + "escrow#0", + "tmp%0#1", + "maybe_value%0#0", + "maybe_exists%0#0" + ] + }, + "2627": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "escrow#0", + "tmp%0#1", + "maybe_value%0#0" + ] + }, + "2628": { + "op": "==", + "defined_out": [ + "escrow#0", + "tmp%1#1" + ], + "stack_out": [ + "escrow#0", + "tmp%1#1" + ] + }, + "2629": { + "error": "admin only", + "op": "assert // admin only", + "stack_out": [ + "escrow#0" + ] + }, + "2630": { + "op": "bytec 5 // \"e\"", + "defined_out": [ + "\"e\"", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "\"e\"" + ] + }, + "2632": { + "op": "swap", + "stack_out": [ + "\"e\"", + "escrow#0" + ] + }, + "2633": { + "op": "concat", + "defined_out": [ + "box_prefixed_key%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0" + ] + }, + "2634": { + "op": "dup", + "defined_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)" + ] + }, + "2635": { + "op": "box_len", + "defined_out": [ + "_%0#0", + "box_prefixed_key%0#0", + "maybe_exists%1#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "_%0#0", + "maybe_exists%1#0" + ] + }, + "2636": { + "op": "bury 1", + "stack_out": [ + "box_prefixed_key%0#0", + "maybe_exists%1#0" + ] + }, + "2638": { + "error": "escrow does not exist", + "op": "assert // escrow does not exist", + "stack_out": [ + "box_prefixed_key%0#0" + ] + }, + "2639": { + "op": "dup", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)" + ] + }, + "2640": { + "op": "box_get", + "defined_out": [ + "aggregate%box_get%0#0", + "aggregate%box_get%1#0", + "box_prefixed_key%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%box_get%0#0", + "aggregate%box_get%1#0" + ] + }, + "2641": { + "op": "pop", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%box_get%0#0" + ] + }, + "2642": { + "op": "pushint 64 // 64", + "defined_out": [ + "64", + "aggregate%box_get%0#0", + "box_prefixed_key%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%box_get%0#0", + "64" + ] + }, + "2644": { + "op": "getbit", + "defined_out": [ + "aggregate%get_bit%0#0", + "box_prefixed_key%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%get_bit%0#0" + ] + }, + "2645": { + "op": "!", + "defined_out": [ + "box_prefixed_key%0#0", + "tmp%2#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%2#1" + ] + }, + "2646": { + "op": "dig 1", + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%2#1", + "box_prefixed_key%0#0 (copy)" + ] + }, + "2648": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "tmp%2#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%2#1", + "box_prefixed_key%0#0 (copy)", + "8" + ] + }, + "2649": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "8", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "tmp%2#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%2#1", + "box_prefixed_key%0#0 (copy)", + "8", + "1" + ] + }, + "2650": { + "op": "box_extract", + "defined_out": [ + "box%box_extract%0#0", + "box_prefixed_key%0#0", + "tmp%2#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%2#1", + "box%box_extract%0#0" + ] + }, + "2651": { + "op": "intc_0 // 0", + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%2#1", + "box%box_extract%0#0", + "0" + ] + }, + "2652": { + "op": "uncover 2", + "stack_out": [ + "box_prefixed_key%0#0", + "box%box_extract%0#0", + "0", + "tmp%2#1" + ] + }, + "2654": { + "op": "setbit", + "defined_out": [ + "aggregate%updated_target%0#0", + "box_prefixed_key%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%updated_target%0#0" + ] + }, + "2655": { + "op": "dig 1", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%updated_target%0#0", + "box_prefixed_key%0#0 (copy)" + ] + }, + "2657": { + "op": "intc_3 // 8", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%updated_target%0#0", + "box_prefixed_key%0#0 (copy)", + "8" + ] + }, + "2658": { + "op": "uncover 2", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "8", + "aggregate%updated_target%0#0" + ] + }, + "2660": { + "op": "box_replace", + "stack_out": [ + "box_prefixed_key%0#0" + ] + }, + "2661": { + "op": "bytec_3 // \"last_user_interaction\"", + "defined_out": [ + "\"last_user_interaction\"", + "box_prefixed_key%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "\"last_user_interaction\"" + ] + }, + "2662": { + "op": "global LatestTimestamp", + "defined_out": [ + "\"last_user_interaction\"", + "box_prefixed_key%0#0", + "tmp%0#2" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "\"last_user_interaction\"", + "tmp%0#2" + ] + }, + "2664": { + "op": "app_global_put", + "stack_out": [ + "box_prefixed_key%0#0" + ] + }, + "2665": { + "op": "bytec 6 // \"last_change\"", + "defined_out": [ + "\"last_change\"", + "box_prefixed_key%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "\"last_change\"" + ] + }, + "2667": { + "op": "global LatestTimestamp", + "stack_out": [ + "box_prefixed_key%0#0", + "\"last_change\"", + "tmp%0#2" + ] + }, + "2669": { + "op": "app_global_put", + "stack_out": [ + "box_prefixed_key%0#0" + ] + }, + "2670": { + "op": "box_get", + "defined_out": [ + "aggregate%box_get%2#0", + "aggregate%box_get%3#0" + ], + "stack_out": [ + "aggregate%box_get%2#0", + "aggregate%box_get%3#0" + ] + }, + "2671": { + "op": "pop", + "stack_out": [ + "aggregate%box_get%2#0" + ] + }, + "2672": { + "op": "bytec 7 // 0x151f7c75", + "defined_out": [ + "0x151f7c75", + "aggregate%box_get%2#0" + ], + "stack_out": [ + "aggregate%box_get%2#0", + "0x151f7c75" + ] + }, + "2674": { + "op": "swap", + "stack_out": [ + "0x151f7c75", + "aggregate%box_get%2#0" + ] + }, + "2675": { + "op": "concat", + "defined_out": [ + "tmp%3#0" + ], + "stack_out": [ + "tmp%3#0" + ] + }, + "2676": { + "op": "log", + "stack_out": [] + }, + "2677": { + "op": "intc_1 // 1", + "stack_out": [ + "1" + ] + }, + "2678": { + "op": "return", + "stack_out": [] + }, + "2679": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_reclaim[routing]", + "params": {}, + "block": "arc58_reclaim", + "stack_in": [], + "op": "intc_0 // 0", + "stack_out": [ + "maybe_value%1#0" + ] + }, + "2680": { + "op": "dup", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0" + ] + }, + "2681": { + "op": "bytec_1 // \"\"", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0" + ] + }, + "2682": { + "op": "dupn 4", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0" + ] + }, + "2684": { + "op": "txna ApplicationArgs 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "tmp%0#0" + ] + }, + "2687": { + "op": "dup", + "defined_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "tmp%0#0", + "tmp%0#0 (copy)" + ] + }, + "2688": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "tmp%0#0", + "tmp%0#0 (copy)", + "0" + ] + }, + "2689": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "tmp%0#0", + "aggregate%array_length%0#0" + ] + }, + "2690": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "aggregate%array_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "tmp%0#0", + "aggregate%array_length%0#0", + "2" + ] + }, + "2691": { + "op": "+", + "defined_out": [ + "add%0#0", + "tmp%0#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "tmp%0#0", + "add%0#0" + ] + }, + "2692": { + "op": "dig 1", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "tmp%0#0", + "add%0#0", + "tmp%0#0 (copy)" + ] + }, + "2694": { + "op": "len", + "defined_out": [ + "add%0#0", + "len%0#0", + "tmp%0#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "tmp%0#0", + "add%0#0", + "len%0#0" + ] + }, + "2695": { + "op": "==", + "defined_out": [ + "eq%0#0", + "tmp%0#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "tmp%0#0", + "eq%0#0" + ] + }, + "2696": { + "error": "invalid number of bytes for (len+utf8[])", + "op": "assert // invalid number of bytes for (len+utf8[])", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "tmp%0#0" + ] + }, + "2697": { + "op": "extract 2 0", + "defined_out": [ + "escrow#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "escrow#0" + ] + }, + "2700": { + "op": "txna ApplicationArgs 2" + }, + "2703": { + "op": "dup", + "defined_out": [ + "escrow#0", + "reclaims#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "escrow#0", + "reclaims#0", + "reclaims#0" + ] + }, + "2704": { + "op": "cover 2", + "defined_out": [ + "escrow#0", + "reclaims#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "escrow#0", + "reclaims#0" + ] + }, + "2706": { + "op": "dup", + "defined_out": [ + "escrow#0", + "reclaims#0", + "reclaims#0 (copy)" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "escrow#0", + "reclaims#0", + "reclaims#0 (copy)" + ] + }, + "2707": { + "op": "intc_0 // 0", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "escrow#0", + "reclaims#0", + "reclaims#0 (copy)", + "0" + ] + }, + "2708": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%1#0", + "escrow#0", + "reclaims#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "escrow#0", + "reclaims#0", + "aggregate%array_length%1#0" + ] + }, + "2709": { + "op": "dup", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "escrow#0", + "reclaims#0", + "aggregate%array_length%1#0", + "aggregate%array_length%1#0" + ] + }, + "2710": { + "op": "cover 3", + "defined_out": [ + "aggregate%array_length%1#0", + "escrow#0", + "reclaims#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "escrow#0", + "reclaims#0", + "aggregate%array_length%1#0" + ] + }, + "2712": { + "op": "pushint 17 // 17", + "defined_out": [ + "17", + "aggregate%array_length%1#0", + "escrow#0", + "reclaims#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "escrow#0", + "reclaims#0", + "aggregate%array_length%1#0", + "17" + ] + }, + "2714": { + "op": "*", + "defined_out": [ + "aggregate%array_length%1#0", + "escrow#0", + "mul%1#0", + "reclaims#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "escrow#0", + "reclaims#0", + "mul%1#0" + ] + }, + "2715": { + "op": "intc_2 // 2", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "escrow#0", + "reclaims#0", + "mul%1#0", + "2" + ] + }, + "2716": { + "op": "+", + "defined_out": [ + "add%1#0", + "aggregate%array_length%1#0", + "escrow#0", + "reclaims#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "escrow#0", + "reclaims#0", + "add%1#0" + ] + }, + "2717": { + "op": "swap", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "escrow#0", + "add%1#0", + "reclaims#0" + ] + }, + "2718": { + "op": "len", + "defined_out": [ + "add%1#0", + "aggregate%array_length%1#0", + "escrow#0", + "len%1#0", + "reclaims#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "escrow#0", + "add%1#0", + "len%1#0" + ] + }, + "2719": { + "op": "==", + "defined_out": [ + "aggregate%array_length%1#0", + "eq%1#0", + "escrow#0", + "reclaims#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "escrow#0", + "eq%1#0" + ] + }, + "2720": { + "error": "invalid number of bytes for (len+(uint64,uint64,bool1)[])", + "op": "assert // invalid number of bytes for (len+(uint64,uint64,bool1)[])", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "escrow#0" + ] + }, + "2721": { + "op": "intc_0 // 0", + "defined_out": [ + "aggregate%array_length%1#0", + "escrow#0", + "reclaims#0", + "xfer%%param_AssetCloseTo_idx_0#1" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "escrow#0", + "xfer%%param_AssetCloseTo_idx_0#1" + ] + }, + "2722": { + "op": "swap", + "defined_out": [ + "aggregate%array_length%1#0", + "escrow#0", + "reclaims#0", + "xfer%%param_AssetCloseTo_idx_0#1" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "escrow#0" + ] + }, + "2723": { + "op": "intc_0 // 0", + "defined_out": [ + "aggregate%array_length%1#0", + "escrow#0", + "pmt%%param_CloseRemainderTo_idx_0#1", + "reclaims#0", + "xfer%%param_AssetCloseTo_idx_0#1" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "escrow#0", + "pmt%%param_CloseRemainderTo_idx_0#1" + ] + }, + "2724": { + "op": "swap", + "defined_out": [ + "aggregate%array_length%1#0", + "escrow#0", + "pmt%%param_CloseRemainderTo_idx_0#1", + "reclaims#0", + "xfer%%param_AssetCloseTo_idx_0#1" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "escrow#0" + ] + }, + "2725": { + "op": "txn Sender", + "defined_out": [ + "aggregate%array_length%1#0", + "escrow#0", + "pmt%%param_CloseRemainderTo_idx_0#1", + "reclaims#0", + "tmp%0#1", + "xfer%%param_AssetCloseTo_idx_0#1" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "escrow#0", + "tmp%0#1" + ] + }, + "2727": { + "op": "intc_0 // 0", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "escrow#0", + "tmp%0#1", + "0" + ] + }, + "2728": { + "op": "bytec_2 // \"admin\"", + "defined_out": [ + "\"admin\"", + "0", + "aggregate%array_length%1#0", + "escrow#0", + "pmt%%param_CloseRemainderTo_idx_0#1", + "reclaims#0", + "tmp%0#1", + "xfer%%param_AssetCloseTo_idx_0#1" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "escrow#0", + "tmp%0#1", + "0", + "\"admin\"" + ] + }, + "2729": { + "op": "app_global_get_ex", + "defined_out": [ + "aggregate%array_length%1#0", + "escrow#0", + "maybe_exists%0#0", + "maybe_value%0#0", + "pmt%%param_CloseRemainderTo_idx_0#1", + "reclaims#0", + "tmp%0#1", + "xfer%%param_AssetCloseTo_idx_0#1" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "escrow#0", + "tmp%0#1", + "maybe_value%0#0", + "maybe_exists%0#0" + ] + }, + "2730": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "escrow#0", + "tmp%0#1", + "maybe_value%0#0" + ] + }, + "2731": { + "op": "==", + "defined_out": [ + "aggregate%array_length%1#0", + "escrow#0", + "pmt%%param_CloseRemainderTo_idx_0#1", + "reclaims#0", + "tmp%1#1", + "xfer%%param_AssetCloseTo_idx_0#1" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "escrow#0", + "tmp%1#1" + ] + }, + "2732": { + "error": "forbidden", + "op": "assert // forbidden", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "escrow#0" + ] + }, + "2733": { + "op": "bytec 5 // \"e\"", + "defined_out": [ + "\"e\"", + "aggregate%array_length%1#0", + "escrow#0", + "pmt%%param_CloseRemainderTo_idx_0#1", + "reclaims#0", + "xfer%%param_AssetCloseTo_idx_0#1" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "escrow#0", + "\"e\"" + ] + }, + "2735": { + "op": "swap", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "\"e\"", + "escrow#0" + ] + }, + "2736": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%1#0", + "box_prefixed_key%0#0", + "pmt%%param_CloseRemainderTo_idx_0#1", + "reclaims#0", + "xfer%%param_AssetCloseTo_idx_0#1" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "box_prefixed_key%0#0" + ] + }, + "2737": { + "op": "dup", + "defined_out": [ + "aggregate%array_length%1#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "pmt%%param_CloseRemainderTo_idx_0#1", + "reclaims#0", + "xfer%%param_AssetCloseTo_idx_0#1" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)" + ] + }, + "2738": { + "op": "box_len", + "defined_out": [ + "_%0#0", + "aggregate%array_length%1#0", + "box_prefixed_key%0#0", + "maybe_exists%1#0", + "pmt%%param_CloseRemainderTo_idx_0#1", + "reclaims#0", + "xfer%%param_AssetCloseTo_idx_0#1" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "box_prefixed_key%0#0", + "_%0#0", + "maybe_exists%1#0" + ] + }, + "2739": { + "op": "bury 1", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "box_prefixed_key%0#0", + "maybe_exists%1#0" + ] + }, + "2741": { + "error": "escrow does not exist", + "op": "assert // escrow does not exist", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "box_prefixed_key%0#0" + ] + }, + "2742": { + "op": "box_get", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%box_get%0#0", + "aggregate%box_get%1#0", + "pmt%%param_CloseRemainderTo_idx_0#1", + "reclaims#0", + "xfer%%param_AssetCloseTo_idx_0#1" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "aggregate%box_get%0#0", + "aggregate%box_get%1#0" + ] + }, + "2743": { + "op": "pop", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "aggregate%box_get%0#0" + ] + }, + "2744": { + "op": "intc_0 // 0", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "aggregate%box_get%0#0", + "0" + ] + }, + "2745": { + "op": "extract_uint64", + "defined_out": [ + "aggregate%array_length%1#0", + "pmt%%param_CloseRemainderTo_idx_0#1", + "reclaims#0", + "values%0#0", + "xfer%%param_AssetCloseTo_idx_0#1" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "values%0#0" + ] + }, + "2746": { + "op": "app_params_get AppAddress", + "defined_out": [ + "aggregate%array_length%1#0", + "check%0#0", + "pmt%%param_CloseRemainderTo_idx_0#1", + "reclaims#0", + "sender#0", + "xfer%%param_AssetCloseTo_idx_0#1" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "check%0#0" + ] + }, + "2748": { + "error": "application exists", + "op": "assert // application exists", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0" + ] + }, + "2749": { + "op": "intc_0 // 0", + "defined_out": [ + "aggregate%array_length%1#0", + "i#0", + "pmt%%param_CloseRemainderTo_idx_0#1", + "reclaims#0", + "sender#0", + "xfer%%param_AssetCloseTo_idx_0#1" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0" + ] + }, + "2750": { + "block": "arc58_reclaim_while_top@2", + "stack_in": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0" + ], + "op": "dup", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "i#0" + ] + }, + "2751": { + "op": "dig 5", + "defined_out": [ + "aggregate%array_length%1#0", + "i#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "i#0", + "aggregate%array_length%1#0" + ] + }, + "2753": { + "op": "<", + "defined_out": [ + "aggregate%array_length%1#0", + "i#0", + "tmp%3#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "tmp%3#0" + ] + }, + "2754": { + "op": "bz arc58_reclaim_after_while@17", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0" + ] + }, + "2757": { + "op": "dig 5", + "defined_out": [ + "aggregate%array_length%1#0", + "i#0", + "reclaims#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "reclaims#0" + ] + }, + "2759": { + "op": "extract 2 0", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%array_trimmed%0#0", + "i#0", + "reclaims#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%array_trimmed%0#0" + ] + }, + "2762": { + "op": "dig 1", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%array_trimmed%0#0", + "i#0" + ] + }, + "2764": { + "op": "pushint 17 // 17", + "defined_out": [ + "17", + "aggregate%array_length%1#0", + "aggregate%array_trimmed%0#0", + "i#0", + "reclaims#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%array_trimmed%0#0", + "i#0", + "17" + ] + }, + "2766": { + "op": "*", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0", + "i#0", + "reclaims#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0" + ] + }, + "2767": { + "op": "pushint 17 // 17", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0", + "17" + ] + }, + "2769": { + "error": "index access is out of bounds", + "op": "extract3 // on error: index access is out of bounds", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "i#0", + "reclaims#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%encoded_element%0#0" + ] + }, + "2770": { + "op": "dup", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "i#0", + "reclaims#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%encoded_element%0#0", + "aggregate%encoded_element%0#0" + ] + }, + "2771": { + "op": "intc_0 // 0", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%encoded_element%0#0", + "aggregate%encoded_element%0#0", + "0" + ] + }, + "2772": { + "op": "extract_uint64", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "i#0", + "reclaims#0", + "values%1#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%encoded_element%0#0", + "values%1#0" + ] + }, + "2773": { + "op": "dup", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%encoded_element%0#0", + "values%1#0", + "values%1#0" + ] + }, + "2774": { + "op": "bury 12", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "i#0", + "reclaims#0", + "values%1#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%encoded_element%0#0", + "values%1#0" + ] + }, + "2776": { + "op": "bnz arc58_reclaim_else_body@10", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%encoded_element%0#0" + ] + }, + "2779": { + "op": "intc_0 // 0", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%encoded_element%0#0", + "0" + ] + }, + "2780": { + "op": "bytec_0 // \"controlled_address\"", + "defined_out": [ + "\"controlled_address\"", + "0", + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "i#0", + "reclaims#0", + "values%1#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%encoded_element%0#0", + "0", + "\"controlled_address\"" + ] + }, + "2781": { + "op": "app_global_get_ex", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "i#0", + "maybe_exists%2#0", + "maybe_value%1#0", + "reclaims#0", + "values%1#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%encoded_element%0#0", + "maybe_value%1#0", + "maybe_exists%2#0" + ] + }, + "2782": { + "op": "swap", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%encoded_element%0#0", + "maybe_exists%2#0", + "maybe_value%1#0" + ] + }, + "2783": { + "op": "bury 15", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "i#0", + "maybe_exists%2#0", + "maybe_value%1#0", + "reclaims#0", + "values%1#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%encoded_element%0#0", + "maybe_exists%2#0" + ] + }, + "2785": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%encoded_element%0#0" + ] + }, + "2786": { + "op": "dup", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%encoded_element%0#0 (copy)", + "i#0", + "maybe_value%1#0", + "reclaims#0", + "values%1#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%encoded_element%0#0", + "aggregate%encoded_element%0#0 (copy)" + ] + }, + "2787": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%encoded_element%0#0 (copy)", + "i#0", + "maybe_value%1#0", + "reclaims#0", + "values%1#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%encoded_element%0#0", + "aggregate%encoded_element%0#0 (copy)", + "8" + ] + }, + "2788": { + "op": "extract_uint64", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "i#0", + "maybe_value%1#0", + "reclaims#0", + "values%1#0", + "values%2#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%encoded_element%0#0", + "values%2#0" + ] + }, + "2789": { + "op": "bury 10", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "i#0", + "maybe_value%1#0", + "reclaims#0", + "values%1#0", + "values%2#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%encoded_element%0#0" + ] + }, + "2791": { + "op": "intc_0 // 0", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "i#0", + "maybe_value%1#0", + "pmt%%CloseRemainderTo_length#0", + "reclaims#0", + "values%1#0", + "values%2#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%encoded_element%0#0", + "pmt%%CloseRemainderTo_length#0" + ] + }, + "2792": { + "op": "bury 12", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "i#0", + "maybe_value%1#0", + "pmt%%CloseRemainderTo_length#0", + "reclaims#0", + "values%1#0", + "values%2#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%encoded_element%0#0" + ] + }, + "2794": { + "op": "pushint 128 // 128", + "defined_out": [ + "128", + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "i#0", + "maybe_value%1#0", + "pmt%%CloseRemainderTo_length#0", + "reclaims#0", + "values%1#0", + "values%2#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%encoded_element%0#0", + "128" + ] + }, + "2797": { + "op": "getbit", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%get_bit%0#0", + "i#0", + "maybe_value%1#0", + "pmt%%CloseRemainderTo_length#0", + "reclaims#0", + "values%1#0", + "values%2#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%get_bit%0#0" + ] + }, + "2798": { + "op": "bz arc58_reclaim_after_if_else@6", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0" + ] + }, + "2801": { + "op": "intc_0 // 0", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "0" + ] + }, + "2802": { + "op": "bytec_0 // \"controlled_address\"", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "0", + "\"controlled_address\"" + ] + }, + "2803": { + "op": "app_global_get_ex", + "defined_out": [ + "aggregate%array_length%1#0", + "i#0", + "maybe_exists%3#0", + "maybe_value%1#0", + "maybe_value%2#0", + "pmt%%CloseRemainderTo_length#0", + "reclaims#0", + "values%1#0", + "values%2#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "maybe_value%2#0", + "maybe_exists%3#0" + ] + }, + "2804": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "maybe_value%2#0" + ] + }, + "2805": { + "op": "intc_1 // 1", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "maybe_value%2#0", + "pmt%%CloseRemainderTo_length#0" + ] + }, + "2806": { + "op": "bury 12", + "defined_out": [ + "aggregate%array_length%1#0", + "i#0", + "maybe_value%1#0", + "pmt%%CloseRemainderTo_length#0", + "pmt%%param_CloseRemainderTo_idx_0#1", + "reclaims#0", + "values%1#0", + "values%2#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "pmt%%param_CloseRemainderTo_idx_0#1" + ] + }, + "2808": { + "op": "bury 3", + "defined_out": [ + "aggregate%array_length%1#0", + "i#0", + "maybe_value%1#0", + "pmt%%CloseRemainderTo_length#0", + "pmt%%param_CloseRemainderTo_idx_0#1", + "reclaims#0", + "values%1#0", + "values%2#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0" + ] + }, + "2810": { + "block": "arc58_reclaim_after_if_else@6", + "stack_in": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0" + ], + "op": "itxn_begin" + }, + "2811": { + "op": "dig 10", + "defined_out": [ + "pmt%%CloseRemainderTo_length#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "pmt%%CloseRemainderTo_length#0" + ] + }, + "2813": { + "op": "bz arc58_reclaim_next_field@8", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0" + ] + }, + "2816": { + "op": "dig 2", + "defined_out": [ + "pmt%%CloseRemainderTo_length#0", + "pmt%%param_CloseRemainderTo_idx_0#1" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "pmt%%param_CloseRemainderTo_idx_0#1" + ] + }, + "2818": { + "op": "itxn_field CloseRemainderTo", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0" + ] + }, + "2820": { + "block": "arc58_reclaim_next_field@8", + "stack_in": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0" + ], + "op": "dig 8", + "defined_out": [ + "values%2#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "values%2#0" + ] + }, + "2822": { + "op": "itxn_field Amount", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0" + ] + }, + "2824": { + "op": "dig 12", + "defined_out": [ + "maybe_value%1#0", + "values%2#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "maybe_value%1#0" + ] + }, + "2826": { + "op": "itxn_field Receiver", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0" + ] + }, + "2828": { + "op": "dig 1", + "defined_out": [ + "maybe_value%1#0", + "sender#0", + "values%2#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "sender#0" + ] + }, + "2830": { + "op": "itxn_field Sender", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0" + ] + }, + "2832": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "maybe_value%1#0", + "sender#0", + "values%2#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "1" + ] + }, + "2833": { + "op": "itxn_field TypeEnum", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0" + ] + }, + "2835": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "maybe_value%1#0", + "sender#0", + "values%2#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "0" + ] + }, + "2836": { + "op": "itxn_field Fee", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0" + ] + }, + "2838": { + "op": "itxn_submit" + }, + "2839": { + "block": "arc58_reclaim_after_if_else@16", + "stack_in": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0" + ], + "op": "dup", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "i#0" + ] + }, + "2840": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "i#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "i#0", + "1" + ] + }, + "2841": { + "op": "+", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "i#0" + ] + }, + "2842": { + "op": "bury 1", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0" + ] + }, + "2844": { + "op": "b arc58_reclaim_while_top@2" + }, + "2847": { + "block": "arc58_reclaim_else_body@10", + "stack_in": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%encoded_element%0#0" + ], + "op": "intc_0 // 0", + "defined_out": [ + "0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%encoded_element%0#0", + "0" + ] + }, + "2848": { + "op": "bytec_0 // \"controlled_address\"", + "defined_out": [ + "\"controlled_address\"", + "0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%encoded_element%0#0", + "0", + "\"controlled_address\"" + ] + }, + "2849": { + "op": "app_global_get_ex", + "defined_out": [ + "maybe_exists%4#0", + "maybe_value%3#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%encoded_element%0#0", + "maybe_value%3#0", + "maybe_exists%4#0" + ] + }, + "2850": { + "op": "swap", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%encoded_element%0#0", + "maybe_exists%4#0", + "maybe_value%3#0" + ] + }, + "2851": { + "op": "bury 14", + "defined_out": [ + "maybe_exists%4#0", + "maybe_value%3#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%encoded_element%0#0", + "maybe_exists%4#0" + ] + }, + "2853": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "defined_out": [ + "aggregate%encoded_element%0#0", + "maybe_value%3#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%encoded_element%0#0" + ] + }, + "2854": { + "op": "dup", + "defined_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_element%0#0 (copy)", + "maybe_value%3#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%encoded_element%0#0", + "aggregate%encoded_element%0#0 (copy)" + ] + }, + "2855": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "aggregate%encoded_element%0#0", + "aggregate%encoded_element%0#0 (copy)", + "maybe_value%3#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%encoded_element%0#0", + "aggregate%encoded_element%0#0 (copy)", + "8" + ] + }, + "2856": { + "op": "extract_uint64", + "defined_out": [ + "aggregate%encoded_element%0#0", + "maybe_value%3#0", + "values%4#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%encoded_element%0#0", + "values%4#0" + ] + }, + "2857": { + "op": "bury 9", + "defined_out": [ + "aggregate%encoded_element%0#0", + "maybe_value%3#0", + "values%4#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%encoded_element%0#0" + ] + }, + "2859": { + "op": "intc_0 // 0", + "defined_out": [ + "aggregate%encoded_element%0#0", + "maybe_value%3#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%encoded_element%0#0", + "xfer%%AssetCloseTo_length#0" + ] + }, + "2860": { + "op": "bury 8", + "defined_out": [ + "aggregate%encoded_element%0#0", + "maybe_value%3#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%encoded_element%0#0" + ] + }, + "2862": { + "op": "pushint 128 // 128", + "defined_out": [ + "128", + "aggregate%encoded_element%0#0", + "maybe_value%3#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%encoded_element%0#0", + "128" + ] + }, + "2865": { + "op": "getbit", + "defined_out": [ + "aggregate%get_bit%1#0", + "maybe_value%3#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "aggregate%get_bit%1#0" + ] + }, + "2866": { + "op": "bz arc58_reclaim_after_if_else@12", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0" + ] + }, + "2869": { + "op": "intc_0 // 0", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "0" + ] + }, + "2870": { + "op": "bytec_0 // \"controlled_address\"", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "0", + "\"controlled_address\"" + ] + }, + "2871": { + "op": "app_global_get_ex", + "defined_out": [ + "maybe_exists%5#0", + "maybe_value%3#0", + "maybe_value%4#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "maybe_value%4#0", + "maybe_exists%5#0" + ] + }, + "2872": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "maybe_value%4#0" + ] + }, + "2873": { + "op": "intc_1 // 1", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "maybe_value%4#0", + "xfer%%AssetCloseTo_length#0" + ] + }, + "2874": { + "op": "bury 8", + "defined_out": [ + "maybe_value%3#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "xfer%%param_AssetCloseTo_idx_0#1" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "xfer%%param_AssetCloseTo_idx_0#1" + ] + }, + "2876": { + "op": "bury 4", + "defined_out": [ + "maybe_value%3#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "xfer%%param_AssetCloseTo_idx_0#1" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0" + ] + }, + "2878": { + "block": "arc58_reclaim_after_if_else@12", + "stack_in": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0" + ], + "op": "itxn_begin" + }, + "2879": { + "op": "dig 6", + "defined_out": [ + "xfer%%AssetCloseTo_length#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "xfer%%AssetCloseTo_length#0" + ] + }, + "2881": { + "op": "bz arc58_reclaim_next_field@14", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0" + ] + }, + "2884": { + "op": "dig 3", + "defined_out": [ + "xfer%%AssetCloseTo_length#0", + "xfer%%param_AssetCloseTo_idx_0#1" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "xfer%%param_AssetCloseTo_idx_0#1" + ] + }, + "2886": { + "op": "itxn_field AssetCloseTo", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0" + ] + }, + "2888": { + "block": "arc58_reclaim_next_field@14", + "stack_in": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0" + ], + "op": "dig 9", + "defined_out": [ + "values%1#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "values%1#0" + ] + }, + "2890": { + "op": "itxn_field XferAsset", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0" + ] + }, + "2892": { + "op": "dig 7", + "defined_out": [ + "values%1#0", + "values%4#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "values%4#0" + ] + }, + "2894": { + "op": "itxn_field AssetAmount", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0" + ] + }, + "2896": { + "op": "dig 11", + "defined_out": [ + "maybe_value%3#0", + "values%1#0", + "values%4#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "maybe_value%3#0" + ] + }, + "2898": { + "op": "itxn_field AssetReceiver", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0" + ] + }, + "2900": { + "op": "dig 1", + "defined_out": [ + "maybe_value%3#0", + "sender#0", + "values%1#0", + "values%4#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "sender#0" + ] + }, + "2902": { + "op": "itxn_field Sender", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0" + ] + }, + "2904": { + "op": "pushint 4 // 4", + "defined_out": [ + "4", + "maybe_value%3#0", + "sender#0", + "values%1#0", + "values%4#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "4" + ] + }, + "2906": { + "op": "itxn_field TypeEnum", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0" + ] + }, + "2908": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "maybe_value%3#0", + "sender#0", + "values%1#0", + "values%4#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "0" + ] + }, + "2909": { + "op": "itxn_field Fee", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0" + ] + }, + "2911": { + "op": "itxn_submit" + }, + "2912": { + "op": "b arc58_reclaim_after_if_else@16" + }, + "2915": { + "block": "arc58_reclaim_after_while@17", + "stack_in": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0" + ], + "op": "intc_1 // 1", + "defined_out": [ + "1" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0", + "1" + ] + }, + "2916": { + "op": "return", + "stack_out": [ + "maybe_value%1#0", + "maybe_value%3#0", + "pmt%%CloseRemainderTo_length#0", + "values%1#0", + "values%2#0", + "values%4#0", + "xfer%%AssetCloseTo_length#0", + "reclaims#0", + "aggregate%array_length%1#0", + "xfer%%param_AssetCloseTo_idx_0#1", + "pmt%%param_CloseRemainderTo_idx_0#1", + "sender#0", + "i#0" + ] + }, + "2917": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_optinEscrow[routing]", + "params": {}, + "block": "arc58_optinEscrow", + "stack_in": [], + "op": "txna ApplicationArgs 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] + }, + "2920": { + "op": "dup", + "defined_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ] + }, + "2921": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "tmp%0#0", + "tmp%0#0 (copy)", + "0" + ] + }, + "2922": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "aggregate%array_length%0#0" + ] + }, + "2923": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "aggregate%array_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "aggregate%array_length%0#0", + "2" + ] + }, + "2924": { + "op": "+", + "defined_out": [ + "add%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "add%0#0" + ] + }, + "2925": { + "op": "dig 1", + "stack_out": [ + "tmp%0#0", + "add%0#0", + "tmp%0#0 (copy)" + ] + }, + "2927": { + "op": "len", + "defined_out": [ + "add%0#0", + "len%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "add%0#0", + "len%0#0" + ] + }, + "2928": { + "op": "==", + "defined_out": [ + "eq%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "eq%0#0" + ] + }, + "2929": { + "error": "invalid number of bytes for (len+utf8[])", + "op": "assert // invalid number of bytes for (len+utf8[])", + "stack_out": [ + "tmp%0#0" + ] + }, + "2930": { + "op": "extract 2 0", + "defined_out": [ + "escrow#0" + ], + "stack_out": [ + "escrow#0" + ] + }, + "2933": { + "op": "dup", + "defined_out": [ + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "escrow#0" + ] + }, + "2934": { + "op": "txna ApplicationArgs 2" + }, + "2937": { + "op": "dup", + "defined_out": [ + "assets#0", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "escrow#0", + "assets#0", + "assets#0" + ] + }, + "2938": { + "op": "cover 2", + "defined_out": [ + "assets#0", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "escrow#0", + "assets#0" + ] + }, + "2940": { + "op": "dup", + "defined_out": [ + "assets#0", + "assets#0 (copy)", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "escrow#0", + "assets#0", + "assets#0 (copy)" + ] + }, + "2941": { + "op": "intc_0 // 0", + "stack_out": [ + "escrow#0", + "assets#0", + "escrow#0", + "assets#0", + "assets#0 (copy)", + "0" + ] + }, + "2942": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0" + ] + }, + "2943": { + "op": "dup", + "stack_out": [ + "escrow#0", + "assets#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "aggregate%array_length%1#0" + ] + }, + "2944": { + "op": "cover 3", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0" + ] + }, + "2946": { + "op": "dup", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%array_length%1#0 (copy)", + "assets#0", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "aggregate%array_length%1#0 (copy)" + ] + }, + "2947": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "aggregate%array_length%1#0", + "aggregate%array_length%1#0 (copy)", + "assets#0", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "aggregate%array_length%1#0 (copy)", + "8" + ] + }, + "2948": { + "op": "*", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "mul%1#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "mul%1#0" + ] + }, + "2949": { + "op": "intc_2 // 2", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "mul%1#0", + "2" + ] + }, + "2950": { + "op": "+", + "defined_out": [ + "add%1#0", + "aggregate%array_length%1#0", + "assets#0", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "add%1#0" + ] + }, + "2951": { + "op": "uncover 2", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrow#0", + "aggregate%array_length%1#0", + "add%1#0", + "assets#0" + ] + }, + "2953": { + "op": "len", + "defined_out": [ + "add%1#0", + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "len%1#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrow#0", + "aggregate%array_length%1#0", + "add%1#0", + "len%1#0" + ] + }, + "2954": { + "op": "==", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "eq%1#0", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrow#0", + "aggregate%array_length%1#0", + "eq%1#0" + ] + }, + "2955": { + "error": "invalid number of bytes for (len+uint64[])", + "op": "assert // invalid number of bytes for (len+uint64[])", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrow#0", + "aggregate%array_length%1#0" + ] + }, + "2956": { + "op": "txn Sender", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "tmp%0#1" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrow#0", + "aggregate%array_length%1#0", + "tmp%0#1" + ] + }, + "2958": { + "op": "intc_0 // 0", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrow#0", + "aggregate%array_length%1#0", + "tmp%0#1", + "0" + ] + }, + "2959": { + "op": "bytec_2 // \"admin\"", + "defined_out": [ + "\"admin\"", + "0", + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "tmp%0#1" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrow#0", + "aggregate%array_length%1#0", + "tmp%0#1", + "0", + "\"admin\"" + ] + }, + "2960": { + "op": "app_global_get_ex", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "maybe_exists%0#0", + "maybe_value%0#0", + "tmp%0#1" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrow#0", + "aggregate%array_length%1#0", + "tmp%0#1", + "maybe_value%0#0", + "maybe_exists%0#0" + ] + }, + "2961": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrow#0", + "aggregate%array_length%1#0", + "tmp%0#1", + "maybe_value%0#0" + ] + }, + "2962": { + "op": "==", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "tmp%1#1" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrow#0", + "aggregate%array_length%1#0", + "tmp%1#1" + ] + }, + "2963": { + "error": "forbidden", + "op": "assert // forbidden", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrow#0", + "aggregate%array_length%1#0" + ] + }, + "2964": { + "op": "bytec 5 // \"e\"", + "defined_out": [ + "\"e\"", + "aggregate%array_length%1#0", + "assets#0", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrow#0", + "aggregate%array_length%1#0", + "\"e\"" + ] + }, + "2966": { + "op": "uncover 2", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "aggregate%array_length%1#0", + "\"e\"", + "escrow#0" + ] + }, + "2968": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "box_prefixed_key%0#0", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "aggregate%array_length%1#0", + "box_prefixed_key%0#0" + ] + }, + "2969": { + "op": "dup", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "aggregate%array_length%1#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)" + ] + }, + "2970": { + "op": "box_len", + "defined_out": [ + "_%0#0", + "aggregate%array_length%1#0", + "assets#0", + "box_prefixed_key%0#0", + "escrow#0", + "maybe_exists%1#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "aggregate%array_length%1#0", + "box_prefixed_key%0#0", + "_%0#0", + "maybe_exists%1#0" + ] + }, + "2971": { + "op": "bury 1", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "aggregate%array_length%1#0", + "box_prefixed_key%0#0", + "maybe_exists%1#0" + ] + }, + "2973": { + "error": "escrow does not exist", + "op": "assert // escrow does not exist", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "aggregate%array_length%1#0", + "box_prefixed_key%0#0" + ] + }, + "2974": { + "op": "box_get", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%box_get%0#0", + "aggregate%box_get%1#0", + "assets#0", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "aggregate%array_length%1#0", + "aggregate%box_get%0#0", + "aggregate%box_get%1#0" + ] + }, + "2975": { + "op": "pop", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "aggregate%array_length%1#0", + "aggregate%box_get%0#0" + ] + }, + "2976": { + "op": "dup", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%box_get%0#0", + "aggregate%box_get%0#0 (copy)", + "assets#0", + "escrow#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "aggregate%array_length%1#0", + "aggregate%box_get%0#0", + "aggregate%box_get%0#0 (copy)" + ] + }, + "2977": { + "op": "intc_0 // 0", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "aggregate%array_length%1#0", + "aggregate%box_get%0#0", + "aggregate%box_get%0#0 (copy)", + "0" + ] + }, + "2978": { + "op": "extract_uint64", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%box_get%0#0", + "assets#0", + "escrow#0", + "escrowID#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "aggregate%array_length%1#0", + "aggregate%box_get%0#0", + "escrowID#0" + ] + }, + "2979": { + "op": "app_params_get AppAddress", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%box_get%0#0", + "assets#0", + "check%0#0", + "escrow#0", + "escrowAddress#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "aggregate%array_length%1#0", + "aggregate%box_get%0#0", + "escrowAddress#0", + "check%0#0" + ] + }, + "2981": { + "op": "swap", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "aggregate%array_length%1#0", + "aggregate%box_get%0#0", + "check%0#0", + "escrowAddress#0" + ] + }, + "2982": { + "op": "dup", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "aggregate%array_length%1#0", + "aggregate%box_get%0#0", + "check%0#0", + "escrowAddress#0", + "escrowAddress#0 (copy)" + ] + }, + "2983": { + "op": "cover 3", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "aggregate%box_get%0#0", + "check%0#0", + "escrowAddress#0" + ] + }, + "2985": { + "op": "cover 4", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%box_get%0#0", + "assets#0", + "check%0#0", + "escrow#0", + "escrowAddress#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "aggregate%box_get%0#0", + "check%0#0" + ] + }, + "2987": { + "error": "application exists", + "op": "assert // application exists", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "aggregate%box_get%0#0" + ] + }, + "2988": { + "op": "pushint 64 // 64", + "defined_out": [ + "64", + "aggregate%array_length%1#0", + "aggregate%box_get%0#0", + "assets#0", + "escrow#0", + "escrowAddress#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "aggregate%box_get%0#0", + "64" + ] + }, + "2990": { + "op": "getbit", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%get_bit%0#0", + "assets#0", + "escrow#0", + "escrowAddress#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "aggregate%get_bit%0#0" + ] + }, + "2991": { + "op": "!", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "escrowAddress#0", + "tmp%2#1" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "tmp%2#1" + ] + }, + "2992": { + "error": "Escrow is locked", + "op": "assert // Escrow is locked", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "aggregate%array_length%1#0", + "escrowAddress#0" + ] + }, + "2993": { + "op": "itxn_begin" + }, + "2994": { + "op": "intc_0 // 0", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "0" + ] + }, + "2995": { + "op": "bytec_0 // \"controlled_address\"", + "defined_out": [ + "\"controlled_address\"", + "0", + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "escrowAddress#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "0", + "\"controlled_address\"" + ] + }, + "2996": { + "op": "app_global_get_ex", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "escrowAddress#0", + "maybe_exists%2#0", + "maybe_value%1#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "maybe_value%1#0", + "maybe_exists%2#0" + ] + }, + "2997": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "maybe_value%1#0" + ] + }, + "2998": { + "op": "global AssetOptInMinBalance", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "escrowAddress#0", + "maybe_value%1#0", + "tmp%3#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "maybe_value%1#0", + "tmp%3#0" + ] + }, + "3000": { + "op": "uncover 3", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "escrowAddress#0", + "maybe_value%1#0", + "tmp%3#0", + "aggregate%array_length%1#0" + ] + }, + "3002": { + "op": "*", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "escrowAddress#0", + "inner_txn_params%0%%param_Amount_idx_0#0", + "maybe_value%1#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "escrowAddress#0", + "maybe_value%1#0", + "inner_txn_params%0%%param_Amount_idx_0#0" + ] + }, + "3003": { + "op": "itxn_field Amount", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "escrowAddress#0", + "maybe_value%1#0" + ] + }, + "3005": { + "op": "itxn_field Sender" + }, + "3007": { + "op": "itxn_field Receiver", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0" + ] + }, + "3009": { + "op": "intc_1 // 1", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "1" + ] + }, + "3010": { + "op": "itxn_field TypeEnum", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0" + ] + }, + "3012": { + "op": "intc_0 // 0", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "0" + ] + }, + "3013": { + "op": "itxn_field Fee", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0" + ] + }, + "3015": { + "op": "itxn_submit" + }, + "3016": { + "op": "intc_0 // 0", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "escrowAddress#0", + "i#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0" + ] + }, + "3017": { + "block": "arc58_optinEscrow_while_top@3", + "stack_in": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0" + ], + "op": "dup", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0" + ] + }, + "3018": { + "op": "dig 3", + "defined_out": [ + "aggregate%array_length%1#0", + "i#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0", + "aggregate%array_length%1#0" + ] + }, + "3020": { + "op": "<", + "defined_out": [ + "aggregate%array_length%1#0", + "i#0", + "tmp%6#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "tmp%6#0" + ] + }, + "3021": { + "op": "bz arc58_optinEscrow_after_while@6", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0" + ] + }, + "3024": { + "op": "dig 3", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "i#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "assets#0" + ] + }, + "3026": { + "op": "extract 2 0", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%array_trimmed%0#0", + "assets#0", + "i#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "aggregate%array_trimmed%0#0" + ] + }, + "3029": { + "op": "dig 1", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "aggregate%array_trimmed%0#0", + "i#0" + ] + }, + "3031": { + "op": "dup", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%array_trimmed%0#0", + "assets#0", + "i#0", + "i#0 (copy)" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "aggregate%array_trimmed%0#0", + "i#0 (copy)", + "i#0 (copy)" + ] + }, + "3032": { + "op": "cover 2", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0", + "aggregate%array_trimmed%0#0", + "i#0 (copy)" + ] + }, + "3034": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "aggregate%array_length%1#0", + "aggregate%array_trimmed%0#0", + "assets#0", + "i#0", + "i#0 (copy)" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0", + "aggregate%array_trimmed%0#0", + "i#0 (copy)", + "8" + ] + }, + "3035": { + "op": "*", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0", + "assets#0", + "i#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0", + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0" + ] + }, + "3036": { + "op": "extract_uint64", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "i#0", + "values%2#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0", + "values%2#0" + ] + }, + "3037": { + "op": "dig 6", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "i#0", + "values%2#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0", + "values%2#0", + "escrow#0" + ] + }, + "3039": { + "op": "dup", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "escrow#0 (copy)", + "i#0", + "values%2#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0", + "values%2#0", + "escrow#0", + "escrow#0 (copy)" + ] + }, + "3040": { + "op": "len", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%length%0#0", + "assets#0", + "escrow#0", + "i#0", + "values%2#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0", + "values%2#0", + "escrow#0", + "aggregate%length%0#0" + ] + }, + "3041": { + "op": "itob", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%as_bytes%0#0", + "assets#0", + "escrow#0", + "i#0", + "values%2#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0", + "values%2#0", + "escrow#0", + "aggregate%as_bytes%0#0" + ] + }, + "3042": { + "op": "extract 6 2", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%length_uint16%0#0", + "assets#0", + "escrow#0", + "i#0", + "values%2#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0", + "values%2#0", + "escrow#0", + "aggregate%length_uint16%0#0" + ] + }, + "3045": { + "op": "swap", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0", + "values%2#0", + "aggregate%length_uint16%0#0", + "escrow#0" + ] + }, + "3046": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "assets#0", + "escrow#0", + "i#0", + "values%2#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0", + "values%2#0", + "aggregate%encoded_value%0#0" + ] + }, + "3047": { + "op": "dig 1", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "assets#0", + "escrow#0", + "i#0", + "values%2#0", + "values%2#0 (copy)" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0", + "values%2#0", + "aggregate%encoded_value%0#0", + "values%2#0 (copy)" + ] + }, + "3049": { + "op": "itob", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "aggregate%val_as_bytes%0#0", + "assets#0", + "escrow#0", + "i#0", + "values%2#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0", + "values%2#0", + "aggregate%encoded_value%0#0", + "aggregate%val_as_bytes%0#0" + ] + }, + "3050": { + "op": "bytec 13 // 0x000a", + "defined_out": [ + "0x000a", + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "aggregate%val_as_bytes%0#0", + "assets#0", + "escrow#0", + "i#0", + "values%2#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0", + "values%2#0", + "aggregate%encoded_value%0#0", + "aggregate%val_as_bytes%0#0", + "0x000a" + ] + }, + "3052": { + "op": "swap", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0", + "values%2#0", + "aggregate%encoded_value%0#0", + "0x000a", + "aggregate%val_as_bytes%0#0" + ] + }, + "3053": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "aggregate%head%1#0", + "assets#0", + "escrow#0", + "i#0", + "values%2#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0", + "values%2#0", + "aggregate%encoded_value%0#0", + "aggregate%head%1#0" + ] + }, + "3054": { + "op": "swap", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0", + "values%2#0", + "aggregate%head%1#0", + "aggregate%encoded_value%0#0" + ] + }, + "3055": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%concat%0#0", + "assets#0", + "escrow#0", + "i#0", + "values%2#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0", + "values%2#0", + "aggregate%concat%0#0" + ] + }, + "3056": { + "op": "bytec 14 // \"a\"", + "defined_out": [ + "\"a\"", + "aggregate%array_length%1#0", + "aggregate%concat%0#0", + "assets#0", + "escrow#0", + "i#0", + "values%2#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0", + "values%2#0", + "aggregate%concat%0#0", + "\"a\"" + ] + }, + "3058": { + "op": "swap", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0", + "values%2#0", + "\"a\"", + "aggregate%concat%0#0" + ] + }, + "3059": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "box_prefixed_key%3#0", + "escrow#0", + "i#0", + "values%2#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0", + "values%2#0", + "box_prefixed_key%3#0" + ] + }, + "3060": { + "op": "box_len", + "defined_out": [ + "_%1#0", + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "i#0", + "maybe_exists%3#0", + "values%2#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0", + "values%2#0", + "_%1#0", + "maybe_exists%3#0" + ] + }, + "3061": { + "op": "bury 1", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0", + "values%2#0", + "maybe_exists%3#0" + ] + }, + "3063": { + "error": "allowance does not exist", + "op": "assert // allowance does not exist", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0", + "values%2#0" + ] + }, + "3064": { + "op": "itxn_begin" + }, + "3065": { + "op": "itxn_field XferAsset", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0" + ] + }, + "3067": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "i#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0", + "0" + ] + }, + "3068": { + "op": "itxn_field AssetAmount", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0" + ] + }, + "3070": { + "op": "dig 2", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "escrowAddress#0", + "i#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0", + "escrowAddress#0" + ] + }, + "3072": { + "op": "dup", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "escrowAddress#0", + "escrowAddress#0 (copy)", + "i#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0", + "escrowAddress#0", + "escrowAddress#0 (copy)" + ] + }, + "3073": { + "op": "itxn_field AssetReceiver", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0", + "escrowAddress#0" + ] + }, + "3075": { + "op": "itxn_field Sender", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0" + ] + }, + "3077": { + "op": "pushint 4 // 4", + "defined_out": [ + "4", + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "escrowAddress#0", + "i#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0", + "4" + ] + }, + "3079": { + "op": "itxn_field TypeEnum", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0" + ] + }, + "3081": { + "op": "intc_0 // 0", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0", + "0" + ] + }, + "3082": { + "op": "itxn_field Fee", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0" + ] + }, + "3084": { + "op": "itxn_submit" + }, + "3085": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "escrowAddress#0", + "i#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0", + "1" + ] + }, + "3086": { + "op": "+", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "i#0" + ] + }, + "3087": { + "op": "bury 1", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "escrowAddress#0", + "i#0" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0" + ] + }, + "3089": { + "op": "b arc58_optinEscrow_while_top@3" + }, + "3092": { + "block": "arc58_optinEscrow_after_while@6", + "stack_in": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0" + ], + "op": "intc_1 // 1", + "defined_out": [ + "1" + ], + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0", + "1" + ] + }, + "3093": { + "op": "return", + "stack_out": [ + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrowAddress#0", + "i#0" + ] + }, + "3094": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_pluginOptinEscrow[routing]", + "params": {}, + "block": "arc58_pluginOptinEscrow", + "stack_in": [], + "op": "intc_0 // 0", + "stack_out": [ + "escrowAddress#0" + ] + }, + "3095": { + "op": "bytec_1 // \"\"", + "stack_out": [ + "escrowAddress#0", + "i#0" + ] + }, + "3096": { + "op": "txna ApplicationArgs 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "tmp%0#0" + ] + }, + "3099": { + "op": "dup", + "defined_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "tmp%0#0", + "tmp%0#0 (copy)" + ] + }, + "3100": { + "op": "len", + "defined_out": [ + "len%0#0", + "tmp%0#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "tmp%0#0", + "len%0#0" + ] + }, + "3101": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "len%0#0", + "tmp%0#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "tmp%0#0", + "len%0#0", + "8" + ] + }, + "3102": { + "op": "==", + "defined_out": [ + "eq%0#0", + "tmp%0#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "tmp%0#0", + "eq%0#0" + ] + }, + "3103": { + "error": "invalid number of bytes for uint64", + "op": "assert // invalid number of bytes for uint64", + "stack_out": [ + "escrowAddress#0", + "i#0", + "tmp%0#0" + ] + }, + "3104": { + "op": "btoi", + "defined_out": [ + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "plugin#0" + ] + }, + "3105": { + "op": "txna ApplicationArgs 2" + }, + "3108": { + "op": "dup", + "defined_out": [ + "caller#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "plugin#0", + "caller#0", + "caller#0" + ] + }, + "3109": { + "op": "cover 2", + "defined_out": [ + "caller#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "plugin#0", + "caller#0" + ] + }, + "3111": { + "op": "dup", + "defined_out": [ + "caller#0", + "caller#0 (copy)", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "plugin#0", + "caller#0", + "caller#0 (copy)" + ] + }, + "3112": { + "op": "len", + "defined_out": [ + "caller#0", + "len%1#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "plugin#0", + "caller#0", + "len%1#0" + ] + }, + "3113": { + "op": "pushint 32 // 32", + "defined_out": [ + "32", + "caller#0", + "len%1#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "plugin#0", + "caller#0", + "len%1#0", + "32" + ] + }, + "3115": { + "op": "==", + "defined_out": [ + "caller#0", + "eq%1#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "plugin#0", + "caller#0", + "eq%1#0" + ] + }, + "3116": { + "error": "invalid number of bytes for uint8[32]", + "op": "assert // invalid number of bytes for uint8[32]", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "plugin#0", + "caller#0" + ] + }, + "3117": { + "op": "txna ApplicationArgs 3", + "defined_out": [ + "caller#0", + "plugin#0", + "tmp%3#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "plugin#0", + "caller#0", + "tmp%3#0" + ] + }, + "3120": { + "op": "dup", + "defined_out": [ + "caller#0", + "plugin#0", + "tmp%3#0", + "tmp%3#0 (copy)" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "plugin#0", + "caller#0", + "tmp%3#0", + "tmp%3#0 (copy)" + ] + }, + "3121": { + "op": "intc_0 // 0", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "plugin#0", + "caller#0", + "tmp%3#0", + "tmp%3#0 (copy)", + "0" + ] + }, + "3122": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%0#0", + "caller#0", + "plugin#0", + "tmp%3#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "plugin#0", + "caller#0", + "tmp%3#0", + "aggregate%array_length%0#0" + ] + }, + "3123": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "aggregate%array_length%0#0", + "caller#0", + "plugin#0", + "tmp%3#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "plugin#0", + "caller#0", + "tmp%3#0", + "aggregate%array_length%0#0", + "2" + ] + }, + "3124": { + "op": "+", + "defined_out": [ + "add%0#0", + "caller#0", + "plugin#0", + "tmp%3#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "plugin#0", + "caller#0", + "tmp%3#0", + "add%0#0" + ] + }, + "3125": { + "op": "dig 1", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "plugin#0", + "caller#0", + "tmp%3#0", + "add%0#0", + "tmp%3#0 (copy)" + ] + }, + "3127": { + "op": "len", + "defined_out": [ + "add%0#0", + "caller#0", + "len%2#0", + "plugin#0", + "tmp%3#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "plugin#0", + "caller#0", + "tmp%3#0", + "add%0#0", + "len%2#0" + ] + }, + "3128": { + "op": "==", + "defined_out": [ + "caller#0", + "eq%2#0", + "plugin#0", + "tmp%3#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "plugin#0", + "caller#0", + "tmp%3#0", + "eq%2#0" + ] + }, + "3129": { + "error": "invalid number of bytes for (len+utf8[])", + "op": "assert // invalid number of bytes for (len+utf8[])", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "plugin#0", + "caller#0", + "tmp%3#0" + ] + }, + "3130": { + "op": "extract 2 0", + "defined_out": [ + "caller#0", + "escrow#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "plugin#0", + "caller#0", + "escrow#0" + ] + }, + "3133": { + "op": "txna ApplicationArgs 4" + }, + "3136": { + "op": "dup", + "defined_out": [ + "assets#0", + "caller#0", + "escrow#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "plugin#0", + "caller#0", + "escrow#0", + "assets#0", + "assets#0" + ] + }, + "3137": { + "op": "cover 4", + "defined_out": [ + "assets#0", + "caller#0", + "escrow#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "plugin#0", + "caller#0", + "escrow#0", + "assets#0" + ] + }, + "3139": { + "op": "dup", + "defined_out": [ + "assets#0", + "assets#0 (copy)", + "caller#0", + "escrow#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "plugin#0", + "caller#0", + "escrow#0", + "assets#0", + "assets#0 (copy)" + ] + }, + "3140": { + "op": "intc_0 // 0", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "plugin#0", + "caller#0", + "escrow#0", + "assets#0", + "assets#0 (copy)", + "0" + ] + }, + "3141": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "caller#0", + "escrow#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "plugin#0", + "caller#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0" + ] + }, + "3142": { + "op": "dup", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "plugin#0", + "caller#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "aggregate%array_length%1#0" + ] + }, + "3143": { + "op": "cover 5", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "caller#0", + "escrow#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "plugin#0", + "caller#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0" + ] + }, + "3145": { + "op": "intc_3 // 8", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "plugin#0", + "caller#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "8" + ] + }, + "3146": { + "op": "*", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "caller#0", + "escrow#0", + "mul%1#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "plugin#0", + "caller#0", + "escrow#0", + "assets#0", + "mul%1#0" + ] + }, + "3147": { + "op": "intc_2 // 2", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "plugin#0", + "caller#0", + "escrow#0", + "assets#0", + "mul%1#0", + "2" + ] + }, + "3148": { + "op": "+", + "defined_out": [ + "add%1#0", + "aggregate%array_length%1#0", + "assets#0", + "caller#0", + "escrow#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "plugin#0", + "caller#0", + "escrow#0", + "assets#0", + "add%1#0" + ] + }, + "3149": { + "op": "swap", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "plugin#0", + "caller#0", + "escrow#0", + "add%1#0", + "assets#0" + ] + }, + "3150": { + "op": "len", + "defined_out": [ + "add%1#0", + "aggregate%array_length%1#0", + "assets#0", + "caller#0", + "escrow#0", + "len%3#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "plugin#0", + "caller#0", + "escrow#0", + "add%1#0", + "len%3#0" + ] + }, + "3151": { + "op": "==", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "caller#0", + "eq%3#0", + "escrow#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "plugin#0", + "caller#0", + "escrow#0", + "eq%3#0" + ] + }, + "3152": { + "error": "invalid number of bytes for (len+uint64[])", + "op": "assert // invalid number of bytes for (len+uint64[])", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "plugin#0", + "caller#0", + "escrow#0" + ] + }, + "3153": { + "op": "txn GroupIndex", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "caller#0", + "escrow#0", + "plugin#0", + "tmp%6#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "plugin#0", + "caller#0", + "escrow#0", + "tmp%6#0" + ] + }, + "3155": { + "op": "intc_1 // 1", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "plugin#0", + "caller#0", + "escrow#0", + "tmp%6#0", + "1" + ] + }, + "3156": { + "op": "-", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "caller#0", + "escrow#0", + "mbrPayment#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "plugin#0", + "caller#0", + "escrow#0", + "mbrPayment#0" + ] + }, + "3157": { + "op": "dup", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "plugin#0", + "caller#0", + "escrow#0", + "mbrPayment#0", + "mbrPayment#0" + ] + }, + "3158": { + "op": "cover 4", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "caller#0", + "escrow#0", + "mbrPayment#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "plugin#0", + "caller#0", + "escrow#0", + "mbrPayment#0" + ] + }, + "3160": { + "op": "gtxns TypeEnum", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "caller#0", + "escrow#0", + "gtxn_type%0#0", + "mbrPayment#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "plugin#0", + "caller#0", + "escrow#0", + "gtxn_type%0#0" + ] + }, + "3162": { + "op": "intc_1 // pay", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "caller#0", + "escrow#0", + "gtxn_type%0#0", + "mbrPayment#0", + "pay", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "plugin#0", + "caller#0", + "escrow#0", + "gtxn_type%0#0", + "pay" + ] + }, + "3163": { + "op": "==", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "caller#0", + "escrow#0", + "gtxn_type_matches%0#0", + "mbrPayment#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "plugin#0", + "caller#0", + "escrow#0", + "gtxn_type_matches%0#0" + ] + }, + "3164": { + "error": "transaction type is pay", + "op": "assert // transaction type is pay", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "plugin#0", + "caller#0", + "escrow#0" + ] + }, + "3165": { + "op": "dig 2", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "caller#0", + "escrow#0", + "mbrPayment#0", + "plugin#0", + "plugin#0 (copy)" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "plugin#0", + "caller#0", + "escrow#0", + "plugin#0 (copy)" + ] + }, + "3167": { + "op": "itob", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%val_as_bytes%0#0", + "assets#0", + "caller#0", + "escrow#0", + "mbrPayment#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "plugin#0", + "caller#0", + "escrow#0", + "aggregate%val_as_bytes%0#0" + ] + }, + "3168": { + "op": "uncover 2", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "plugin#0", + "escrow#0", + "aggregate%val_as_bytes%0#0", + "caller#0" + ] + }, + "3170": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%head%1#0", + "assets#0", + "caller#0", + "escrow#0", + "mbrPayment#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "plugin#0", + "escrow#0", + "aggregate%head%1#0" + ] + }, + "3171": { + "op": "dig 1", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%head%1#0", + "assets#0", + "caller#0", + "escrow#0", + "escrow#0 (copy)", + "mbrPayment#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "plugin#0", + "escrow#0", + "aggregate%head%1#0", + "escrow#0 (copy)" + ] + }, + "3173": { + "op": "len", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%head%1#0", + "aggregate%length%0#0", + "assets#0", + "caller#0", + "escrow#0", + "mbrPayment#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "plugin#0", + "escrow#0", + "aggregate%head%1#0", + "aggregate%length%0#0" + ] + }, + "3174": { + "op": "itob", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%as_bytes%0#0", + "aggregate%head%1#0", + "assets#0", + "caller#0", + "escrow#0", + "mbrPayment#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "plugin#0", + "escrow#0", + "aggregate%head%1#0", + "aggregate%as_bytes%0#0" + ] + }, + "3175": { + "op": "extract 6 2", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%head%1#0", + "aggregate%length_uint16%0#0", + "assets#0", + "caller#0", + "escrow#0", + "mbrPayment#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "plugin#0", + "escrow#0", + "aggregate%head%1#0", + "aggregate%length_uint16%0#0" + ] + }, + "3178": { + "op": "dig 2", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "plugin#0", + "escrow#0", + "aggregate%head%1#0", + "aggregate%length_uint16%0#0", + "escrow#0 (copy)" + ] + }, + "3180": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "aggregate%head%1#0", + "assets#0", + "caller#0", + "escrow#0", + "mbrPayment#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "plugin#0", + "escrow#0", + "aggregate%head%1#0", + "aggregate%encoded_value%0#0" + ] + }, + "3181": { + "op": "dup", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "plugin#0", + "escrow#0", + "aggregate%head%1#0", + "aggregate%encoded_value%0#0", + "aggregate%encoded_value%0#0" + ] + }, + "3182": { + "op": "cover 4", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "aggregate%head%1#0", + "assets#0", + "caller#0", + "escrow#0", + "mbrPayment#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "plugin#0", + "escrow#0", + "aggregate%head%1#0", + "aggregate%encoded_value%0#0" + ] + }, + "3184": { + "op": "swap", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "plugin#0", + "escrow#0", + "aggregate%encoded_value%0#0", + "aggregate%head%1#0" + ] + }, + "3185": { + "op": "bytec 12 // 0x002a", + "defined_out": [ + "0x002a", + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "aggregate%head%1#0", + "assets#0", + "caller#0", + "escrow#0", + "mbrPayment#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "plugin#0", + "escrow#0", + "aggregate%encoded_value%0#0", + "aggregate%head%1#0", + "0x002a" + ] + }, + "3187": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "aggregate%head%2#0", + "assets#0", + "caller#0", + "escrow#0", + "mbrPayment#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "plugin#0", + "escrow#0", + "aggregate%encoded_value%0#0", + "aggregate%head%2#0" + ] + }, + "3188": { + "op": "swap", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "plugin#0", + "escrow#0", + "aggregate%head%2#0", + "aggregate%encoded_value%0#0" + ] + }, + "3189": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "assets#0", + "caller#0", + "escrow#0", + "key#0", + "mbrPayment#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "plugin#0", + "escrow#0", + "key#0" + ] + }, + "3190": { + "op": "bytec 4 // \"p\"", + "defined_out": [ + "\"p\"", + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "assets#0", + "caller#0", + "escrow#0", + "key#0", + "mbrPayment#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "plugin#0", + "escrow#0", + "key#0", + "\"p\"" + ] + }, + "3192": { + "op": "swap", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "plugin#0", + "escrow#0", + "\"p\"", + "key#0" + ] + }, + "3193": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "assets#0", + "box_prefixed_key%0#0", + "caller#0", + "escrow#0", + "mbrPayment#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "plugin#0", + "escrow#0", + "box_prefixed_key%0#0" + ] + }, + "3194": { + "op": "box_len", + "defined_out": [ + "_%0#0", + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "assets#0", + "caller#0", + "escrow#0", + "maybe_exists%0#0", + "mbrPayment#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "plugin#0", + "escrow#0", + "_%0#0", + "maybe_exists%0#0" + ] + }, + "3195": { + "op": "bury 1", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "plugin#0", + "escrow#0", + "maybe_exists%0#0" + ] + }, + "3197": { + "error": "plugin does not exist", + "op": "assert // plugin does not exist", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "plugin#0", + "escrow#0" + ] + }, + "3198": { + "op": "bytec 5 // \"e\"", + "defined_out": [ + "\"e\"", + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "assets#0", + "caller#0", + "escrow#0", + "mbrPayment#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "plugin#0", + "escrow#0", + "\"e\"" + ] + }, + "3200": { + "op": "swap", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "plugin#0", + "\"e\"", + "escrow#0" + ] + }, + "3201": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "assets#0", + "box_prefixed_key%1#0", + "caller#0", + "mbrPayment#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "plugin#0", + "box_prefixed_key%1#0" + ] + }, + "3202": { + "op": "dup", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "assets#0", + "box_prefixed_key%1#0", + "box_prefixed_key%1#0 (copy)", + "caller#0", + "mbrPayment#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "plugin#0", + "box_prefixed_key%1#0", + "box_prefixed_key%1#0 (copy)" + ] + }, + "3203": { + "op": "box_len", + "defined_out": [ + "_%1#0", + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "assets#0", + "box_prefixed_key%1#0", + "caller#0", + "maybe_exists%1#0", + "mbrPayment#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "plugin#0", + "box_prefixed_key%1#0", + "_%1#0", + "maybe_exists%1#0" + ] + }, + "3204": { + "op": "bury 1", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "plugin#0", + "box_prefixed_key%1#0", + "maybe_exists%1#0" + ] + }, + "3206": { + "error": "escrow does not exist", + "op": "assert // escrow does not exist", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "plugin#0", + "box_prefixed_key%1#0" + ] + }, + "3207": { + "op": "box_get", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%box_get%0#0", + "aggregate%box_get%1#0", + "aggregate%encoded_value%0#0", + "assets#0", + "caller#0", + "mbrPayment#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "plugin#0", + "aggregate%box_get%0#0", + "aggregate%box_get%1#0" + ] + }, + "3208": { + "op": "pop", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "plugin#0", + "aggregate%box_get%0#0" + ] + }, + "3209": { + "op": "dup", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%box_get%0#0", + "aggregate%box_get%0#0 (copy)", + "aggregate%encoded_value%0#0", + "assets#0", + "caller#0", + "mbrPayment#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "plugin#0", + "aggregate%box_get%0#0", + "aggregate%box_get%0#0 (copy)" + ] + }, + "3210": { + "op": "pushint 64 // 64", + "defined_out": [ + "64", + "aggregate%array_length%1#0", + "aggregate%box_get%0#0", + "aggregate%box_get%0#0 (copy)", + "aggregate%encoded_value%0#0", + "assets#0", + "caller#0", + "mbrPayment#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "plugin#0", + "aggregate%box_get%0#0", + "aggregate%box_get%0#0 (copy)", + "64" + ] + }, + "3212": { + "op": "getbit", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%box_get%0#0", + "aggregate%encoded_value%0#0", + "aggregate%get_bit%0#0", + "assets#0", + "caller#0", + "mbrPayment#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "plugin#0", + "aggregate%box_get%0#0", + "aggregate%get_bit%0#0" + ] + }, + "3213": { + "op": "!", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%box_get%0#0", + "aggregate%encoded_value%0#0", + "assets#0", + "caller#0", + "mbrPayment#0", + "plugin#0", + "tmp%2#1" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "plugin#0", + "aggregate%box_get%0#0", + "tmp%2#1" + ] + }, + "3214": { + "error": "Escrow is locked", + "op": "assert // Escrow is locked", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "plugin#0", + "aggregate%box_get%0#0" + ] + }, + "3215": { + "op": "intc_0 // 0", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "plugin#0", + "aggregate%box_get%0#0", + "0" + ] + }, + "3216": { + "op": "extract_uint64", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "assets#0", + "caller#0", + "escrowID#0", + "mbrPayment#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "plugin#0", + "escrowID#0" + ] + }, + "3217": { + "op": "swap", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "assets#0", + "caller#0", + "escrowID#0", + "mbrPayment#0", + "plugin#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "plugin#0" + ] + }, + "3218": { + "op": "txn Sender", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "assets#0", + "caller#0", + "escrowID#0", + "mbrPayment#0", + "plugin#0", + "tmp%3#1" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "plugin#0", + "tmp%3#1" + ] + }, + "3220": { + "op": "swap", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "tmp%3#1", + "plugin#0" + ] + }, + "3221": { + "op": "app_params_get AppAddress", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "assets#0", + "caller#0", + "check%0#0", + "escrowID#0", + "mbrPayment#0", + "tmp%3#1", + "value%0#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "tmp%3#1", + "value%0#0", + "check%0#0" + ] + }, + "3223": { + "error": "application exists", + "op": "assert // application exists", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "tmp%3#1", + "value%0#0" + ] + }, + "3224": { + "op": "==", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "assets#0", + "caller#0", + "escrowID#0", + "mbrPayment#0", + "tmp%4#1" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "tmp%4#1" + ] + }, + "3225": { + "op": "bnz arc58_pluginOptinEscrow_bool_true@4", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0" + ] + }, + "3228": { + "op": "txn Sender", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "assets#0", + "caller#0", + "escrowID#0", + "mbrPayment#0", + "tmp%5#1" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "tmp%5#1" + ] + }, + "3230": { + "op": "dig 6", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "tmp%5#1", + "caller#0" + ] + }, + "3232": { + "op": "==", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "assets#0", + "caller#0", + "escrowID#0", + "mbrPayment#0", + "tmp%7#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "tmp%7#0" + ] + }, + "3233": { + "op": "bnz arc58_pluginOptinEscrow_bool_true@4", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0" + ] + }, + "3236": { + "op": "dig 5", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "caller#0" + ] + }, + "3238": { + "op": "global ZeroAddress", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "assets#0", + "caller#0", + "escrowID#0", + "mbrPayment#0", + "tmp%9#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "caller#0", + "tmp%9#0" + ] + }, + "3240": { + "op": "==", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "assets#0", + "caller#0", + "escrowID#0", + "mbrPayment#0", + "tmp%10#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "tmp%10#0" + ] + }, + "3241": { + "op": "bz arc58_pluginOptinEscrow_bool_false@5", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0" + ] + }, + "3244": { + "block": "arc58_pluginOptinEscrow_bool_true@4", + "stack_in": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0" + ], + "op": "intc_1 // 1", + "defined_out": [ + "or_result%0#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "or_result%0#0" + ] + }, + "3245": { + "error": "forbidden", + "block": "arc58_pluginOptinEscrow_bool_merge@6", + "stack_in": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "or_result%0#0" + ], + "op": "assert // forbidden", + "defined_out": [], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0" + ] + }, + "3246": { + "op": "dup", + "defined_out": [ + "escrowID#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "escrowID#0" + ] + }, + "3247": { + "op": "app_params_get AppAddress", + "defined_out": [ + "check%1#0", + "escrowAddress#0", + "escrowID#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "escrowAddress#0", + "check%1#0" + ] + }, + "3249": { + "op": "swap", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "check%1#0", + "escrowAddress#0" + ] + }, + "3250": { + "op": "dup", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "check%1#0", + "escrowAddress#0", + "escrowAddress#0 (copy)" + ] + }, + "3251": { + "op": "cover 2", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "escrowAddress#0", + "check%1#0", + "escrowAddress#0" + ] + }, + "3253": { + "op": "bury 10", + "defined_out": [ + "check%1#0", + "escrowAddress#0", + "escrowID#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "escrowAddress#0", + "check%1#0" + ] + }, + "3255": { + "error": "application exists", + "op": "assert // application exists", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "escrowAddress#0" + ] + }, + "3256": { + "op": "dig 3", + "defined_out": [ + "escrowAddress#0", + "escrowID#0", + "mbrPayment#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "escrowAddress#0", + "mbrPayment#0" + ] + }, + "3258": { + "op": "dup", + "defined_out": [ + "escrowAddress#0", + "escrowID#0", + "mbrPayment#0", + "mbrPayment#0 (copy)" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "escrowAddress#0", + "mbrPayment#0", + "mbrPayment#0 (copy)" + ] + }, + "3259": { + "op": "gtxns Receiver", + "defined_out": [ + "escrowAddress#0", + "escrowID#0", + "mbrPayment#0", + "tmp%11#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "escrowAddress#0", + "mbrPayment#0", + "tmp%11#0" + ] + }, + "3261": { + "op": "intc_0 // 0", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "escrowAddress#0", + "mbrPayment#0", + "tmp%11#0", + "0" + ] + }, + "3262": { + "op": "bytec_0 // \"controlled_address\"", + "defined_out": [ + "\"controlled_address\"", + "0", + "escrowAddress#0", + "escrowID#0", + "mbrPayment#0", + "tmp%11#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "escrowAddress#0", + "mbrPayment#0", + "tmp%11#0", + "0", + "\"controlled_address\"" + ] + }, + "3263": { + "op": "app_global_get_ex", + "defined_out": [ + "escrowAddress#0", + "escrowID#0", + "maybe_exists%2#0", + "maybe_value%0#0", + "mbrPayment#0", + "tmp%11#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "escrowAddress#0", + "mbrPayment#0", + "tmp%11#0", + "maybe_value%0#0", + "maybe_exists%2#0" + ] + }, + "3264": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "escrowAddress#0", + "mbrPayment#0", + "tmp%11#0", + "maybe_value%0#0" + ] + }, + "3265": { + "op": "swap", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "escrowAddress#0", + "mbrPayment#0", + "maybe_value%0#0", + "tmp%11#0" + ] + }, + "3266": { + "op": "dig 1", + "defined_out": [ + "escrowAddress#0", + "escrowID#0", + "maybe_value%0#0", + "maybe_value%0#0 (copy)", + "mbrPayment#0", + "tmp%11#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "escrowAddress#0", + "mbrPayment#0", + "maybe_value%0#0", + "tmp%11#0", + "maybe_value%0#0 (copy)" + ] + }, + "3268": { + "op": "==", + "defined_out": [ + "escrowAddress#0", + "escrowID#0", + "maybe_value%0#0", + "mbrPayment#0", + "tmp%12#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "escrowAddress#0", + "mbrPayment#0", + "maybe_value%0#0", + "tmp%12#0" + ] + }, + "3269": { + "op": "uncover 2", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "escrowAddress#0", + "maybe_value%0#0", + "tmp%12#0", + "mbrPayment#0" + ] + }, + "3271": { + "op": "gtxns Amount", + "defined_out": [ + "escrowAddress#0", + "escrowID#0", + "maybe_value%0#0", + "mbrPayment#0", + "tmp%12#0", + "tmp%13#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "escrowAddress#0", + "maybe_value%0#0", + "tmp%12#0", + "tmp%13#0" + ] + }, + "3273": { + "op": "global AssetOptInMinBalance", + "defined_out": [ + "escrowAddress#0", + "escrowID#0", + "maybe_value%0#0", + "mbrPayment#0", + "tmp%12#0", + "tmp%13#0", + "tmp%14#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "escrowAddress#0", + "maybe_value%0#0", + "tmp%12#0", + "tmp%13#0", + "tmp%14#0" + ] + }, + "3275": { + "op": "dig 8", + "defined_out": [ + "aggregate%array_length%1#0", + "escrowAddress#0", + "escrowID#0", + "maybe_value%0#0", + "mbrPayment#0", + "tmp%12#0", + "tmp%13#0", + "tmp%14#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "escrowAddress#0", + "maybe_value%0#0", + "tmp%12#0", + "tmp%13#0", + "tmp%14#0", + "aggregate%array_length%1#0" + ] + }, + "3277": { + "op": "dup", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%array_length%1#0 (copy)", + "escrowAddress#0", + "escrowID#0", + "maybe_value%0#0", + "mbrPayment#0", + "tmp%12#0", + "tmp%13#0", + "tmp%14#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "escrowAddress#0", + "maybe_value%0#0", + "tmp%12#0", + "tmp%13#0", + "tmp%14#0", + "aggregate%array_length%1#0 (copy)", + "aggregate%array_length%1#0 (copy)" + ] + }, + "3278": { + "op": "cover 4", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "escrowAddress#0", + "maybe_value%0#0", + "aggregate%array_length%1#0", + "tmp%12#0", + "tmp%13#0", + "tmp%14#0", + "aggregate%array_length%1#0 (copy)" + ] + }, + "3280": { + "op": "*", + "defined_out": [ + "aggregate%array_length%1#0", + "escrowAddress#0", + "escrowID#0", + "maybe_value%0#0", + "mbrPayment#0", + "tmp%12#0", + "tmp%13#0", + "tmp%16#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "escrowAddress#0", + "maybe_value%0#0", + "aggregate%array_length%1#0", + "tmp%12#0", + "tmp%13#0", + "tmp%16#0" + ] + }, + "3281": { + "op": "==", + "defined_out": [ + "aggregate%array_length%1#0", + "escrowAddress#0", + "escrowID#0", + "maybe_value%0#0", + "mbrPayment#0", + "tmp%12#0", + "tmp%17#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "escrowAddress#0", + "maybe_value%0#0", + "aggregate%array_length%1#0", + "tmp%12#0", + "tmp%17#0" + ] + }, + "3282": { + "op": "&&", + "defined_out": [ + "aggregate%array_length%1#0", + "escrowAddress#0", + "escrowID#0", + "maybe_value%0#0", + "mbrPayment#0", + "tmp%18#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "escrowAddress#0", + "maybe_value%0#0", + "aggregate%array_length%1#0", + "tmp%18#0" + ] + }, + "3283": { + "error": "invalid payment", + "op": "assert // invalid payment", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "escrowAddress#0", + "maybe_value%0#0", + "aggregate%array_length%1#0" + ] + }, + "3284": { + "op": "itxn_begin" + }, + "3285": { + "op": "global AssetOptInMinBalance", + "defined_out": [ + "aggregate%array_length%1#0", + "escrowAddress#0", + "escrowID#0", + "maybe_value%0#0", + "mbrPayment#0", + "tmp%19#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "escrowAddress#0", + "maybe_value%0#0", + "aggregate%array_length%1#0", + "tmp%19#0" + ] + }, + "3287": { + "op": "*", + "defined_out": [ + "aggregate%array_length%1#0", + "escrowAddress#0", + "escrowID#0", + "inner_txn_params%0%%param_Amount_idx_0#0", + "maybe_value%0#0", + "mbrPayment#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "escrowAddress#0", + "maybe_value%0#0", + "inner_txn_params%0%%param_Amount_idx_0#0" + ] + }, + "3288": { + "op": "itxn_field Amount", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "escrowAddress#0", + "maybe_value%0#0" + ] + }, + "3290": { + "op": "itxn_field Sender" + }, + "3292": { + "op": "itxn_field Receiver", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0" + ] + }, + "3294": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "aggregate%array_length%1#0", + "escrowAddress#0", + "escrowID#0", + "mbrPayment#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "1" + ] + }, + "3295": { + "op": "itxn_field TypeEnum", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0" + ] + }, + "3297": { + "op": "intc_0 // 0", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "0" + ] + }, + "3298": { + "op": "itxn_field Fee", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0" + ] + }, + "3300": { + "op": "itxn_submit" + }, + "3301": { + "op": "intc_0 // 0", + "defined_out": [ + "aggregate%array_length%1#0", + "escrowAddress#0", + "escrowID#0", + "i#0", + "mbrPayment#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "i#0" + ] + }, + "3302": { + "op": "bury 7", + "defined_out": [ + "aggregate%array_length%1#0", + "escrowAddress#0", + "escrowID#0", + "i#0", + "mbrPayment#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0" + ] + }, + "3304": { + "block": "arc58_pluginOptinEscrow_while_top@8", + "stack_in": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0" + ], + "op": "dig 6", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "i#0" + ] + }, + "3306": { + "op": "dig 4", + "defined_out": [ + "aggregate%array_length%1#0", + "i#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "i#0", + "aggregate%array_length%1#0" + ] + }, + "3308": { + "op": "<", + "defined_out": [ + "aggregate%array_length%1#0", + "i#0", + "tmp%22#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "tmp%22#0" + ] + }, + "3309": { + "op": "bz arc58_pluginOptinEscrow_after_while@11", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0" + ] + }, + "3312": { + "op": "dig 4", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "i#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "assets#0" + ] + }, + "3314": { + "op": "extract 2 0", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%array_trimmed%0#0", + "assets#0", + "i#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "aggregate%array_trimmed%0#0" + ] + }, + "3317": { + "op": "dig 7", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "aggregate%array_trimmed%0#0", + "i#0" + ] + }, + "3319": { + "op": "dup", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%array_trimmed%0#0", + "assets#0", + "i#0", + "i#0 (copy)" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "aggregate%array_trimmed%0#0", + "i#0 (copy)", + "i#0 (copy)" + ] + }, + "3320": { + "op": "cover 2", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "i#0", + "aggregate%array_trimmed%0#0", + "i#0 (copy)" + ] + }, + "3322": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "aggregate%array_length%1#0", + "aggregate%array_trimmed%0#0", + "assets#0", + "i#0", + "i#0 (copy)" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "i#0", + "aggregate%array_trimmed%0#0", + "i#0 (copy)", + "8" + ] + }, + "3323": { + "op": "*", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0", + "assets#0", + "i#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "i#0", + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0" + ] + }, + "3324": { + "op": "extract_uint64", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "i#0", + "values%2#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "i#0", + "values%2#0" + ] + }, + "3325": { + "op": "dup", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "i#0", + "values%2#0", + "values%2#0 (copy)" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "i#0", + "values%2#0", + "values%2#0 (copy)" + ] + }, + "3326": { + "op": "itob", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%val_as_bytes%1#0", + "assets#0", + "i#0", + "values%2#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "i#0", + "values%2#0", + "aggregate%val_as_bytes%1#0" + ] + }, + "3327": { + "op": "bytec 13 // 0x000a", + "defined_out": [ + "0x000a", + "aggregate%array_length%1#0", + "aggregate%val_as_bytes%1#0", + "assets#0", + "i#0", + "values%2#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "i#0", + "values%2#0", + "aggregate%val_as_bytes%1#0", + "0x000a" + ] + }, + "3329": { + "op": "swap", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "i#0", + "values%2#0", + "0x000a", + "aggregate%val_as_bytes%1#0" + ] + }, + "3330": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%head%4#0", + "assets#0", + "i#0", + "values%2#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "i#0", + "values%2#0", + "aggregate%head%4#0" + ] + }, + "3331": { + "op": "dig 4", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "aggregate%head%4#0", + "assets#0", + "i#0", + "values%2#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "i#0", + "values%2#0", + "aggregate%head%4#0", + "aggregate%encoded_value%0#0" + ] + }, + "3333": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%concat%1#0", + "aggregate%encoded_value%0#0", + "assets#0", + "i#0", + "values%2#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "i#0", + "values%2#0", + "aggregate%concat%1#0" + ] + }, + "3334": { + "op": "bytec 14 // \"a\"", + "defined_out": [ + "\"a\"", + "aggregate%array_length%1#0", + "aggregate%concat%1#0", + "aggregate%encoded_value%0#0", + "assets#0", + "i#0", + "values%2#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "i#0", + "values%2#0", + "aggregate%concat%1#0", + "\"a\"" + ] + }, + "3336": { + "op": "swap", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "i#0", + "values%2#0", + "\"a\"", + "aggregate%concat%1#0" + ] + }, + "3337": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "assets#0", + "box_prefixed_key%4#0", + "i#0", + "values%2#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "i#0", + "values%2#0", + "box_prefixed_key%4#0" + ] + }, + "3338": { + "op": "box_len", + "defined_out": [ + "_%2#0", + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "assets#0", + "i#0", + "maybe_exists%4#0", + "values%2#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "i#0", + "values%2#0", + "_%2#0", + "maybe_exists%4#0" + ] + }, + "3339": { + "op": "bury 1", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "i#0", + "values%2#0", + "maybe_exists%4#0" + ] + }, + "3341": { + "error": "allowance does not exist", + "op": "assert // allowance does not exist", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "i#0", + "values%2#0" + ] + }, + "3342": { + "op": "itxn_begin" + }, + "3343": { + "op": "itxn_field XferAsset", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "i#0" + ] + }, + "3345": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "assets#0", + "i#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "i#0", + "0" + ] + }, + "3346": { + "op": "itxn_field AssetAmount", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "i#0" + ] + }, + "3348": { + "op": "dig 8", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "assets#0", + "escrowAddress#0", + "i#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "i#0", + "escrowAddress#0" + ] + }, + "3350": { + "op": "dup", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "assets#0", + "escrowAddress#0", + "escrowAddress#0 (copy)", + "i#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "i#0", + "escrowAddress#0", + "escrowAddress#0 (copy)" + ] + }, + "3351": { + "op": "itxn_field AssetReceiver", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "i#0", + "escrowAddress#0" + ] + }, + "3353": { + "op": "itxn_field Sender", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "i#0" + ] + }, + "3355": { + "op": "pushint 4 // 4", + "defined_out": [ + "4", + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "assets#0", + "escrowAddress#0", + "i#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "i#0", + "4" + ] + }, + "3357": { + "op": "itxn_field TypeEnum", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "i#0" + ] + }, + "3359": { + "op": "intc_0 // 0", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "i#0", + "0" + ] + }, + "3360": { + "op": "itxn_field Fee", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "i#0" + ] + }, + "3362": { + "op": "itxn_submit" + }, + "3363": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "assets#0", + "escrowAddress#0", + "i#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "i#0", + "1" + ] + }, + "3364": { + "op": "+", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "i#0" + ] + }, + "3365": { + "op": "bury 7", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "assets#0", + "escrowAddress#0", + "i#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0" + ] + }, + "3367": { + "op": "b arc58_pluginOptinEscrow_while_top@8" + }, + "3370": { + "block": "arc58_pluginOptinEscrow_after_while@11", + "stack_in": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0" + ], + "op": "intc_1 // 1", + "defined_out": [ + "1" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "1" + ] + }, + "3371": { + "op": "return", + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0" + ] + }, + "3372": { + "block": "arc58_pluginOptinEscrow_bool_false@5", + "stack_in": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0" + ], + "op": "intc_0 // 0", + "defined_out": [ + "or_result%0#0" + ], + "stack_out": [ + "escrowAddress#0", + "i#0", + "caller#0", + "assets#0", + "aggregate%array_length%1#0", + "mbrPayment#0", + "aggregate%encoded_value%0#0", + "escrowID#0", + "or_result%0#0" + ] + }, + "3373": { + "op": "b arc58_pluginOptinEscrow_bool_merge@6" + }, + "3376": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_addAllowances[routing]", + "params": {}, + "block": "arc58_addAllowances", + "stack_in": [], + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%extract%2#0" + ] + }, + "3377": { + "op": "dupn 4", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0" + ] + }, + "3379": { + "op": "bytec_1 // \"\"", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0" + ] + }, + "3380": { + "op": "dup", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0" + ] + }, + "3381": { + "op": "txna ApplicationArgs 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "tmp%0#0" + ] + }, + "3384": { + "op": "dup", + "defined_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "tmp%0#0", + "tmp%0#0 (copy)" + ] + }, + "3385": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "tmp%0#0", + "tmp%0#0 (copy)", + "0" + ] + }, + "3386": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "tmp%0#0", + "aggregate%array_length%0#0" + ] + }, + "3387": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "aggregate%array_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "tmp%0#0", + "aggregate%array_length%0#0", + "2" + ] + }, + "3388": { + "op": "+", + "defined_out": [ + "add%0#0", + "tmp%0#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "tmp%0#0", + "add%0#0" + ] + }, + "3389": { + "op": "dig 1", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "tmp%0#0", + "add%0#0", + "tmp%0#0 (copy)" + ] + }, + "3391": { + "op": "len", + "defined_out": [ + "add%0#0", + "len%0#0", + "tmp%0#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "tmp%0#0", + "add%0#0", + "len%0#0" + ] + }, + "3392": { + "op": "==", + "defined_out": [ + "eq%0#0", + "tmp%0#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "tmp%0#0", + "eq%0#0" + ] + }, + "3393": { + "error": "invalid number of bytes for (len+utf8[])", + "op": "assert // invalid number of bytes for (len+utf8[])", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "tmp%0#0" + ] + }, + "3394": { + "op": "extract 2 0", + "defined_out": [ + "escrow#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0" + ] + }, + "3397": { + "op": "dup", + "defined_out": [ + "escrow#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "escrow#0" + ] + }, + "3398": { + "op": "txna ApplicationArgs 2" + }, + "3401": { + "op": "dup", + "defined_out": [ + "allowances#0", + "escrow#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "escrow#0", + "allowances#0", + "allowances#0" + ] + }, + "3402": { + "op": "cover 2", + "defined_out": [ + "allowances#0", + "escrow#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "escrow#0", + "allowances#0" + ] + }, + "3404": { + "op": "dup", + "defined_out": [ + "allowances#0", + "allowances#0 (copy)", + "escrow#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "escrow#0", + "allowances#0", + "allowances#0 (copy)" + ] + }, + "3405": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "escrow#0", + "allowances#0", + "allowances#0 (copy)", + "0" + ] + }, + "3406": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%1#0", + "allowances#0", + "escrow#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0" + ] + }, + "3407": { + "op": "dup", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%array_length%1#0" + ] + }, + "3408": { + "op": "cover 3", + "defined_out": [ + "aggregate%array_length%1#0", + "allowances#0", + "escrow#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0" + ] + }, + "3410": { + "op": "pushint 34 // 34", + "defined_out": [ + "34", + "aggregate%array_length%1#0", + "allowances#0", + "escrow#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "34" + ] + }, + "3412": { + "op": "*", + "defined_out": [ + "aggregate%array_length%1#0", + "allowances#0", + "escrow#0", + "mul%1#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "escrow#0", + "allowances#0", + "mul%1#0" + ] + }, + "3413": { + "op": "intc_2 // 2", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "escrow#0", + "allowances#0", + "mul%1#0", + "2" + ] + }, + "3414": { + "op": "+", + "defined_out": [ + "add%1#0", + "aggregate%array_length%1#0", + "allowances#0", + "escrow#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "escrow#0", + "allowances#0", + "add%1#0" + ] + }, + "3415": { + "op": "swap", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "escrow#0", + "add%1#0", + "allowances#0" + ] + }, + "3416": { + "op": "len", + "defined_out": [ + "add%1#0", + "aggregate%array_length%1#0", + "allowances#0", + "escrow#0", + "len%1#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "escrow#0", + "add%1#0", + "len%1#0" + ] + }, + "3417": { + "op": "==", + "defined_out": [ + "aggregate%array_length%1#0", + "allowances#0", + "eq%1#0", + "escrow#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "escrow#0", + "eq%1#0" + ] + }, + "3418": { + "error": "invalid number of bytes for (len+(uint64,uint8,uint64,uint64,uint64,bool1)[])", + "op": "assert // invalid number of bytes for (len+(uint64,uint8,uint64,uint64,uint64,bool1)[])", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "escrow#0" + ] + }, + "3419": { + "op": "txn Sender", + "defined_out": [ + "aggregate%array_length%1#0", + "allowances#0", + "escrow#0", + "tmp%0#1" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "escrow#0", + "tmp%0#1" + ] + }, + "3421": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "escrow#0", + "tmp%0#1", + "0" + ] + }, + "3422": { + "op": "bytec_2 // \"admin\"", + "defined_out": [ + "\"admin\"", + "0", + "aggregate%array_length%1#0", + "allowances#0", + "escrow#0", + "tmp%0#1" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "escrow#0", + "tmp%0#1", + "0", + "\"admin\"" + ] + }, + "3423": { + "op": "app_global_get_ex", + "defined_out": [ + "aggregate%array_length%1#0", + "allowances#0", + "escrow#0", + "maybe_exists%0#0", + "maybe_value%0#0", + "tmp%0#1" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "escrow#0", + "tmp%0#1", + "maybe_value%0#0", + "maybe_exists%0#0" + ] + }, + "3424": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "escrow#0", + "tmp%0#1", + "maybe_value%0#0" + ] + }, + "3425": { + "op": "==", + "defined_out": [ + "aggregate%array_length%1#0", + "allowances#0", + "escrow#0", + "tmp%1#1" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "escrow#0", + "tmp%1#1" + ] + }, + "3426": { + "error": "admin only", + "op": "assert // admin only", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "escrow#0" + ] + }, + "3427": { + "op": "bytec 5 // \"e\"", + "defined_out": [ + "\"e\"", + "aggregate%array_length%1#0", + "allowances#0", + "escrow#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "escrow#0", + "\"e\"" + ] + }, + "3429": { + "op": "swap", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "\"e\"", + "escrow#0" + ] + }, + "3430": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%1#0", + "allowances#0", + "box_prefixed_key%0#0", + "escrow#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "box_prefixed_key%0#0" + ] + }, + "3431": { + "op": "dup", + "defined_out": [ + "aggregate%array_length%1#0", + "allowances#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "escrow#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)" + ] + }, + "3432": { + "op": "box_len", + "defined_out": [ + "_%0#0", + "aggregate%array_length%1#0", + "allowances#0", + "box_prefixed_key%0#0", + "escrow#0", + "maybe_exists%1#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "box_prefixed_key%0#0", + "_%0#0", + "maybe_exists%1#0" + ] + }, + "3433": { + "op": "bury 1", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "box_prefixed_key%0#0", + "maybe_exists%1#0" + ] + }, + "3435": { + "error": "escrow does not exist", + "op": "assert // escrow does not exist", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "box_prefixed_key%0#0" + ] + }, + "3436": { + "op": "box_get", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%box_get%0#0", + "aggregate%box_get%1#0", + "allowances#0", + "escrow#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%box_get%0#0", + "aggregate%box_get%1#0" + ] + }, + "3437": { + "op": "pop", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%box_get%0#0" + ] + }, + "3438": { + "op": "pushint 64 // 64", + "defined_out": [ + "64", + "aggregate%array_length%1#0", + "aggregate%box_get%0#0", + "allowances#0", + "escrow#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%box_get%0#0", + "64" + ] + }, + "3440": { + "op": "getbit", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%get_bit%0#0", + "allowances#0", + "escrow#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%get_bit%0#0" + ] + }, + "3441": { + "op": "!", + "defined_out": [ + "aggregate%array_length%1#0", + "allowances#0", + "escrow#0", + "tmp%2#1" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "tmp%2#1" + ] + }, + "3442": { + "error": "Escrow is locked", + "op": "assert // Escrow is locked", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0" + ] + }, + "3443": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "0" + ] + }, + "3444": { + "op": "bytec_0 // \"controlled_address\"", + "defined_out": [ + "\"controlled_address\"", + "0", + "aggregate%array_length%1#0", + "allowances#0", + "escrow#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "0", + "\"controlled_address\"" + ] + }, + "3445": { + "op": "app_global_get_ex", + "defined_out": [ + "aggregate%array_length%1#0", + "allowances#0", + "escrow#0", + "maybe_exists%2#0", + "maybe_value%1#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "maybe_value%1#0", + "maybe_exists%2#0" + ] + }, + "3446": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "maybe_value%1#0" + ] + }, + "3447": { + "op": "global CurrentApplicationAddress", + "defined_out": [ + "aggregate%array_length%1#0", + "allowances#0", + "escrow#0", + "maybe_value%1#0", + "tmp%3#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "maybe_value%1#0", + "tmp%3#0" + ] + }, + "3449": { + "op": "!=", + "defined_out": [ + "aggregate%array_length%1#0", + "allowances#0", + "escrow#0", + "tmp%4#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "tmp%4#0" + ] + }, + "3450": { + "op": "bz arc58_addAllowances_after_if_else@4", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0" + ] + }, + "3453": { + "op": "itxn_begin" + }, + "3454": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "0" + ] + }, + "3455": { + "op": "bytec_0 // \"controlled_address\"", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "0", + "\"controlled_address\"" + ] + }, + "3456": { + "op": "app_global_get_ex", + "defined_out": [ + "aggregate%array_length%1#0", + "allowances#0", + "escrow#0", + "maybe_exists%3#0", + "maybe_value%2#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "maybe_value%2#0", + "maybe_exists%3#0" + ] + }, + "3457": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "maybe_value%2#0" + ] + }, + "3458": { + "op": "global CurrentApplicationAddress", + "defined_out": [ + "aggregate%array_length%1#0", + "allowances#0", + "escrow#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "maybe_value%2#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Receiver_idx_0#0" + ] + }, + "3460": { + "op": "dig 4", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "escrow#0" + ] + }, + "3462": { + "op": "len", + "defined_out": [ + "aggregate%array_length%1#0", + "allowances#0", + "escrow#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "maybe_value%2#0", + "tmp%0#2" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "tmp%0#2" + ] + }, + "3463": { + "op": "intc 4 // 400", + "defined_out": [ + "400", + "aggregate%array_length%1#0", + "allowances#0", + "escrow#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "maybe_value%2#0", + "tmp%0#2" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "tmp%0#2", + "400" + ] + }, + "3465": { + "op": "*", + "defined_out": [ + "aggregate%array_length%1#0", + "allowances#0", + "escrow#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "maybe_value%2#0", + "tmp%1#2" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "tmp%1#2" + ] + }, + "3466": { + "op": "intc 6 // 27700", + "defined_out": [ + "27700", + "aggregate%array_length%1#0", + "allowances#0", + "escrow#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "maybe_value%2#0", + "tmp%1#2" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "tmp%1#2", + "27700" + ] + }, + "3468": { + "op": "+", + "defined_out": [ + "aggregate%array_length%1#0", + "allowances#0", + "escrow#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "maybe_value%2#0", + "tmp%2#2" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "tmp%2#2" + ] + }, + "3469": { + "op": "dig 3", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "tmp%2#2", + "aggregate%array_length%1#0" + ] + }, + "3471": { + "op": "*", + "defined_out": [ + "aggregate%array_length%1#0", + "allowances#0", + "escrow#0", + "inner_txn_params%0%%param_Amount_idx_0#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "maybe_value%2#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "inner_txn_params%0%%param_Amount_idx_0#0" + ] + }, + "3472": { + "op": "itxn_field Amount", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Receiver_idx_0#0" + ] + }, + "3474": { + "op": "itxn_field Receiver", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "maybe_value%2#0" + ] + }, + "3476": { + "op": "itxn_field Sender", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0" + ] + }, + "3478": { + "op": "intc_1 // 1", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "1" + ] + }, + "3479": { + "op": "itxn_field TypeEnum", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0" + ] + }, + "3481": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "0" + ] + }, + "3482": { + "op": "itxn_field Fee", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0" + ] + }, + "3484": { + "op": "itxn_submit" + }, + "3485": { + "block": "arc58_addAllowances_after_if_else@4", + "stack_in": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0" + ], + "op": "intc_0 // 0", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "i#0" + ] + }, + "3486": { + "op": "bury 5", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0" + ] + }, + "3488": { + "block": "arc58_addAllowances_while_top@5", + "stack_in": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0" + ], + "op": "dig 4", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "i#0" + ] + }, + "3490": { + "op": "dig 1", + "defined_out": [ + "aggregate%array_length%1#0", + "i#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "i#0", + "aggregate%array_length%1#0" + ] + }, + "3492": { + "op": "<", + "defined_out": [ + "aggregate%array_length%1#0", + "i#0", + "tmp%8#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "tmp%8#0" + ] + }, + "3493": { + "op": "bz arc58_addAllowances_after_while@10", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0" + ] + }, + "3496": { + "op": "dig 1", + "defined_out": [ + "aggregate%array_length%1#0", + "allowances#0", + "i#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "allowances#0" + ] + }, + "3498": { + "op": "extract 2 0", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%array_trimmed%0#0", + "allowances#0", + "i#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%array_trimmed%0#0" + ] + }, + "3501": { + "op": "dig 5", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%array_trimmed%0#0", + "i#0" + ] + }, + "3503": { + "op": "pushint 34 // 34", + "defined_out": [ + "34", + "aggregate%array_length%1#0", + "aggregate%array_trimmed%0#0", + "allowances#0", + "i#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%array_trimmed%0#0", + "i#0", + "34" + ] + }, + "3505": { + "op": "*", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0", + "allowances#0", + "i#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0" + ] + }, + "3506": { + "op": "pushint 34 // 34", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0", + "34" + ] + }, + "3508": { + "error": "index access is out of bounds", + "op": "extract3 // on error: index access is out of bounds", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "allowances#0", + "i#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0" + ] + }, + "3509": { + "op": "dup", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%encoded_element%0#0 (copy)", + "allowances#0", + "i#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%encoded_element%0#0 (copy)" + ] + }, + "3510": { + "op": "extract 0 8", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%extract%0#0", + "allowances#0", + "i#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%extract%0#0" + ] + }, + "3513": { + "op": "dig 1", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%extract%0#0", + "aggregate%encoded_element%0#0 (copy)" + ] + }, + "3515": { + "op": "extract 8 1", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%extract%0#0", + "allowances#0", + "i#0", + "type#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%extract%0#0", + "type#0" + ] + }, + "3518": { + "op": "bury 8", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%extract%0#0", + "allowances#0", + "i#0", + "type#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%extract%0#0" + ] + }, + "3520": { + "op": "dig 1", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%extract%0#0", + "aggregate%encoded_element%0#0 (copy)" + ] + }, + "3522": { + "op": "extract 9 8", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%extract%0#0", + "aggregate%extract%2#0", + "allowances#0", + "i#0", + "type#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%extract%0#0", + "aggregate%extract%2#0" + ] + }, + "3525": { + "op": "bury 12", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%extract%0#0", + "aggregate%extract%2#0", + "allowances#0", + "i#0", + "type#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%extract%0#0" + ] + }, + "3527": { + "op": "dig 1", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%extract%0#0", + "aggregate%encoded_element%0#0 (copy)" + ] + }, + "3529": { + "op": "extract 17 8", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%extract%0#0", + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "allowances#0", + "i#0", + "type#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%extract%0#0", + "aggregate%extract%3#0" + ] + }, + "3532": { + "op": "bury 11", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%extract%0#0", + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "allowances#0", + "i#0", + "type#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%extract%0#0" + ] + }, + "3534": { + "op": "dig 1", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%extract%0#0", + "aggregate%encoded_element%0#0 (copy)" + ] + }, + "3536": { + "op": "extract 25 8", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%extract%0#0", + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "allowances#0", + "i#0", + "type#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%extract%0#0", + "aggregate%extract%4#0" + ] + }, + "3539": { + "op": "bury 10", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%extract%0#0", + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "allowances#0", + "i#0", + "type#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%extract%0#0" + ] + }, + "3541": { + "op": "swap", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%extract%0#0", + "aggregate%encoded_element%0#0" + ] + }, + "3542": { + "op": "pushint 264 // 264", + "defined_out": [ + "264", + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%extract%0#0", + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "allowances#0", + "i#0", + "type#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%extract%0#0", + "aggregate%encoded_element%0#0", + "264" + ] + }, + "3545": { + "op": "getbit", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%extract%0#0", + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "allowances#0", + "i#0", + "type#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%extract%0#0", + "useRounds#0" + ] + }, + "3546": { + "op": "dup", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%extract%0#0", + "useRounds#0", + "useRounds#0 (copy)" + ] + }, + "3547": { + "op": "cover 2", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "useRounds#0", + "aggregate%extract%0#0", + "useRounds#0" + ] + }, + "3549": { + "op": "bury 6", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%extract%0#0", + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "allowances#0", + "i#0", + "type#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "useRounds#0", + "aggregate%extract%0#0" + ] + }, + "3551": { + "op": "dig 4", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%extract%0#0", + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "allowances#0", + "escrow#0", + "i#0", + "type#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "useRounds#0", + "aggregate%extract%0#0", + "escrow#0" + ] + }, + "3553": { + "op": "dup", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%extract%0#0", + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "allowances#0", + "escrow#0", + "escrow#0 (copy)", + "i#0", + "type#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "useRounds#0", + "aggregate%extract%0#0", + "escrow#0", + "escrow#0 (copy)" + ] + }, + "3554": { + "op": "len", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%extract%0#0", + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "aggregate%length%0#0", + "allowances#0", + "escrow#0", + "i#0", + "type#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "useRounds#0", + "aggregate%extract%0#0", + "escrow#0", + "aggregate%length%0#0" + ] + }, + "3555": { + "op": "itob", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%as_bytes%0#0", + "aggregate%extract%0#0", + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "allowances#0", + "escrow#0", + "i#0", + "type#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "useRounds#0", + "aggregate%extract%0#0", + "escrow#0", + "aggregate%as_bytes%0#0" + ] + }, + "3556": { + "op": "extract 6 2", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%extract%0#0", + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "aggregate%length_uint16%0#0", + "allowances#0", + "escrow#0", + "i#0", + "type#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "useRounds#0", + "aggregate%extract%0#0", + "escrow#0", + "aggregate%length_uint16%0#0" + ] + }, + "3559": { + "op": "swap", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "useRounds#0", + "aggregate%extract%0#0", + "aggregate%length_uint16%0#0", + "escrow#0" + ] + }, + "3560": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "aggregate%extract%0#0", + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "allowances#0", + "escrow#0", + "i#0", + "type#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "useRounds#0", + "aggregate%extract%0#0", + "aggregate%encoded_value%0#0" + ] + }, + "3561": { + "op": "bytec 13 // 0x000a", + "defined_out": [ + "0x000a", + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "aggregate%extract%0#0", + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "allowances#0", + "escrow#0", + "i#0", + "type#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "useRounds#0", + "aggregate%extract%0#0", + "aggregate%encoded_value%0#0", + "0x000a" + ] + }, + "3563": { + "op": "uncover 2", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "useRounds#0", + "aggregate%encoded_value%0#0", + "0x000a", + "aggregate%extract%0#0" + ] + }, + "3565": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "aggregate%head%1#0", + "allowances#0", + "escrow#0", + "i#0", + "type#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "useRounds#0", + "aggregate%encoded_value%0#0", + "aggregate%head%1#0" + ] + }, + "3566": { + "op": "swap", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "useRounds#0", + "aggregate%head%1#0", + "aggregate%encoded_value%0#0" + ] + }, + "3567": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "allowances#0", + "escrow#0", + "i#0", + "key#0", + "type#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "useRounds#0", + "key#0" + ] + }, + "3568": { + "op": "bytec 14 // \"a\"", + "defined_out": [ + "\"a\"", + "aggregate%array_length%1#0", + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "allowances#0", + "escrow#0", + "i#0", + "key#0", + "type#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "useRounds#0", + "key#0", + "\"a\"" + ] + }, + "3570": { + "op": "swap", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "useRounds#0", + "\"a\"", + "key#0" + ] + }, + "3571": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "allowances#0", + "box_prefixed_key%2#0", + "escrow#0", + "i#0", + "type#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "useRounds#0", + "box_prefixed_key%2#0" + ] + }, + "3572": { + "op": "dup", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "useRounds#0", + "box_prefixed_key%2#0", + "box_prefixed_key%2#0" + ] + }, + "3573": { + "op": "bury 9", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "allowances#0", + "box_prefixed_key%2#0", + "escrow#0", + "i#0", + "type#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "useRounds#0", + "box_prefixed_key%2#0" + ] + }, + "3575": { + "op": "box_len", + "defined_out": [ + "_%1#0", + "aggregate%array_length%1#0", + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "allowances#0", + "box_prefixed_key%2#0", + "escrow#0", + "i#0", + "maybe_exists%4#0", + "type#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "useRounds#0", + "_%1#0", + "maybe_exists%4#0" + ] + }, + "3576": { + "op": "bury 1", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "useRounds#0", + "maybe_exists%4#0" + ] + }, + "3578": { + "op": "!", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "allowances#0", + "box_prefixed_key%2#0", + "escrow#0", + "i#0", + "tmp%10#0", + "type#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "useRounds#0", + "tmp%10#0" + ] + }, + "3579": { + "error": "allowance already exists", + "op": "assert // allowance already exists", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "useRounds#0" + ] + }, + "3580": { + "op": "bz arc58_addAllowances_ternary_false@8", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0" + ] + }, + "3583": { + "op": "global Round", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "allowances#0", + "box_prefixed_key%2#0", + "escrow#0", + "i#0", + "start#0", + "type#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "start#0" + ] + }, + "3585": { + "block": "arc58_addAllowances_ternary_merge@9", + "stack_in": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "start#0" + ], + "op": "dig 6", + "defined_out": [ + "type#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "start#0", + "type#0" + ] + }, + "3587": { + "op": "dig 10", + "defined_out": [ + "aggregate%extract%3#0", + "type#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "start#0", + "type#0", + "aggregate%extract%3#0" + ] + }, + "3589": { + "op": "concat", + "defined_out": [ + "aggregate%extract%3#0", + "aggregate%head%3#0", + "type#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "start#0", + "aggregate%head%3#0" + ] + }, + "3590": { + "op": "dig 11", + "defined_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%head%3#0", + "type#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "start#0", + "aggregate%head%3#0", + "aggregate%extract%2#0" + ] + }, + "3592": { + "op": "concat", + "defined_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%head%4#0", + "type#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "start#0", + "aggregate%head%4#0" + ] + }, + "3593": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%head%4#0", + "type#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "start#0", + "aggregate%head%4#0", + "0" + ] + }, + "3594": { + "op": "itob", + "defined_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%head%4#0", + "aggregate%val_as_bytes%3#0", + "type#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "start#0", + "aggregate%head%4#0", + "aggregate%val_as_bytes%3#0" + ] + }, + "3595": { + "op": "swap", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "start#0", + "aggregate%val_as_bytes%3#0", + "aggregate%head%4#0" + ] + }, + "3596": { + "op": "dig 1", + "defined_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%head%4#0", + "aggregate%val_as_bytes%3#0", + "aggregate%val_as_bytes%3#0 (copy)", + "type#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "start#0", + "aggregate%val_as_bytes%3#0", + "aggregate%head%4#0", + "aggregate%val_as_bytes%3#0 (copy)" + ] + }, + "3598": { + "op": "concat", + "defined_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%head%5#0", + "aggregate%val_as_bytes%3#0", + "type#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "start#0", + "aggregate%val_as_bytes%3#0", + "aggregate%head%5#0" + ] + }, + "3599": { + "op": "dig 10", + "defined_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "aggregate%head%5#0", + "aggregate%val_as_bytes%3#0", + "type#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "start#0", + "aggregate%val_as_bytes%3#0", + "aggregate%head%5#0", + "aggregate%extract%4#0" + ] + }, + "3601": { + "op": "concat", + "defined_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "aggregate%head%6#0", + "aggregate%val_as_bytes%3#0", + "type#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "start#0", + "aggregate%val_as_bytes%3#0", + "aggregate%head%6#0" + ] + }, + "3602": { + "op": "swap", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "start#0", + "aggregate%head%6#0", + "aggregate%val_as_bytes%3#0" + ] + }, + "3603": { + "op": "concat", + "defined_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "aggregate%head%7#0", + "type#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "start#0", + "aggregate%head%7#0" + ] + }, + "3604": { + "op": "swap", + "defined_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "aggregate%head%7#0", + "start#0", + "type#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%head%7#0", + "start#0" + ] + }, + "3605": { + "op": "itob", + "defined_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "aggregate%head%7#0", + "aggregate%val_as_bytes%6#0", + "type#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%head%7#0", + "aggregate%val_as_bytes%6#0" + ] + }, + "3606": { + "op": "concat", + "defined_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "aggregate%head%8#0", + "type#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%head%8#0" + ] + }, + "3607": { + "op": "bytec 9 // 0x00", + "defined_out": [ + "0x00", + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "aggregate%head%8#0", + "type#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%head%8#0", + "0x00" + ] + }, + "3609": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%head%8#0", + "0x00", + "0" + ] + }, + "3610": { + "op": "dig 6", + "defined_out": [ + "0", + "0x00", + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "aggregate%head%8#0", + "type#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%head%8#0", + "0x00", + "0", + "useRounds#0" + ] + }, + "3612": { + "op": "setbit", + "defined_out": [ + "aggregate%encoded_bool%0#0", + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "aggregate%head%8#0", + "type#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%head%8#0", + "aggregate%encoded_bool%0#0" + ] + }, + "3613": { + "op": "concat", + "defined_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "aggregate%head%9#0", + "type#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%head%9#0" + ] + }, + "3614": { + "op": "dig 7", + "defined_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "aggregate%head%9#0", + "box_prefixed_key%2#0", + "type#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "aggregate%head%9#0", + "box_prefixed_key%2#0" + ] + }, + "3616": { + "op": "swap", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "box_prefixed_key%2#0", + "aggregate%head%9#0" + ] + }, + "3617": { + "op": "box_put", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0" + ] + }, + "3618": { + "op": "dig 4", + "defined_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "i#0", + "type#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "i#0" + ] + }, + "3620": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "i#0", + "type#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "i#0", + "1" + ] + }, + "3621": { + "op": "+", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "i#0" + ] + }, + "3622": { + "op": "bury 5", + "defined_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "i#0", + "type#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0" + ] + }, + "3624": { + "op": "b arc58_addAllowances_while_top@5" + }, + "3627": { + "block": "arc58_addAllowances_ternary_false@8", + "stack_in": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0" + ], + "op": "global LatestTimestamp", + "defined_out": [ + "start#0" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "start#0" + ] + }, + "3629": { + "op": "b arc58_addAllowances_ternary_merge@9" + }, + "3632": { + "block": "arc58_addAllowances_after_while@10", + "stack_in": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0" + ], + "op": "bytec_3 // \"last_user_interaction\"", + "defined_out": [ + "\"last_user_interaction\"" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "\"last_user_interaction\"" + ] + }, + "3633": { + "op": "global LatestTimestamp", + "defined_out": [ + "\"last_user_interaction\"", + "tmp%0#2" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "\"last_user_interaction\"", + "tmp%0#2" + ] + }, + "3635": { + "op": "app_global_put", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0" + ] + }, + "3636": { + "op": "bytec 6 // \"last_change\"", + "defined_out": [ + "\"last_change\"" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "\"last_change\"" + ] + }, + "3638": { + "op": "global LatestTimestamp", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "\"last_change\"", + "tmp%0#2" + ] + }, + "3640": { + "op": "app_global_put", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0" + ] + }, + "3641": { + "op": "intc_1 // 1", + "defined_out": [ + "1" + ], + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0", + "1" + ] + }, + "3642": { + "op": "return", + "stack_out": [ + "aggregate%extract%2#0", + "aggregate%extract%3#0", + "aggregate%extract%4#0", + "box_prefixed_key%2#0", + "type#0", + "i#0", + "useRounds#0", + "escrow#0", + "allowances#0", + "aggregate%array_length%1#0" + ] + }, + "3643": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_removeAllowances[routing]", + "params": {}, + "block": "arc58_removeAllowances", + "stack_in": [], + "op": "bytec_1 // \"\"", + "stack_out": [ + "i#0" + ] + }, + "3644": { + "op": "txna ApplicationArgs 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "i#0", + "tmp%0#0" + ] + }, + "3647": { + "op": "dup", + "defined_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "i#0", + "tmp%0#0", + "tmp%0#0 (copy)" + ] + }, + "3648": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "i#0", + "tmp%0#0", + "tmp%0#0 (copy)", + "0" + ] + }, + "3649": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "i#0", + "tmp%0#0", + "aggregate%array_length%0#0" + ] + }, + "3650": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "aggregate%array_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "i#0", + "tmp%0#0", + "aggregate%array_length%0#0", + "2" + ] + }, + "3651": { + "op": "+", + "defined_out": [ + "add%0#0", + "tmp%0#0" + ], + "stack_out": [ + "i#0", + "tmp%0#0", + "add%0#0" + ] + }, + "3652": { + "op": "dig 1", + "stack_out": [ + "i#0", + "tmp%0#0", + "add%0#0", + "tmp%0#0 (copy)" + ] + }, + "3654": { + "op": "len", + "defined_out": [ + "add%0#0", + "len%0#0", + "tmp%0#0" + ], + "stack_out": [ + "i#0", + "tmp%0#0", + "add%0#0", + "len%0#0" + ] + }, + "3655": { + "op": "==", + "defined_out": [ + "eq%0#0", + "tmp%0#0" + ], + "stack_out": [ + "i#0", + "tmp%0#0", + "eq%0#0" + ] + }, + "3656": { + "error": "invalid number of bytes for (len+utf8[])", + "op": "assert // invalid number of bytes for (len+utf8[])", + "stack_out": [ + "i#0", + "tmp%0#0" + ] + }, + "3657": { + "op": "extract 2 0", + "defined_out": [ + "escrow#0" + ], + "stack_out": [ + "i#0", + "escrow#0" + ] + }, + "3660": { + "op": "dup", + "defined_out": [ + "escrow#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "escrow#0" + ] + }, + "3661": { + "op": "txna ApplicationArgs 2" + }, + "3664": { + "op": "dup", + "defined_out": [ + "assets#0", + "escrow#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "escrow#0", + "assets#0", + "assets#0" + ] + }, + "3665": { + "op": "cover 2", + "defined_out": [ + "assets#0", + "escrow#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "escrow#0", + "assets#0" + ] + }, + "3667": { + "op": "dup", + "defined_out": [ + "assets#0", + "assets#0 (copy)", + "escrow#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "escrow#0", + "assets#0", + "assets#0 (copy)" + ] + }, + "3668": { + "op": "intc_0 // 0", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "escrow#0", + "assets#0", + "assets#0 (copy)", + "0" + ] + }, + "3669": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0" + ] + }, + "3670": { + "op": "dup", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "aggregate%array_length%1#0" + ] + }, + "3671": { + "op": "cover 3", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0" + ] + }, + "3673": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "aggregate%array_length%1#0", + "assets#0", + "escrow#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "8" + ] + }, + "3674": { + "op": "*", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "mul%1#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrow#0", + "assets#0", + "mul%1#0" + ] + }, + "3675": { + "op": "intc_2 // 2", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrow#0", + "assets#0", + "mul%1#0", + "2" + ] + }, + "3676": { + "op": "+", + "defined_out": [ + "add%1#0", + "aggregate%array_length%1#0", + "assets#0", + "escrow#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrow#0", + "assets#0", + "add%1#0" + ] + }, + "3677": { + "op": "swap", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrow#0", + "add%1#0", + "assets#0" + ] + }, + "3678": { + "op": "len", + "defined_out": [ + "add%1#0", + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "len%1#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrow#0", + "add%1#0", + "len%1#0" + ] + }, + "3679": { + "op": "==", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "eq%1#0", + "escrow#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrow#0", + "eq%1#0" + ] + }, + "3680": { + "error": "invalid number of bytes for (len+uint64[])", + "op": "assert // invalid number of bytes for (len+uint64[])", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrow#0" + ] + }, + "3681": { + "op": "txn Sender", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "tmp%0#1" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrow#0", + "tmp%0#1" + ] + }, + "3683": { + "op": "intc_0 // 0", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrow#0", + "tmp%0#1", + "0" + ] + }, + "3684": { + "op": "bytec_2 // \"admin\"", + "defined_out": [ + "\"admin\"", + "0", + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "tmp%0#1" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrow#0", + "tmp%0#1", + "0", + "\"admin\"" + ] + }, + "3685": { + "op": "app_global_get_ex", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "maybe_exists%0#0", + "maybe_value%0#0", + "tmp%0#1" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrow#0", + "tmp%0#1", + "maybe_value%0#0", + "maybe_exists%0#0" + ] + }, + "3686": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrow#0", + "tmp%0#1", + "maybe_value%0#0" + ] + }, + "3687": { + "op": "==", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "tmp%1#1" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrow#0", + "tmp%1#1" + ] + }, + "3688": { + "error": "admin only", + "op": "assert // admin only", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrow#0" + ] + }, + "3689": { + "op": "bytec 5 // \"e\"", + "defined_out": [ + "\"e\"", + "aggregate%array_length%1#0", + "assets#0", + "escrow#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "escrow#0", + "\"e\"" + ] + }, + "3691": { + "op": "swap", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "\"e\"", + "escrow#0" + ] + }, + "3692": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "box_prefixed_key%0#0", + "escrow#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "box_prefixed_key%0#0" + ] + }, + "3693": { + "op": "dup", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "escrow#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)" + ] + }, + "3694": { + "op": "box_len", + "defined_out": [ + "_%0#0", + "aggregate%array_length%1#0", + "assets#0", + "box_prefixed_key%0#0", + "escrow#0", + "maybe_exists%1#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "box_prefixed_key%0#0", + "_%0#0", + "maybe_exists%1#0" + ] + }, + "3695": { + "op": "bury 1", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "box_prefixed_key%0#0", + "maybe_exists%1#0" + ] + }, + "3697": { + "error": "escrow does not exist", + "op": "assert // escrow does not exist", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "box_prefixed_key%0#0" + ] + }, + "3698": { + "op": "box_get", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%box_get%0#0", + "aggregate%box_get%1#0", + "assets#0", + "escrow#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "aggregate%box_get%0#0", + "aggregate%box_get%1#0" + ] + }, + "3699": { + "op": "pop", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "aggregate%box_get%0#0" + ] + }, + "3700": { + "op": "pushint 64 // 64", + "defined_out": [ + "64", + "aggregate%array_length%1#0", + "aggregate%box_get%0#0", + "assets#0", + "escrow#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "aggregate%box_get%0#0", + "64" + ] + }, + "3702": { + "op": "getbit", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%get_bit%0#0", + "assets#0", + "escrow#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "aggregate%get_bit%0#0" + ] + }, + "3703": { + "op": "!", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "tmp%2#1" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "tmp%2#1" + ] + }, + "3704": { + "error": "Escrow is locked", + "op": "assert // Escrow is locked", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0" + ] + }, + "3705": { + "op": "intc_0 // 0", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "0" + ] + }, + "3706": { + "op": "bytec_0 // \"controlled_address\"", + "defined_out": [ + "\"controlled_address\"", + "0", + "aggregate%array_length%1#0", + "assets#0", + "escrow#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "0", + "\"controlled_address\"" + ] + }, + "3707": { + "op": "app_global_get_ex", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "maybe_exists%2#0", + "maybe_value%1#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "maybe_value%1#0", + "maybe_exists%2#0" + ] + }, + "3708": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "maybe_value%1#0" + ] + }, + "3709": { + "op": "global CurrentApplicationAddress", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "maybe_value%1#0", + "tmp%3#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "maybe_value%1#0", + "tmp%3#0" + ] + }, + "3711": { + "op": "!=", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "tmp%4#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "tmp%4#0" + ] + }, + "3712": { + "op": "bz arc58_removeAllowances_after_if_else@4", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0" + ] + }, + "3715": { + "op": "itxn_begin" + }, + "3716": { + "op": "intc_0 // 0", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "0" + ] + }, + "3717": { + "op": "bytec_0 // \"controlled_address\"", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "0", + "\"controlled_address\"" + ] + }, + "3718": { + "op": "app_global_get_ex", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "maybe_exists%3#0", + "maybe_value%2#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "maybe_value%2#0", + "maybe_exists%3#0" + ] + }, + "3719": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "maybe_value%2#0" + ] + }, + "3720": { + "op": "dig 3", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "maybe_value%2#0", + "escrow#0" + ] + }, + "3722": { + "op": "len", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "maybe_value%2#0", + "tmp%0#2" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "maybe_value%2#0", + "tmp%0#2" + ] + }, + "3723": { + "op": "intc 4 // 400", + "defined_out": [ + "400", + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "maybe_value%2#0", + "tmp%0#2" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "maybe_value%2#0", + "tmp%0#2", + "400" + ] + }, + "3725": { + "op": "*", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "maybe_value%2#0", + "tmp%1#2" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "maybe_value%2#0", + "tmp%1#2" + ] + }, + "3726": { + "op": "intc 6 // 27700", + "defined_out": [ + "27700", + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "maybe_value%2#0", + "tmp%1#2" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "maybe_value%2#0", + "tmp%1#2", + "27700" + ] + }, + "3728": { + "op": "+", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "maybe_value%2#0", + "tmp%2#2" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "maybe_value%2#0", + "tmp%2#2" + ] + }, + "3729": { + "op": "dig 2", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "maybe_value%2#0", + "tmp%2#2", + "aggregate%array_length%1#0" + ] + }, + "3731": { + "op": "*", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "inner_txn_params%0%%param_Amount_idx_0#0", + "maybe_value%2#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "maybe_value%2#0", + "inner_txn_params%0%%param_Amount_idx_0#0" + ] + }, + "3732": { + "op": "itxn_field Amount", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "maybe_value%2#0" + ] + }, + "3734": { + "op": "itxn_field Receiver", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0" + ] + }, + "3736": { + "op": "intc_1 // 1", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "1" + ] + }, + "3737": { + "op": "itxn_field TypeEnum", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0" + ] + }, + "3739": { + "op": "intc_0 // 0", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "0" + ] + }, + "3740": { + "op": "itxn_field Fee", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0" + ] + }, + "3742": { + "op": "itxn_submit" + }, + "3743": { + "block": "arc58_removeAllowances_after_if_else@4", + "stack_in": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0" + ], + "op": "intc_0 // 0", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "i#0" + ] + }, + "3744": { + "op": "bury 4", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0" + ] + }, + "3746": { + "block": "arc58_removeAllowances_while_top@5", + "stack_in": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0" + ], + "op": "dig 3", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "i#0" + ] + }, + "3748": { + "op": "dig 1", + "defined_out": [ + "aggregate%array_length%1#0", + "i#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "i#0", + "aggregate%array_length%1#0" + ] + }, + "3750": { + "op": "<", + "defined_out": [ + "aggregate%array_length%1#0", + "i#0", + "tmp%8#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "tmp%8#0" + ] + }, + "3751": { + "op": "bz arc58_removeAllowances_after_while@7", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0" + ] + }, + "3754": { + "op": "dig 1", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "i#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "assets#0" + ] + }, + "3756": { + "op": "extract 2 0", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%array_trimmed%0#0", + "assets#0", + "i#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "aggregate%array_trimmed%0#0" + ] + }, + "3759": { + "op": "dig 4", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "aggregate%array_trimmed%0#0", + "i#0" + ] + }, + "3761": { + "op": "dup", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%array_trimmed%0#0", + "assets#0", + "i#0", + "i#0 (copy)" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "aggregate%array_trimmed%0#0", + "i#0 (copy)", + "i#0 (copy)" + ] + }, + "3762": { + "op": "cover 2", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "i#0", + "aggregate%array_trimmed%0#0", + "i#0 (copy)" + ] + }, + "3764": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "aggregate%array_length%1#0", + "aggregate%array_trimmed%0#0", + "assets#0", + "i#0", + "i#0 (copy)" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "i#0", + "aggregate%array_trimmed%0#0", + "i#0 (copy)", + "8" + ] + }, + "3765": { + "op": "*", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0", + "assets#0", + "i#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "i#0", + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0" + ] + }, + "3766": { + "op": "intc_3 // 8", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "i#0", + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0", + "8" + ] + }, + "3767": { + "error": "index access is out of bounds", + "op": "extract3 // on error: index access is out of bounds", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "assets#0", + "i#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "i#0", + "aggregate%encoded_element%0#0" + ] + }, + "3768": { + "op": "dig 4", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "assets#0", + "escrow#0", + "i#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "i#0", + "aggregate%encoded_element%0#0", + "escrow#0" + ] + }, + "3770": { + "op": "dup", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "assets#0", + "escrow#0", + "escrow#0 (copy)", + "i#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "i#0", + "aggregate%encoded_element%0#0", + "escrow#0", + "escrow#0 (copy)" + ] + }, + "3771": { + "op": "len", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%length%0#0", + "assets#0", + "escrow#0", + "i#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "i#0", + "aggregate%encoded_element%0#0", + "escrow#0", + "aggregate%length%0#0" + ] + }, + "3772": { + "op": "itob", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%as_bytes%0#0", + "aggregate%encoded_element%0#0", + "assets#0", + "escrow#0", + "i#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "i#0", + "aggregate%encoded_element%0#0", + "escrow#0", + "aggregate%as_bytes%0#0" + ] + }, + "3773": { + "op": "extract 6 2", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%length_uint16%0#0", + "assets#0", + "escrow#0", + "i#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "i#0", + "aggregate%encoded_element%0#0", + "escrow#0", + "aggregate%length_uint16%0#0" + ] + }, + "3776": { + "op": "swap", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "i#0", + "aggregate%encoded_element%0#0", + "aggregate%length_uint16%0#0", + "escrow#0" + ] + }, + "3777": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "assets#0", + "escrow#0", + "i#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "i#0", + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0" + ] + }, + "3778": { + "op": "bytec 13 // 0x000a", + "defined_out": [ + "0x000a", + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "assets#0", + "escrow#0", + "i#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "i#0", + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "0x000a" + ] + }, + "3780": { + "op": "uncover 2", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "i#0", + "aggregate%encoded_value%0#0", + "0x000a", + "aggregate%encoded_element%0#0" + ] + }, + "3782": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "aggregate%head%1#0", + "assets#0", + "escrow#0", + "i#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "i#0", + "aggregate%encoded_value%0#0", + "aggregate%head%1#0" + ] + }, + "3783": { + "op": "swap", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "i#0", + "aggregate%head%1#0", + "aggregate%encoded_value%0#0" + ] + }, + "3784": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "i#0", + "key#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "i#0", + "key#0" + ] + }, + "3785": { + "op": "bytec 14 // \"a\"", + "defined_out": [ + "\"a\"", + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "i#0", + "key#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "i#0", + "key#0", + "\"a\"" + ] + }, + "3787": { + "op": "swap", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "i#0", + "\"a\"", + "key#0" + ] + }, + "3788": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "box_prefixed_key%2#0", + "escrow#0", + "i#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "i#0", + "box_prefixed_key%2#0" + ] + }, + "3789": { + "op": "dup", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "box_prefixed_key%2#0", + "box_prefixed_key%2#0 (copy)", + "escrow#0", + "i#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "i#0", + "box_prefixed_key%2#0", + "box_prefixed_key%2#0 (copy)" + ] + }, + "3790": { + "op": "box_len", + "defined_out": [ + "_%1#0", + "aggregate%array_length%1#0", + "assets#0", + "box_prefixed_key%2#0", + "escrow#0", + "i#0", + "maybe_exists%4#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "i#0", + "box_prefixed_key%2#0", + "_%1#0", + "maybe_exists%4#0" + ] + }, + "3791": { + "op": "bury 1", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "i#0", + "box_prefixed_key%2#0", + "maybe_exists%4#0" + ] + }, + "3793": { + "error": "allowance does not exist", + "op": "assert // allowance does not exist", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "i#0", + "box_prefixed_key%2#0" + ] + }, + "3794": { + "op": "box_del", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "i#0", + "{box_del}" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "i#0", + "{box_del}" + ] + }, + "3795": { + "op": "pop", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "i#0" + ] + }, + "3796": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "i#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "i#0", + "1" + ] + }, + "3797": { + "op": "+", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "i#0" + ] + }, + "3798": { + "op": "bury 4", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "i#0" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0" + ] + }, + "3800": { + "op": "b arc58_removeAllowances_while_top@5" + }, + "3803": { + "block": "arc58_removeAllowances_after_while@7", + "stack_in": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0" + ], + "op": "bytec_3 // \"last_user_interaction\"", + "defined_out": [ + "\"last_user_interaction\"" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "\"last_user_interaction\"" + ] + }, + "3804": { + "op": "global LatestTimestamp", + "defined_out": [ + "\"last_user_interaction\"", + "tmp%0#2" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "\"last_user_interaction\"", + "tmp%0#2" + ] + }, + "3806": { + "op": "app_global_put", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0" + ] + }, + "3807": { + "op": "bytec 6 // \"last_change\"", + "defined_out": [ + "\"last_change\"" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "\"last_change\"" + ] + }, + "3809": { + "op": "global LatestTimestamp", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "\"last_change\"", + "tmp%0#2" + ] + }, + "3811": { + "op": "app_global_put", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0" + ] + }, + "3812": { + "op": "intc_1 // 1", + "defined_out": [ + "1" + ], + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "1" + ] + }, + "3813": { + "op": "return", + "stack_out": [ + "i#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0" + ] + }, + "3814": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_addExecutionKey[routing]", + "params": {}, + "block": "arc58_addExecutionKey", + "stack_in": [], + "op": "txna ApplicationArgs 1", + "defined_out": [ + "lease#0" + ], + "stack_out": [ + "lease#0" + ] + }, + "3817": { + "op": "dup", + "defined_out": [ + "lease#0", + "lease#0 (copy)" + ], + "stack_out": [ + "lease#0", + "lease#0 (copy)" + ] + }, + "3818": { + "op": "len", + "defined_out": [ + "lease#0", + "len%0#0" + ], + "stack_out": [ + "lease#0", + "len%0#0" + ] + }, + "3819": { + "op": "pushint 32 // 32", + "defined_out": [ + "32", + "lease#0", + "len%0#0" + ], + "stack_out": [ + "lease#0", + "len%0#0", + "32" + ] + }, + "3821": { + "op": "==", + "defined_out": [ + "eq%0#0", + "lease#0" + ], + "stack_out": [ + "lease#0", + "eq%0#0" + ] + }, + "3822": { + "error": "invalid number of bytes for uint8[32]", + "op": "assert // invalid number of bytes for uint8[32]", + "stack_out": [ + "lease#0" + ] + }, + "3823": { + "op": "txna ApplicationArgs 2" + }, + "3826": { + "op": "dup", + "defined_out": [ + "groups#0", + "lease#0" + ], + "stack_out": [ + "lease#0", + "groups#0", + "groups#0" + ] + }, + "3827": { + "op": "cover 2", + "defined_out": [ + "groups#0", + "lease#0" + ], + "stack_out": [ + "groups#0", + "lease#0", + "groups#0" + ] + }, + "3829": { + "op": "dup", + "defined_out": [ + "groups#0", + "groups#0 (copy)", + "lease#0" + ], + "stack_out": [ + "groups#0", + "lease#0", + "groups#0", + "groups#0 (copy)" + ] + }, + "3830": { + "op": "intc_0 // 0", + "stack_out": [ + "groups#0", + "lease#0", + "groups#0", + "groups#0 (copy)", + "0" + ] + }, + "3831": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%0#0", + "groups#0", + "lease#0" + ], + "stack_out": [ + "groups#0", + "lease#0", + "groups#0", + "aggregate%array_length%0#0" + ] + }, + "3832": { + "op": "pushint 32 // 32", + "stack_out": [ + "groups#0", + "lease#0", + "groups#0", + "aggregate%array_length%0#0", + "32" + ] + }, + "3834": { + "op": "*", + "defined_out": [ + "groups#0", + "lease#0", + "mul%0#0" + ], + "stack_out": [ + "groups#0", + "lease#0", + "groups#0", + "mul%0#0" + ] + }, + "3835": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "groups#0", + "lease#0", + "mul%0#0" + ], + "stack_out": [ + "groups#0", + "lease#0", + "groups#0", + "mul%0#0", + "2" + ] + }, + "3836": { + "op": "+", + "defined_out": [ + "add%0#0", + "groups#0", + "lease#0" + ], + "stack_out": [ + "groups#0", + "lease#0", + "groups#0", + "add%0#0" + ] + }, + "3837": { + "op": "swap", + "stack_out": [ + "groups#0", + "lease#0", + "add%0#0", + "groups#0" + ] + }, + "3838": { + "op": "len", + "defined_out": [ + "add%0#0", + "groups#0", + "lease#0", + "len%1#0" + ], + "stack_out": [ + "groups#0", + "lease#0", + "add%0#0", + "len%1#0" + ] + }, + "3839": { + "op": "==", + "defined_out": [ + "eq%1#0", + "groups#0", + "lease#0" + ], + "stack_out": [ + "groups#0", + "lease#0", + "eq%1#0" + ] + }, + "3840": { + "error": "invalid number of bytes for (len+uint8[32][])", + "op": "assert // invalid number of bytes for (len+uint8[32][])", + "stack_out": [ + "groups#0", + "lease#0" + ] + }, + "3841": { + "op": "txna ApplicationArgs 3", + "defined_out": [ + "groups#0", + "lease#0", + "tmp%3#0" + ], + "stack_out": [ + "groups#0", + "lease#0", + "tmp%3#0" + ] + }, + "3844": { + "op": "dup", + "defined_out": [ + "groups#0", + "lease#0", + "tmp%3#0", + "tmp%3#0 (copy)" + ], + "stack_out": [ + "groups#0", + "lease#0", + "tmp%3#0", + "tmp%3#0 (copy)" + ] + }, + "3845": { + "op": "len", + "defined_out": [ + "groups#0", + "lease#0", + "len%2#0", + "tmp%3#0" + ], + "stack_out": [ + "groups#0", + "lease#0", + "tmp%3#0", + "len%2#0" + ] + }, + "3846": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "groups#0", + "lease#0", + "len%2#0", + "tmp%3#0" + ], + "stack_out": [ + "groups#0", + "lease#0", + "tmp%3#0", + "len%2#0", + "8" + ] + }, + "3847": { + "op": "==", + "defined_out": [ + "eq%2#0", + "groups#0", + "lease#0", + "tmp%3#0" + ], + "stack_out": [ + "groups#0", + "lease#0", + "tmp%3#0", + "eq%2#0" + ] + }, + "3848": { + "error": "invalid number of bytes for uint64", + "op": "assert // invalid number of bytes for uint64", + "stack_out": [ + "groups#0", + "lease#0", + "tmp%3#0" + ] + }, + "3849": { + "op": "btoi", + "defined_out": [ + "firstValid#0", + "groups#0", + "lease#0" + ], + "stack_out": [ + "groups#0", + "lease#0", + "firstValid#0" + ] + }, + "3850": { + "op": "cover 2", + "defined_out": [ + "firstValid#0", + "groups#0", + "lease#0" + ], + "stack_out": [ + "firstValid#0", + "groups#0", + "lease#0" + ] + }, + "3852": { + "op": "txna ApplicationArgs 4", + "defined_out": [ + "firstValid#0", + "groups#0", + "lease#0", + "tmp%5#0" + ], + "stack_out": [ + "firstValid#0", + "groups#0", + "lease#0", + "tmp%5#0" + ] + }, + "3855": { + "op": "dup", + "defined_out": [ + "firstValid#0", + "groups#0", + "lease#0", + "tmp%5#0", + "tmp%5#0 (copy)" + ], + "stack_out": [ + "firstValid#0", + "groups#0", + "lease#0", + "tmp%5#0", + "tmp%5#0 (copy)" + ] + }, + "3856": { + "op": "len", + "defined_out": [ + "firstValid#0", + "groups#0", + "lease#0", + "len%3#0", + "tmp%5#0" + ], + "stack_out": [ + "firstValid#0", + "groups#0", + "lease#0", + "tmp%5#0", + "len%3#0" + ] + }, + "3857": { + "op": "intc_3 // 8", + "stack_out": [ + "firstValid#0", + "groups#0", + "lease#0", + "tmp%5#0", + "len%3#0", + "8" + ] + }, + "3858": { + "op": "==", + "defined_out": [ + "eq%3#0", + "firstValid#0", + "groups#0", + "lease#0", + "tmp%5#0" + ], + "stack_out": [ + "firstValid#0", + "groups#0", + "lease#0", + "tmp%5#0", + "eq%3#0" + ] + }, + "3859": { + "error": "invalid number of bytes for uint64", + "op": "assert // invalid number of bytes for uint64", + "stack_out": [ + "firstValid#0", + "groups#0", + "lease#0", + "tmp%5#0" + ] + }, + "3860": { + "op": "btoi", + "defined_out": [ + "firstValid#0", + "groups#0", + "lastValid#0", + "lease#0" + ], + "stack_out": [ + "firstValid#0", + "groups#0", + "lease#0", + "lastValid#0" + ] + }, + "3861": { + "op": "cover 2", + "stack_out": [ + "firstValid#0", + "lastValid#0", + "groups#0", + "lease#0" + ] + }, + "3863": { + "op": "txn Sender", + "defined_out": [ + "firstValid#0", + "groups#0", + "lastValid#0", + "lease#0", + "tmp%0#1" + ], + "stack_out": [ + "firstValid#0", + "lastValid#0", + "groups#0", + "lease#0", + "tmp%0#1" + ] + }, + "3865": { + "op": "intc_0 // 0", + "stack_out": [ + "firstValid#0", + "lastValid#0", + "groups#0", + "lease#0", + "tmp%0#1", + "0" + ] + }, + "3866": { + "op": "bytec_2 // \"admin\"", + "defined_out": [ + "\"admin\"", + "0", + "firstValid#0", + "groups#0", + "lastValid#0", + "lease#0", + "tmp%0#1" + ], + "stack_out": [ + "firstValid#0", + "lastValid#0", + "groups#0", + "lease#0", + "tmp%0#1", + "0", + "\"admin\"" + ] + }, + "3867": { + "op": "app_global_get_ex", + "defined_out": [ + "firstValid#0", + "groups#0", + "lastValid#0", + "lease#0", + "maybe_exists%0#0", + "maybe_value%0#0", + "tmp%0#1" + ], + "stack_out": [ + "firstValid#0", + "lastValid#0", + "groups#0", + "lease#0", + "tmp%0#1", + "maybe_value%0#0", + "maybe_exists%0#0" + ] + }, + "3868": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "firstValid#0", + "lastValid#0", + "groups#0", + "lease#0", + "tmp%0#1", + "maybe_value%0#0" + ] + }, + "3869": { + "op": "==", + "defined_out": [ + "firstValid#0", + "groups#0", + "lastValid#0", + "lease#0", + "tmp%1#1" + ], + "stack_out": [ + "firstValid#0", + "lastValid#0", + "groups#0", + "lease#0", + "tmp%1#1" + ] + }, + "3870": { + "error": "admin only", + "op": "assert // admin only", + "stack_out": [ + "firstValid#0", + "lastValid#0", + "groups#0", + "lease#0" + ] + }, + "3871": { + "op": "bytec 8 // \"x\"", + "defined_out": [ + "\"x\"", + "firstValid#0", + "groups#0", + "lastValid#0", + "lease#0" + ], + "stack_out": [ + "firstValid#0", + "lastValid#0", + "groups#0", + "lease#0", + "\"x\"" + ] + }, + "3873": { + "op": "swap", + "stack_out": [ + "firstValid#0", + "lastValid#0", + "groups#0", + "\"x\"", + "lease#0" + ] + }, + "3874": { + "op": "concat", + "defined_out": [ + "box_prefixed_key%0#0", + "firstValid#0", + "groups#0", + "lastValid#0" + ], + "stack_out": [ + "firstValid#0", + "lastValid#0", + "groups#0", + "box_prefixed_key%0#0" + ] + }, + "3875": { + "op": "dup", + "stack_out": [ + "firstValid#0", + "lastValid#0", + "groups#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0" + ] + }, + "3876": { + "op": "cover 3", + "defined_out": [ + "box_prefixed_key%0#0", + "firstValid#0", + "groups#0", + "lastValid#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "lastValid#0", + "groups#0", + "box_prefixed_key%0#0" + ] + }, + "3878": { + "op": "box_len", + "defined_out": [ + "_%0#0", + "box_prefixed_key%0#0", + "firstValid#0", + "groups#0", + "lastValid#0", + "maybe_exists%1#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "lastValid#0", + "groups#0", + "_%0#0", + "maybe_exists%1#0" + ] + }, + "3879": { + "op": "bury 1", + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "lastValid#0", + "groups#0", + "maybe_exists%1#0" + ] + }, + "3881": { + "op": "bnz arc58_addExecutionKey_else_body@3", + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "lastValid#0", + "groups#0" + ] + }, + "3884": { + "op": "dig 3", + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "lastValid#0", + "groups#0", + "firstValid#0" + ] + }, + "3886": { + "op": "itob", + "defined_out": [ + "aggregate%val_as_bytes%0#0", + "box_prefixed_key%0#0", + "firstValid#0", + "groups#0", + "lastValid#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "lastValid#0", + "groups#0", + "aggregate%val_as_bytes%0#0" + ] + }, + "3887": { + "op": "pushbytes 0x0012", + "defined_out": [ + "0x0012", + "aggregate%val_as_bytes%0#0", + "box_prefixed_key%0#0", + "firstValid#0", + "groups#0", + "lastValid#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "lastValid#0", + "groups#0", + "aggregate%val_as_bytes%0#0", + "0x0012" + ] + }, + "3891": { + "op": "swap", + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "lastValid#0", + "groups#0", + "0x0012", + "aggregate%val_as_bytes%0#0" + ] + }, + "3892": { + "op": "concat", + "defined_out": [ + "aggregate%head%1#0", + "box_prefixed_key%0#0", + "firstValid#0", + "groups#0", + "lastValid#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "lastValid#0", + "groups#0", + "aggregate%head%1#0" + ] + }, + "3893": { + "op": "uncover 2", + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "groups#0", + "aggregate%head%1#0", + "lastValid#0" + ] + }, + "3895": { + "op": "itob", + "defined_out": [ + "aggregate%head%1#0", + "aggregate%val_as_bytes%1#0", + "box_prefixed_key%0#0", + "firstValid#0", + "groups#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "groups#0", + "aggregate%head%1#0", + "aggregate%val_as_bytes%1#0" + ] + }, + "3896": { + "op": "concat", + "defined_out": [ + "aggregate%head%2#0", + "box_prefixed_key%0#0", + "firstValid#0", + "groups#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "groups#0", + "aggregate%head%2#0" + ] + }, + "3897": { + "op": "swap", + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "aggregate%head%2#0", + "groups#0" + ] + }, + "3898": { + "op": "concat", + "defined_out": [ + "aggregate%concat%0#0", + "box_prefixed_key%0#0", + "firstValid#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "aggregate%concat%0#0" + ] + }, + "3899": { + "op": "dig 1", + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "aggregate%concat%0#0", + "box_prefixed_key%0#0" + ] + }, + "3901": { + "op": "dup", + "defined_out": [ + "aggregate%concat%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "firstValid#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "aggregate%concat%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)" + ] + }, + "3902": { + "op": "box_del", + "defined_out": [ + "aggregate%concat%0#0", + "box_prefixed_key%0#0", + "firstValid#0", + "{box_del}" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "aggregate%concat%0#0", + "box_prefixed_key%0#0", + "{box_del}" + ] + }, + "3903": { + "op": "pop", + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "aggregate%concat%0#0", + "box_prefixed_key%0#0" + ] + }, + "3904": { + "op": "swap", + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "aggregate%concat%0#0" + ] + }, + "3905": { + "op": "box_put", + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0" + ] + }, + "3906": { + "block": "arc58_addExecutionKey_after_if_else@4", + "stack_in": [ + "firstValid#0", + "box_prefixed_key%0#0" + ], + "op": "bytec_3 // \"last_user_interaction\"", + "defined_out": [ + "\"last_user_interaction\"" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "\"last_user_interaction\"" + ] + }, + "3907": { + "op": "global LatestTimestamp", + "defined_out": [ + "\"last_user_interaction\"", + "tmp%0#2" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "\"last_user_interaction\"", + "tmp%0#2" + ] + }, + "3909": { + "op": "app_global_put", + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0" + ] + }, + "3910": { + "op": "bytec 6 // \"last_change\"", + "defined_out": [ + "\"last_change\"" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "\"last_change\"" + ] + }, + "3912": { + "op": "global LatestTimestamp", + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "\"last_change\"", + "tmp%0#2" + ] + }, + "3914": { + "op": "app_global_put", + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0" + ] + }, + "3915": { + "op": "intc_1 // 1", + "defined_out": [ + "1" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "1" + ] + }, + "3916": { + "op": "return", + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0" + ] + }, + "3917": { + "block": "arc58_addExecutionKey_else_body@3", + "stack_in": [ + "firstValid#0", + "box_prefixed_key%0#0", + "lastValid#0", + "groups#0" + ], + "op": "dig 2", + "defined_out": [ + "box_prefixed_key%0#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "lastValid#0", + "groups#0", + "box_prefixed_key%0#0" + ] + }, + "3919": { + "op": "dup", + "defined_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "lastValid#0", + "groups#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)" + ] + }, + "3920": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "lastValid#0", + "groups#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "2" + ] + }, + "3921": { + "op": "intc_3 // 8", + "defined_out": [ + "2", + "8", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "lastValid#0", + "groups#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "2", + "8" + ] + }, + "3922": { + "op": "box_extract", + "defined_out": [ + "box%box_extract%0#0", + "box_prefixed_key%0#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "lastValid#0", + "groups#0", + "box_prefixed_key%0#0", + "box%box_extract%0#0" + ] + }, + "3923": { + "op": "btoi", + "defined_out": [ + "box_prefixed_key%0#0", + "values%0#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "lastValid#0", + "groups#0", + "box_prefixed_key%0#0", + "values%0#0" + ] + }, + "3924": { + "op": "dig 5", + "defined_out": [ + "box_prefixed_key%0#0", + "firstValid#0", + "values%0#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "lastValid#0", + "groups#0", + "box_prefixed_key%0#0", + "values%0#0", + "firstValid#0" + ] + }, + "3926": { + "op": "==", + "defined_out": [ + "box_prefixed_key%0#0", + "firstValid#0", + "tmp%3#1" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "lastValid#0", + "groups#0", + "box_prefixed_key%0#0", + "tmp%3#1" + ] + }, + "3927": { + "error": "execution key update must match first valid", + "op": "assert // execution key update must match first valid", + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "lastValid#0", + "groups#0", + "box_prefixed_key%0#0" + ] + }, + "3928": { + "op": "dup", + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "lastValid#0", + "groups#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)" + ] + }, + "3929": { + "op": "pushint 10 // 10", + "defined_out": [ + "10", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "firstValid#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "lastValid#0", + "groups#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "10" + ] + }, + "3931": { + "op": "intc_3 // 8", + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "lastValid#0", + "groups#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "10", + "8" + ] + }, + "3932": { + "op": "box_extract", + "defined_out": [ + "box%box_extract%1#0", + "box_prefixed_key%0#0", + "firstValid#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "lastValid#0", + "groups#0", + "box_prefixed_key%0#0", + "box%box_extract%1#0" + ] + }, + "3933": { + "op": "btoi", + "defined_out": [ + "box_prefixed_key%0#0", + "firstValid#0", + "values%1#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "lastValid#0", + "groups#0", + "box_prefixed_key%0#0", + "values%1#0" + ] + }, + "3934": { + "op": "uncover 3", + "defined_out": [ + "box_prefixed_key%0#0", + "firstValid#0", + "lastValid#0", + "values%1#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "groups#0", + "box_prefixed_key%0#0", + "values%1#0", + "lastValid#0" + ] + }, + "3936": { + "op": "==", + "defined_out": [ + "box_prefixed_key%0#0", + "firstValid#0", + "tmp%4#1" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "groups#0", + "box_prefixed_key%0#0", + "tmp%4#1" + ] + }, + "3937": { + "error": "execution key update must match last valid", + "op": "assert // execution key update must match last valid", + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "groups#0", + "box_prefixed_key%0#0" + ] + }, + "3938": { + "op": "dup", + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "groups#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)" + ] + }, + "3939": { + "op": "box_get", + "defined_out": [ + "aggregate%box_get%0#0", + "aggregate%box_get%1#0", + "box_prefixed_key%0#0", + "firstValid#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "groups#0", + "box_prefixed_key%0#0", + "aggregate%box_get%0#0", + "aggregate%box_get%1#0" + ] + }, + "3940": { + "op": "pop", + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "groups#0", + "box_prefixed_key%0#0", + "aggregate%box_get%0#0" + ] + }, + "3941": { + "op": "dup", + "defined_out": [ + "aggregate%box_get%0#0", + "aggregate%box_get%0#0 (copy)", + "box_prefixed_key%0#0", + "firstValid#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "groups#0", + "box_prefixed_key%0#0", + "aggregate%box_get%0#0", + "aggregate%box_get%0#0 (copy)" + ] + }, + "3942": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "aggregate%box_get%0#0", + "aggregate%box_get%0#0 (copy)", + "box_prefixed_key%0#0", + "firstValid#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "groups#0", + "box_prefixed_key%0#0", + "aggregate%box_get%0#0", + "aggregate%box_get%0#0 (copy)", + "0" + ] + }, + "3943": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%box_get%0#0", + "aggregate%extract_uint16%0#0", + "box_prefixed_key%0#0", + "firstValid#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "groups#0", + "box_prefixed_key%0#0", + "aggregate%box_get%0#0", + "aggregate%extract_uint16%0#0" + ] + }, + "3944": { + "op": "dig 1", + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "groups#0", + "box_prefixed_key%0#0", + "aggregate%box_get%0#0", + "aggregate%extract_uint16%0#0", + "aggregate%box_get%0#0 (copy)" + ] + }, + "3946": { + "op": "len", + "defined_out": [ + "aggregate%box_get%0#0", + "aggregate%extract_uint16%0#0", + "aggregate%len%0#0", + "box_prefixed_key%0#0", + "firstValid#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "groups#0", + "box_prefixed_key%0#0", + "aggregate%box_get%0#0", + "aggregate%extract_uint16%0#0", + "aggregate%len%0#0" + ] + }, + "3947": { + "op": "dig 2", + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "groups#0", + "box_prefixed_key%0#0", + "aggregate%box_get%0#0", + "aggregate%extract_uint16%0#0", + "aggregate%len%0#0", + "aggregate%box_get%0#0 (copy)" + ] + }, + "3949": { + "op": "dig 2", + "defined_out": [ + "aggregate%box_get%0#0", + "aggregate%box_get%0#0 (copy)", + "aggregate%extract_uint16%0#0", + "aggregate%extract_uint16%0#0 (copy)", + "aggregate%len%0#0", + "box_prefixed_key%0#0", + "firstValid#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "groups#0", + "box_prefixed_key%0#0", + "aggregate%box_get%0#0", + "aggregate%extract_uint16%0#0", + "aggregate%len%0#0", + "aggregate%box_get%0#0 (copy)", + "aggregate%extract_uint16%0#0 (copy)" + ] + }, + "3951": { + "op": "uncover 2", + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "groups#0", + "box_prefixed_key%0#0", + "aggregate%box_get%0#0", + "aggregate%extract_uint16%0#0", + "aggregate%box_get%0#0 (copy)", + "aggregate%extract_uint16%0#0 (copy)", + "aggregate%len%0#0" + ] + }, + "3953": { + "op": "substring3", + "defined_out": [ + "aggregate%box_get%0#0", + "aggregate%extract_uint16%0#0", + "aggregate%substring3%0#0", + "box_prefixed_key%0#0", + "firstValid#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "groups#0", + "box_prefixed_key%0#0", + "aggregate%box_get%0#0", + "aggregate%extract_uint16%0#0", + "aggregate%substring3%0#0" + ] + }, + "3954": { + "op": "uncover 4", + "defined_out": [ + "aggregate%box_get%0#0", + "aggregate%extract_uint16%0#0", + "aggregate%substring3%0#0", + "box_prefixed_key%0#0", + "firstValid#0", + "groups#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "aggregate%box_get%0#0", + "aggregate%extract_uint16%0#0", + "aggregate%substring3%0#0", + "groups#0" + ] + }, + "3956": { + "op": "extract 2 0", + "defined_out": [ + "aggregate%box_get%0#0", + "aggregate%extract_uint16%0#0", + "aggregate%substring3%0#0", + "box_prefixed_key%0#0", + "extract_to_end%0#0", + "firstValid#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "aggregate%box_get%0#0", + "aggregate%extract_uint16%0#0", + "aggregate%substring3%0#0", + "extract_to_end%0#0" + ] + }, + "3959": { + "error": "max array length exceeded", + "op": "concat // on error: max array length exceeded", + "defined_out": [ + "aggregate%box_get%0#0", + "aggregate%extract_uint16%0#0", + "box_prefixed_key%0#0", + "concat%0#0", + "firstValid#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "aggregate%box_get%0#0", + "aggregate%extract_uint16%0#0", + "concat%0#0" + ] + }, + "3960": { + "op": "dup", + "defined_out": [ + "aggregate%box_get%0#0", + "aggregate%extract_uint16%0#0", + "box_prefixed_key%0#0", + "concat%0#0", + "concat%0#0 (copy)", + "firstValid#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "aggregate%box_get%0#0", + "aggregate%extract_uint16%0#0", + "concat%0#0", + "concat%0#0 (copy)" + ] + }, + "3961": { + "op": "extract 2 0", + "defined_out": [ + "aggregate%box_get%0#0", + "aggregate%extract_uint16%0#0", + "box_prefixed_key%0#0", + "concat%0#0", + "extract_to_end%1#0", + "firstValid#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "aggregate%box_get%0#0", + "aggregate%extract_uint16%0#0", + "concat%0#0", + "extract_to_end%1#0" + ] + }, + "3964": { + "op": "len", + "defined_out": [ + "aggregate%box_get%0#0", + "aggregate%extract_uint16%0#0", + "box_prefixed_key%0#0", + "concat%0#0", + "firstValid#0", + "len%0#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "aggregate%box_get%0#0", + "aggregate%extract_uint16%0#0", + "concat%0#0", + "len%0#0" + ] + }, + "3965": { + "op": "pushint 32 // 32", + "defined_out": [ + "32", + "aggregate%box_get%0#0", + "aggregate%extract_uint16%0#0", + "box_prefixed_key%0#0", + "concat%0#0", + "firstValid#0", + "len%0#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "aggregate%box_get%0#0", + "aggregate%extract_uint16%0#0", + "concat%0#0", + "len%0#0", + "32" + ] + }, + "3967": { + "op": "/", + "defined_out": [ + "aggregate%box_get%0#0", + "aggregate%extract_uint16%0#0", + "box_prefixed_key%0#0", + "concat%0#0", + "div_floor%0#0", + "firstValid#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "aggregate%box_get%0#0", + "aggregate%extract_uint16%0#0", + "concat%0#0", + "div_floor%0#0" + ] + }, + "3968": { + "op": "itob", + "defined_out": [ + "aggregate%box_get%0#0", + "aggregate%extract_uint16%0#0", + "as_bytes%0#0", + "box_prefixed_key%0#0", + "concat%0#0", + "firstValid#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "aggregate%box_get%0#0", + "aggregate%extract_uint16%0#0", + "concat%0#0", + "as_bytes%0#0" + ] + }, + "3969": { + "op": "extract 6 2", + "defined_out": [ + "aggregate%box_get%0#0", + "aggregate%extract_uint16%0#0", + "as_u16_bytes%0#0", + "box_prefixed_key%0#0", + "concat%0#0", + "firstValid#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "aggregate%box_get%0#0", + "aggregate%extract_uint16%0#0", + "concat%0#0", + "as_u16_bytes%0#0" + ] + }, + "3972": { + "op": "replace2 0", + "defined_out": [ + "aggregate%box_get%0#0", + "aggregate%extract_uint16%0#0", + "box_prefixed_key%0#0", + "firstValid#0", + "replace%0#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "aggregate%box_get%0#0", + "aggregate%extract_uint16%0#0", + "replace%0#0" + ] + }, + "3974": { + "op": "uncover 2", + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "aggregate%extract_uint16%0#0", + "replace%0#0", + "aggregate%box_get%0#0" + ] + }, + "3976": { + "op": "intc_0 // 0", + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "aggregate%extract_uint16%0#0", + "replace%0#0", + "aggregate%box_get%0#0", + "0" + ] + }, + "3977": { + "op": "uncover 3", + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "replace%0#0", + "aggregate%box_get%0#0", + "0", + "aggregate%extract_uint16%0#0" + ] + }, + "3979": { + "op": "extract3", + "defined_out": [ + "aggregate%data_up_to_item%0#0", + "box_prefixed_key%0#0", + "firstValid#0", + "replace%0#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "replace%0#0", + "aggregate%data_up_to_item%0#0" + ] + }, + "3980": { + "op": "swap", + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "aggregate%data_up_to_item%0#0", + "replace%0#0" + ] + }, + "3981": { + "op": "concat", + "defined_out": [ + "aggregate%updated_data%0#0", + "box_prefixed_key%0#0", + "firstValid#0" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "aggregate%updated_data%0#0" + ] + }, + "3982": { + "op": "dig 1", + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "aggregate%updated_data%0#0", + "box_prefixed_key%0#0 (copy)" + ] + }, + "3984": { + "op": "box_del", + "defined_out": [ + "aggregate%updated_data%0#0", + "box_prefixed_key%0#0", + "firstValid#0", + "{box_del}" + ], + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "aggregate%updated_data%0#0", + "{box_del}" + ] + }, + "3985": { + "op": "pop", + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "aggregate%updated_data%0#0" + ] + }, + "3986": { + "op": "box_put", + "stack_out": [ + "firstValid#0", + "box_prefixed_key%0#0" + ] + }, + "3987": { + "op": "b arc58_addExecutionKey_after_if_else@4" + }, + "3990": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_removeExecutionKey[routing]", + "params": {}, + "block": "arc58_removeExecutionKey", + "stack_in": [], + "op": "txna ApplicationArgs 1", + "defined_out": [ + "lease#0" + ], + "stack_out": [ + "lease#0" + ] + }, + "3993": { + "op": "dup", + "defined_out": [ + "lease#0", + "lease#0 (copy)" + ], + "stack_out": [ + "lease#0", + "lease#0 (copy)" + ] + }, + "3994": { + "op": "len", + "defined_out": [ + "lease#0", + "len%0#0" + ], + "stack_out": [ + "lease#0", + "len%0#0" + ] + }, + "3995": { + "op": "pushint 32 // 32", + "defined_out": [ + "32", + "lease#0", + "len%0#0" + ], + "stack_out": [ + "lease#0", + "len%0#0", + "32" + ] + }, + "3997": { + "op": "==", + "defined_out": [ + "eq%0#0", + "lease#0" + ], + "stack_out": [ + "lease#0", + "eq%0#0" + ] + }, + "3998": { + "error": "invalid number of bytes for uint8[32]", + "op": "assert // invalid number of bytes for uint8[32]", + "stack_out": [ + "lease#0" + ] + }, + "3999": { + "op": "bytec 8 // \"x\"", + "defined_out": [ + "\"x\"", + "lease#0" + ], + "stack_out": [ + "lease#0", + "\"x\"" + ] + }, + "4001": { + "op": "swap", + "stack_out": [ + "\"x\"", + "lease#0" + ] + }, + "4002": { + "op": "concat", + "defined_out": [ + "box_prefixed_key%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0" + ] + }, + "4003": { + "op": "dup", + "defined_out": [ + "box_prefixed_key%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%0#0" + ] + }, + "4004": { + "op": "box_len", + "defined_out": [ + "_%0#0", + "box_prefixed_key%0#0", + "maybe_exists%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "_%0#0", + "maybe_exists%0#0" + ] + }, + "4005": { + "op": "bury 1", + "stack_out": [ + "box_prefixed_key%0#0", + "maybe_exists%0#0" + ] + }, + "4007": { + "error": "execution key does not exist", + "op": "assert // execution key does not exist", + "stack_out": [ + "box_prefixed_key%0#0" + ] + }, + "4008": { + "op": "txn Sender", + "defined_out": [ + "box_prefixed_key%0#0", + "tmp%0#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%0#1" + ] + }, + "4010": { + "op": "intc_0 // 0", + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%0#1", + "0" + ] + }, + "4011": { + "op": "bytec_2 // \"admin\"", + "defined_out": [ + "\"admin\"", + "0", + "box_prefixed_key%0#0", + "tmp%0#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%0#1", + "0", + "\"admin\"" + ] + }, + "4012": { + "op": "app_global_get_ex", + "defined_out": [ + "box_prefixed_key%0#0", + "maybe_exists%1#0", + "maybe_value%0#0", + "tmp%0#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%0#1", + "maybe_value%0#0", + "maybe_exists%1#0" + ] + }, + "4013": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%0#1", + "maybe_value%0#0" + ] + }, + "4014": { + "op": "==", + "defined_out": [ + "box_prefixed_key%0#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1" + ] + }, + "4015": { + "op": "bnz arc58_removeExecutionKey_bool_true@3", + "stack_out": [ + "box_prefixed_key%0#0" + ] + }, + "4018": { + "op": "dup", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%0#0" + ] + }, + "4019": { + "op": "pushint 10 // 10", + "defined_out": [ + "10", + "box_prefixed_key%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "10" + ] + }, + "4021": { + "op": "intc_3 // 8", + "defined_out": [ + "10", + "8", + "box_prefixed_key%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "10", + "8" + ] + }, + "4022": { + "op": "box_extract", + "defined_out": [ + "box%box_extract%0#0", + "box_prefixed_key%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box%box_extract%0#0" + ] + }, + "4023": { + "op": "btoi", + "defined_out": [ + "box_prefixed_key%0#0", + "values%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "values%0#0" + ] + }, + "4024": { + "op": "global Round", + "defined_out": [ + "box_prefixed_key%0#0", + "tmp%2#0", + "values%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "values%0#0", + "tmp%2#0" + ] + }, + "4026": { + "op": "<", + "defined_out": [ + "box_prefixed_key%0#0", + "tmp%3#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%3#0" + ] + }, + "4027": { + "op": "bz arc58_removeExecutionKey_bool_false@4", + "stack_out": [ + "box_prefixed_key%0#0" + ] + }, + "4030": { + "block": "arc58_removeExecutionKey_bool_true@3", + "stack_in": [ + "box_prefixed_key%0#0" + ], + "op": "intc_1 // 1", + "defined_out": [ + "or_result%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "or_result%0#0" + ] + }, + "4031": { + "error": "admin only", + "block": "arc58_removeExecutionKey_bool_merge@5", + "stack_in": [ + "box_prefixed_key%0#0", + "or_result%0#0" + ], + "op": "assert // admin only", + "defined_out": [], + "stack_out": [ + "box_prefixed_key%0#0" + ] + }, + "4032": { + "op": "dup", + "defined_out": [ + "box_prefixed_key%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%0#0" + ] + }, + "4033": { + "op": "box_del", + "defined_out": [ + "box_prefixed_key%0#0", + "{box_del}" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "{box_del}" + ] + }, + "4034": { + "op": "pop", + "stack_out": [ + "box_prefixed_key%0#0" + ] + }, + "4035": { + "op": "bytec_3 // \"last_user_interaction\"", + "defined_out": [ + "\"last_user_interaction\"", + "box_prefixed_key%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "\"last_user_interaction\"" + ] + }, + "4036": { + "op": "global LatestTimestamp", + "defined_out": [ + "\"last_user_interaction\"", + "box_prefixed_key%0#0", + "tmp%0#2" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "\"last_user_interaction\"", + "tmp%0#2" + ] + }, + "4038": { + "op": "app_global_put", + "stack_out": [ + "box_prefixed_key%0#0" + ] + }, + "4039": { + "op": "bytec 6 // \"last_change\"", + "defined_out": [ + "\"last_change\"", + "box_prefixed_key%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "\"last_change\"" + ] + }, + "4041": { + "op": "global LatestTimestamp", + "stack_out": [ + "box_prefixed_key%0#0", + "\"last_change\"", + "tmp%0#2" + ] + }, + "4043": { + "op": "app_global_put", + "stack_out": [ + "box_prefixed_key%0#0" + ] + }, + "4044": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "box_prefixed_key%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "1" + ] + }, + "4045": { + "op": "return", + "stack_out": [ + "box_prefixed_key%0#0" + ] + }, + "4046": { + "block": "arc58_removeExecutionKey_bool_false@4", + "stack_in": [ + "box_prefixed_key%0#0" + ], + "op": "intc_0 // 0", + "defined_out": [ + "or_result%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "or_result%0#0" + ] + }, + "4047": { + "op": "b arc58_removeExecutionKey_bool_merge@5" + }, + "4050": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_getPlugins[routing]", + "params": {}, + "block": "arc58_getPlugins", + "stack_in": [], + "op": "intc_0 // 0", + "stack_out": [ + "box_prefixed_key%0#0" + ] + }, + "4051": { + "op": "bytec_1 // \"\"", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0" + ] + }, + "4052": { + "op": "txna ApplicationArgs 1" + }, + "4055": { + "op": "bytec 10 // 0x0000" + }, + "4057": { + "op": "intc_0 // 0", + "defined_out": [ + "i#0", + "keys#0", + "plugins#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0" + ] + }, + "4058": { + "block": "arc58_getPlugins_while_top@2", + "stack_in": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0" + ], + "op": "dig 2", + "defined_out": [ + "keys#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "keys#0" + ] + }, + "4060": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "keys#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "keys#0", + "0" + ] + }, + "4061": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%0#0", + "keys#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%array_length%0#0" + ] + }, + "4062": { + "op": "dup", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%array_length%0#0", + "aggregate%array_length%0#0" + ] + }, + "4063": { + "op": "bury 5", + "defined_out": [ + "aggregate%array_length%0#0", + "keys#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%array_length%0#0" + ] + }, + "4065": { + "op": "dig 1", + "defined_out": [ + "aggregate%array_length%0#0", + "i#0", + "keys#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%array_length%0#0", + "i#0" + ] + }, + "4067": { + "op": ">", + "defined_out": [ + "aggregate%array_length%0#0", + "i#0", + "keys#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "tmp%1#1" + ] + }, + "4068": { + "op": "bz arc58_getPlugins_after_while@7", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0" + ] + }, + "4071": { + "op": "dig 2", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "keys#0" + ] + }, + "4073": { + "op": "extract 2 0", + "defined_out": [ + "aggregate%array_head_and_tail%0#0", + "aggregate%array_length%0#0", + "i#0", + "keys#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%array_head_and_tail%0#0" + ] + }, + "4076": { + "op": "dig 1", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "i#0" + ] + }, + "4078": { + "op": "dup", + "defined_out": [ + "aggregate%array_head_and_tail%0#0", + "aggregate%array_length%0#0", + "i#0", + "i#0 (copy)", + "keys#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "i#0 (copy)", + "i#0 (copy)" + ] + }, + "4079": { + "op": "cover 2", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "i#0 (copy)" + ] + }, + "4081": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "aggregate%array_head_and_tail%0#0", + "aggregate%array_length%0#0", + "i#0", + "i#0 (copy)", + "keys#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "i#0 (copy)", + "2" + ] + }, + "4082": { + "op": "*", + "defined_out": [ + "aggregate%array_head_and_tail%0#0", + "aggregate%array_length%0#0", + "aggregate%item_offset_offset%0#0", + "i#0", + "keys#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset_offset%0#0" + ] + }, + "4083": { + "op": "dig 1", + "defined_out": [ + "aggregate%array_head_and_tail%0#0", + "aggregate%array_head_and_tail%0#0 (copy)", + "aggregate%array_length%0#0", + "aggregate%item_offset_offset%0#0", + "i#0", + "keys#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset_offset%0#0", + "aggregate%array_head_and_tail%0#0 (copy)" + ] + }, + "4085": { + "op": "swap", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%array_head_and_tail%0#0 (copy)", + "aggregate%item_offset_offset%0#0" + ] + }, + "4086": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_head_and_tail%0#0", + "aggregate%array_length%0#0", + "aggregate%item_offset%0#0", + "i#0", + "keys#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset%0#0" + ] + }, + "4087": { + "op": "uncover 2", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset%0#0", + "i#0" + ] + }, + "4089": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "aggregate%array_head_and_tail%0#0", + "aggregate%array_length%0#0", + "aggregate%item_offset%0#0", + "i#0", + "keys#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset%0#0", + "i#0", + "1" + ] + }, + "4090": { + "op": "+", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset%0#0", + "i#0" + ] + }, + "4091": { + "op": "dup", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset%0#0", + "i#0", + "i#0" + ] + }, + "4092": { + "op": "bury 4", + "defined_out": [ + "aggregate%array_head_and_tail%0#0", + "aggregate%array_length%0#0", + "aggregate%item_offset%0#0", + "i#0", + "keys#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset%0#0", + "i#0" + ] + }, + "4094": { + "op": "dig 6", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset%0#0", + "i#0", + "aggregate%array_length%0#0" + ] + }, + "4096": { + "op": "dig 1", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset%0#0", + "i#0", + "aggregate%array_length%0#0", + "i#0 (copy)" + ] + }, + "4098": { + "error": "index access is out of bounds", + "op": "- // on error: index access is out of bounds", + "defined_out": [ + "aggregate%array_head_and_tail%0#0", + "aggregate%array_length%0#0", + "aggregate%has_next%0#0", + "aggregate%item_offset%0#0", + "i#0", + "keys#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset%0#0", + "i#0", + "aggregate%has_next%0#0" + ] + }, + "4099": { + "op": "dig 3", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset%0#0", + "i#0", + "aggregate%has_next%0#0", + "aggregate%array_head_and_tail%0#0 (copy)" + ] + }, + "4101": { + "op": "len", + "defined_out": [ + "aggregate%array_head_and_tail%0#0", + "aggregate%array_length%0#0", + "aggregate%end_of_array%0#0", + "aggregate%has_next%0#0", + "aggregate%item_offset%0#0", + "i#0", + "keys#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset%0#0", + "i#0", + "aggregate%has_next%0#0", + "aggregate%end_of_array%0#0" + ] + }, + "4102": { + "op": "uncover 2", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset%0#0", + "aggregate%has_next%0#0", + "aggregate%end_of_array%0#0", + "i#0" + ] + }, + "4104": { + "op": "intc_2 // 2", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset%0#0", + "aggregate%has_next%0#0", + "aggregate%end_of_array%0#0", + "i#0", + "2" + ] + }, + "4105": { + "op": "*", + "defined_out": [ + "aggregate%array_head_and_tail%0#0", + "aggregate%array_length%0#0", + "aggregate%end_of_array%0#0", + "aggregate%has_next%0#0", + "aggregate%item_offset%0#0", + "aggregate%next_item_offset_offset%0#0", + "i#0", + "keys#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset%0#0", + "aggregate%has_next%0#0", + "aggregate%end_of_array%0#0", + "aggregate%next_item_offset_offset%0#0" + ] + }, + "4106": { + "op": "dig 4", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset%0#0", + "aggregate%has_next%0#0", + "aggregate%end_of_array%0#0", + "aggregate%next_item_offset_offset%0#0", + "aggregate%array_head_and_tail%0#0 (copy)" + ] + }, + "4108": { + "op": "swap", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset%0#0", + "aggregate%has_next%0#0", + "aggregate%end_of_array%0#0", + "aggregate%array_head_and_tail%0#0 (copy)", + "aggregate%next_item_offset_offset%0#0" + ] + }, + "4109": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_head_and_tail%0#0", + "aggregate%array_length%0#0", + "aggregate%end_of_array%0#0", + "aggregate%has_next%0#0", + "aggregate%item_offset%0#0", + "aggregate%next_item_offset%0#0", + "i#0", + "keys#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset%0#0", + "aggregate%has_next%0#0", + "aggregate%end_of_array%0#0", + "aggregate%next_item_offset%0#0" + ] + }, + "4110": { + "op": "uncover 2", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset%0#0", + "aggregate%end_of_array%0#0", + "aggregate%next_item_offset%0#0", + "aggregate%has_next%0#0" + ] + }, + "4112": { + "op": "select", + "defined_out": [ + "aggregate%array_head_and_tail%0#0", + "aggregate%array_length%0#0", + "aggregate%end_offset%0#0", + "aggregate%item_offset%0#0", + "i#0", + "keys#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset%0#0", + "aggregate%end_offset%0#0" + ] + }, + "4113": { + "op": "substring3", + "defined_out": [ + "aggregate%array_length%0#0", + "aggregate%substring3%0#0", + "i#0", + "keys#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%substring3%0#0" + ] + }, + "4114": { + "op": "bytec 4 // \"p\"", + "defined_out": [ + "\"p\"", + "aggregate%array_length%0#0", + "aggregate%substring3%0#0", + "i#0", + "keys#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%substring3%0#0", + "\"p\"" + ] + }, + "4116": { + "op": "swap", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "\"p\"", + "aggregate%substring3%0#0" + ] + }, + "4117": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%0#0", + "box_prefixed_key%0#0", + "i#0", + "keys#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "box_prefixed_key%0#0" + ] + }, + "4118": { + "op": "dup", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0" + ] + }, + "4119": { + "op": "bury 6", + "defined_out": [ + "aggregate%array_length%0#0", + "box_prefixed_key%0#0", + "i#0", + "keys#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "box_prefixed_key%0#0" + ] + }, + "4121": { + "op": "box_len", + "defined_out": [ + "_%0#0", + "aggregate%array_length%0#0", + "box_prefixed_key%0#0", + "i#0", + "keys#0", + "maybe_exists%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "_%0#0", + "maybe_exists%0#0" + ] + }, + "4122": { + "op": "bury 1", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "maybe_exists%0#0" + ] + }, + "4124": { + "op": "bz arc58_getPlugins_after_if_else@5", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0" + ] + }, + "4127": { + "op": "dig 4", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "box_prefixed_key%0#0" + ] + }, + "4129": { + "op": "box_get", + "defined_out": [ + "aggregate%array_length%0#0", + "aggregate%box_get%0#0", + "aggregate%box_get%1#0", + "box_prefixed_key%0#0", + "i#0", + "keys#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%box_get%0#0", + "aggregate%box_get%1#0" + ] + }, + "4130": { + "error": "Box must have value", + "op": "assert // Box must have value", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%box_get%0#0" + ] + }, + "4131": { + "op": "dig 2", + "defined_out": [ + "aggregate%array_length%0#0", + "aggregate%box_get%0#0", + "box_prefixed_key%0#0", + "i#0", + "keys#0", + "plugins#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%box_get%0#0", + "plugins#0" + ] + }, + "4133": { + "op": "dup", + "defined_out": [ + "aggregate%array_length%0#0", + "aggregate%box_get%0#0", + "box_prefixed_key%0#0", + "i#0", + "keys#0", + "plugins#0", + "plugins#0 (copy)" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%box_get%0#0", + "plugins#0", + "plugins#0 (copy)" + ] + }, + "4134": { + "op": "intc_0 // 0", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%box_get%0#0", + "plugins#0", + "plugins#0 (copy)", + "0" + ] + }, + "4135": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%0#0", + "aggregate%box_get%0#0", + "box_prefixed_key%0#0", + "extract_uint16%0#0", + "i#0", + "keys#0", + "plugins#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%box_get%0#0", + "plugins#0", + "extract_uint16%0#0" + ] + }, + "4136": { + "op": "swap", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%box_get%0#0", + "extract_uint16%0#0", + "plugins#0" + ] + }, + "4137": { + "op": "extract 2 0", + "defined_out": [ + "aggregate%array_length%0#0", + "aggregate%box_get%0#0", + "box_prefixed_key%0#0", + "extract_to_end%0#0", + "extract_uint16%0#0", + "i#0", + "keys#0", + "plugins#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%box_get%0#0", + "extract_uint16%0#0", + "extract_to_end%0#0" + ] + }, + "4140": { + "op": "bytec 20 // 0x0002", + "defined_out": [ + "0x0002", + "aggregate%array_length%0#0", + "aggregate%box_get%0#0", + "box_prefixed_key%0#0", + "extract_to_end%0#0", + "extract_uint16%0#0", + "i#0", + "keys#0", + "plugins#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%box_get%0#0", + "extract_uint16%0#0", + "extract_to_end%0#0", + "0x0002" + ] + }, + "4142": { + "op": "uncover 3", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "extract_uint16%0#0", + "extract_to_end%0#0", + "0x0002", + "aggregate%box_get%0#0" + ] + }, + "4144": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%0#0", + "aggregate%concat%0#0", + "box_prefixed_key%0#0", + "extract_to_end%0#0", + "extract_uint16%0#0", + "i#0", + "keys#0", + "plugins#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "extract_uint16%0#0", + "extract_to_end%0#0", + "aggregate%concat%0#0" + ] + }, + "4145": { + "op": "cover 2", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%concat%0#0", + "extract_uint16%0#0", + "extract_to_end%0#0" + ] + }, + "4147": { + "op": "intc_1 // 1", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "aggregate%concat%0#0", + "extract_uint16%0#0", + "extract_to_end%0#0", + "1" + ] + }, + "4148": { + "op": "uncover 3", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "extract_uint16%0#0", + "extract_to_end%0#0", + "1", + "aggregate%concat%0#0" + ] + }, + "4150": { + "callsub": "_puya_lib.arc4.dynamic_array_concat_dynamic_element", + "op": "callsub dynamic_array_concat_dynamic_element", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "plugins#0" + ] + }, + "4153": { + "op": "bury 2", + "defined_out": [ + "aggregate%array_length%0#0", + "box_prefixed_key%0#0", + "i#0", + "keys#0", + "plugins#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0" + ] + }, + "4155": { + "op": "b arc58_getPlugins_while_top@2" + }, + "4158": { + "block": "arc58_getPlugins_after_if_else@5", + "stack_in": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0" + ], + "op": "dig 1", + "defined_out": [ + "plugins#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "plugins#0" + ] + }, + "4160": { + "op": "dup", + "defined_out": [ + "plugins#0", + "plugins#0 (copy)" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "plugins#0", + "plugins#0 (copy)" + ] + }, + "4161": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "plugins#0", + "plugins#0 (copy)" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "plugins#0", + "plugins#0 (copy)", + "0" + ] + }, + "4162": { + "op": "extract_uint16", + "defined_out": [ + "extract_uint16%1#0", + "plugins#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "plugins#0", + "extract_uint16%1#0" + ] + }, + "4163": { + "op": "swap", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "extract_uint16%1#0", + "plugins#0" + ] + }, + "4164": { + "op": "extract 2 0", + "defined_out": [ + "extract_to_end%1#0", + "extract_uint16%1#0", + "plugins#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "extract_uint16%1#0", + "extract_to_end%1#0" + ] + }, + "4167": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "extract_to_end%1#0", + "extract_uint16%1#0", + "plugins#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "extract_uint16%1#0", + "extract_to_end%1#0", + "1" + ] + }, + "4168": { + "op": "bytec 21 // 0x000200000000000000000000000000000000000000000000000000002c00000000000000000000000000000000000000", + "defined_out": [ + "0x000200000000000000000000000000000000000000000000000000002c00000000000000000000000000000000000000", + "1", + "extract_to_end%1#0", + "extract_uint16%1#0", + "plugins#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "extract_uint16%1#0", + "extract_to_end%1#0", + "1", + "0x000200000000000000000000000000000000000000000000000000002c00000000000000000000000000000000000000" + ] + }, + "4170": { + "callsub": "_puya_lib.arc4.dynamic_array_concat_dynamic_element", + "op": "callsub dynamic_array_concat_dynamic_element", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "plugins#0" + ] + }, + "4173": { + "op": "bury 2", + "defined_out": [ + "plugins#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0" + ] + }, + "4175": { + "op": "b arc58_getPlugins_while_top@2" + }, + "4178": { + "block": "arc58_getPlugins_after_while@7", + "stack_in": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0" + ], + "op": "bytec 7 // 0x151f7c75", + "defined_out": [ + "0x151f7c75" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "0x151f7c75" + ] + }, + "4180": { + "op": "dig 2", + "defined_out": [ + "0x151f7c75", + "plugins#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "0x151f7c75", + "plugins#0" + ] + }, + "4182": { + "op": "concat", + "defined_out": [ + "plugins#0", + "tmp%2#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "tmp%2#0" + ] + }, + "4183": { + "op": "log", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0" + ] + }, + "4184": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "plugins#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0", + "1" + ] + }, + "4185": { + "op": "return", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%array_length%0#0", + "keys#0", + "plugins#0", + "i#0" + ] + }, + "4186": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_getNamedPlugins[routing]", + "params": {}, + "block": "arc58_getNamedPlugins", + "stack_in": [], + "op": "intc_0 // 0", + "stack_out": [ + "box_prefixed_key%0#0" + ] + }, + "4187": { + "op": "dup", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0" + ] + }, + "4188": { + "op": "bytec_1 // \"\"", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1" + ] + }, + "4189": { + "op": "txna ApplicationArgs 1" + }, + "4192": { + "op": "bytec 10 // 0x0000" + }, + "4194": { + "op": "intc_0 // 0", + "defined_out": [ + "i#0", + "names#0", + "plugins#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0" + ] + }, + "4195": { + "block": "arc58_getNamedPlugins_while_top@2", + "stack_in": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0" + ], + "op": "dig 2", + "defined_out": [ + "names#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "names#0" + ] + }, + "4197": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "names#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "names#0", + "0" + ] + }, + "4198": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%0#0", + "names#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "aggregate%array_length%0#0" + ] + }, + "4199": { + "op": "dig 1", + "defined_out": [ + "aggregate%array_length%0#0", + "i#0", + "names#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "aggregate%array_length%0#0", + "i#0" + ] + }, + "4201": { + "op": ">", + "defined_out": [ + "i#0", + "names#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "tmp%1#1" + ] + }, + "4202": { + "op": "dup", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "tmp%1#1", + "tmp%1#1" + ] + }, + "4203": { + "op": "bury 5", + "defined_out": [ + "i#0", + "names#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "tmp%1#1" + ] + }, + "4205": { + "op": "bz arc58_getNamedPlugins_after_while@9", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0" + ] + }, + "4208": { + "op": "dig 2", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "names#0" + ] + }, + "4210": { + "op": "extract 2 0", + "defined_out": [ + "aggregate%array_head_and_tail%0#0", + "i#0", + "names#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "aggregate%array_head_and_tail%0#0" + ] + }, + "4213": { + "op": "dig 4", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "tmp%1#1" + ] + }, + "4215": { + "error": "index access is out of bounds", + "op": "assert // index access is out of bounds", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "aggregate%array_head_and_tail%0#0" + ] + }, + "4216": { + "op": "dig 1", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "i#0" + ] + }, + "4218": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "aggregate%array_head_and_tail%0#0", + "i#0", + "names#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "i#0", + "2" + ] + }, + "4219": { + "op": "*", + "defined_out": [ + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset_offset%0#0", + "i#0", + "names#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset_offset%0#0" + ] + }, + "4220": { + "op": "dig 1", + "defined_out": [ + "aggregate%array_head_and_tail%0#0", + "aggregate%array_head_and_tail%0#0 (copy)", + "aggregate%item_offset_offset%0#0", + "i#0", + "names#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset_offset%0#0", + "aggregate%array_head_and_tail%0#0 (copy)" + ] + }, + "4222": { + "op": "swap", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%array_head_and_tail%0#0 (copy)", + "aggregate%item_offset_offset%0#0" + ] + }, + "4223": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset%0#0", + "i#0", + "names#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset%0#0" + ] + }, + "4224": { + "op": "dup2", + "defined_out": [ + "aggregate%array_head_and_tail%0#0", + "aggregate%array_head_and_tail%0#0 (copy)", + "aggregate%item_offset%0#0", + "aggregate%item_offset%0#0 (copy)", + "i#0", + "names#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset%0#0", + "aggregate%array_head_and_tail%0#0 (copy)", + "aggregate%item_offset%0#0 (copy)" + ] + }, + "4225": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_head_and_tail%0#0", + "aggregate%item_length%0#0", + "aggregate%item_offset%0#0", + "i#0", + "names#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset%0#0", + "aggregate%item_length%0#0" + ] + }, + "4226": { + "op": "intc_2 // 2", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset%0#0", + "aggregate%item_length%0#0", + "2" + ] + }, + "4227": { + "op": "+", + "defined_out": [ + "aggregate%array_head_and_tail%0#0", + "aggregate%item_head_tail_length%0#0", + "aggregate%item_offset%0#0", + "i#0", + "names#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset%0#0", + "aggregate%item_head_tail_length%0#0" + ] + }, + "4228": { + "op": "extract3", + "defined_out": [ + "aggregate%item%0#0", + "i#0", + "names#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "aggregate%item%0#0" + ] + }, + "4229": { + "op": "extract 2 0", + "defined_out": [ + "i#0", + "names#0", + "tmp%1#1", + "values%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "values%0#0" + ] + }, + "4232": { + "op": "bytec 16 // \"n\"", + "defined_out": [ + "\"n\"", + "i#0", + "names#0", + "tmp%1#1", + "values%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "values%0#0", + "\"n\"" + ] + }, + "4234": { + "op": "swap", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "\"n\"", + "values%0#0" + ] + }, + "4235": { + "op": "concat", + "defined_out": [ + "box_prefixed_key%0#0", + "i#0", + "names#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "box_prefixed_key%0#0" + ] + }, + "4236": { + "op": "dup", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0" + ] + }, + "4237": { + "op": "bury 7", + "defined_out": [ + "box_prefixed_key%0#0", + "i#0", + "names#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "box_prefixed_key%0#0" + ] + }, + "4239": { + "op": "box_len", + "defined_out": [ + "_%0#0", + "box_prefixed_key%0#0", + "i#0", + "maybe_exists%0#0", + "names#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "_%0#0", + "maybe_exists%0#0" + ] + }, + "4240": { + "op": "bury 1", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "maybe_exists%0#0" + ] + }, + "4242": { + "op": "bz arc58_getNamedPlugins_after_if_else@7", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0" + ] + }, + "4245": { + "op": "dig 5", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "box_prefixed_key%0#0" + ] + }, + "4247": { + "op": "box_get", + "defined_out": [ + "aggregate%box_get%1#0", + "box_prefixed_key%0#0", + "i#0", + "nameKey#0", + "names#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "nameKey#0", + "aggregate%box_get%1#0" + ] + }, + "4248": { + "error": "Box must have value", + "op": "assert // Box must have value", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "nameKey#0" + ] + }, + "4249": { + "op": "bytec 4 // \"p\"", + "defined_out": [ + "\"p\"", + "box_prefixed_key%0#0", + "i#0", + "nameKey#0", + "names#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "nameKey#0", + "\"p\"" + ] + }, + "4251": { + "op": "swap", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "\"p\"", + "nameKey#0" + ] + }, + "4252": { + "op": "concat", + "defined_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "i#0", + "names#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "box_prefixed_key%2#0" + ] + }, + "4253": { + "op": "dup", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "box_prefixed_key%2#0", + "box_prefixed_key%2#0" + ] + }, + "4254": { + "op": "bury 6", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "box_prefixed_key%2#0" + ] + }, + "4256": { + "op": "box_len", + "defined_out": [ + "_%1#0", + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "i#0", + "maybe_exists%1#0", + "names#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "_%1#0", + "maybe_exists%1#0" + ] + }, + "4257": { + "op": "bury 1", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "maybe_exists%1#0" + ] + }, + "4259": { + "op": "bz arc58_getNamedPlugins_after_if_else@6", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0" + ] + }, + "4262": { + "op": "dig 4", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "box_prefixed_key%2#0" + ] + }, + "4264": { + "op": "box_get", + "defined_out": [ + "aggregate%box_get%2#0", + "aggregate%box_get%3#0", + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "i#0", + "names#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "aggregate%box_get%2#0", + "aggregate%box_get%3#0" + ] + }, + "4265": { + "error": "Box must have value", + "op": "assert // Box must have value", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "aggregate%box_get%2#0" + ] + }, + "4266": { + "op": "dig 2", + "defined_out": [ + "aggregate%box_get%2#0", + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "i#0", + "names#0", + "plugins#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "aggregate%box_get%2#0", + "plugins#0" + ] + }, + "4268": { + "op": "dup", + "defined_out": [ + "aggregate%box_get%2#0", + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "i#0", + "names#0", + "plugins#0", + "plugins#0 (copy)", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "aggregate%box_get%2#0", + "plugins#0", + "plugins#0 (copy)" + ] + }, + "4269": { + "op": "intc_0 // 0", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "aggregate%box_get%2#0", + "plugins#0", + "plugins#0 (copy)", + "0" + ] + }, + "4270": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%box_get%2#0", + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "extract_uint16%0#0", + "i#0", + "names#0", + "plugins#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "aggregate%box_get%2#0", + "plugins#0", + "extract_uint16%0#0" + ] + }, + "4271": { + "op": "swap", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "aggregate%box_get%2#0", + "extract_uint16%0#0", + "plugins#0" + ] + }, + "4272": { + "op": "extract 2 0", + "defined_out": [ + "aggregate%box_get%2#0", + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "extract_to_end%0#0", + "extract_uint16%0#0", + "i#0", + "names#0", + "plugins#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "aggregate%box_get%2#0", + "extract_uint16%0#0", + "extract_to_end%0#0" + ] + }, + "4275": { + "op": "bytec 20 // 0x0002", + "defined_out": [ + "0x0002", + "aggregate%box_get%2#0", + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "extract_to_end%0#0", + "extract_uint16%0#0", + "i#0", + "names#0", + "plugins#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "aggregate%box_get%2#0", + "extract_uint16%0#0", + "extract_to_end%0#0", + "0x0002" + ] + }, + "4277": { + "op": "uncover 3", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "extract_uint16%0#0", + "extract_to_end%0#0", + "0x0002", + "aggregate%box_get%2#0" + ] + }, + "4279": { + "op": "concat", + "defined_out": [ + "aggregate%concat%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "extract_to_end%0#0", + "extract_uint16%0#0", + "i#0", + "names#0", + "plugins#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "extract_uint16%0#0", + "extract_to_end%0#0", + "aggregate%concat%0#0" + ] + }, + "4280": { + "op": "cover 2", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "aggregate%concat%0#0", + "extract_uint16%0#0", + "extract_to_end%0#0" + ] + }, + "4282": { + "op": "intc_1 // 1", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "aggregate%concat%0#0", + "extract_uint16%0#0", + "extract_to_end%0#0", + "1" + ] + }, + "4283": { + "op": "uncover 3", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "extract_uint16%0#0", + "extract_to_end%0#0", + "1", + "aggregate%concat%0#0" + ] + }, + "4285": { + "callsub": "_puya_lib.arc4.dynamic_array_concat_dynamic_element", + "op": "callsub dynamic_array_concat_dynamic_element", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "plugins#0" + ] + }, + "4288": { + "op": "bury 2", + "defined_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "i#0", + "names#0", + "plugins#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0" + ] + }, + "4290": { + "block": "arc58_getNamedPlugins_block@8", + "stack_in": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0" + ], + "op": "dup", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "i#0" + ] + }, + "4291": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "i#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "i#0", + "1" + ] + }, + "4292": { + "op": "+", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "i#0" + ] + }, + "4293": { + "op": "bury 1", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0" + ] + }, + "4295": { + "op": "b arc58_getNamedPlugins_while_top@2" + }, + "4298": { + "block": "arc58_getNamedPlugins_after_if_else@6", + "stack_in": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0" + ], + "op": "dig 1", + "defined_out": [ + "plugins#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "plugins#0" + ] + }, + "4300": { + "op": "dup", + "defined_out": [ + "plugins#0", + "plugins#0 (copy)" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "plugins#0", + "plugins#0 (copy)" + ] + }, + "4301": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "plugins#0", + "plugins#0 (copy)" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "plugins#0", + "plugins#0 (copy)", + "0" + ] + }, + "4302": { + "op": "extract_uint16", + "defined_out": [ + "extract_uint16%1#0", + "plugins#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "plugins#0", + "extract_uint16%1#0" + ] + }, + "4303": { + "op": "swap", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "extract_uint16%1#0", + "plugins#0" + ] + }, + "4304": { + "op": "extract 2 0", + "defined_out": [ + "extract_to_end%1#0", + "extract_uint16%1#0", + "plugins#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "extract_uint16%1#0", + "extract_to_end%1#0" + ] + }, + "4307": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "extract_to_end%1#0", + "extract_uint16%1#0", + "plugins#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "extract_uint16%1#0", + "extract_to_end%1#0", + "1" + ] + }, + "4308": { + "op": "bytec 21 // 0x000200000000000000000000000000000000000000000000000000002c00000000000000000000000000000000000000", + "defined_out": [ + "0x000200000000000000000000000000000000000000000000000000002c00000000000000000000000000000000000000", + "1", + "extract_to_end%1#0", + "extract_uint16%1#0", + "plugins#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "extract_uint16%1#0", + "extract_to_end%1#0", + "1", + "0x000200000000000000000000000000000000000000000000000000002c00000000000000000000000000000000000000" + ] + }, + "4310": { + "callsub": "_puya_lib.arc4.dynamic_array_concat_dynamic_element", + "op": "callsub dynamic_array_concat_dynamic_element", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "plugins#0" + ] + }, + "4313": { + "op": "bury 2", + "defined_out": [ + "plugins#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0" + ] + }, + "4315": { + "op": "b arc58_getNamedPlugins_block@8" + }, + "4318": { + "block": "arc58_getNamedPlugins_after_if_else@7", + "stack_in": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0" + ], + "op": "dig 1", + "defined_out": [ + "plugins#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "plugins#0" + ] + }, + "4320": { + "op": "dup", + "defined_out": [ + "plugins#0", + "plugins#0 (copy)" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "plugins#0", + "plugins#0 (copy)" + ] + }, + "4321": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "plugins#0", + "plugins#0 (copy)" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "plugins#0", + "plugins#0 (copy)", + "0" + ] + }, + "4322": { + "op": "extract_uint16", + "defined_out": [ + "extract_uint16%2#0", + "plugins#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "plugins#0", + "extract_uint16%2#0" + ] + }, + "4323": { + "op": "swap", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "extract_uint16%2#0", + "plugins#0" + ] + }, + "4324": { + "op": "extract 2 0", + "defined_out": [ + "extract_to_end%2#0", + "extract_uint16%2#0", + "plugins#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "extract_uint16%2#0", + "extract_to_end%2#0" + ] + }, + "4327": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "extract_to_end%2#0", + "extract_uint16%2#0", + "plugins#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "extract_uint16%2#0", + "extract_to_end%2#0", + "1" + ] + }, + "4328": { + "op": "bytec 21 // 0x000200000000000000000000000000000000000000000000000000002c00000000000000000000000000000000000000", + "defined_out": [ + "0x000200000000000000000000000000000000000000000000000000002c00000000000000000000000000000000000000", + "1", + "extract_to_end%2#0", + "extract_uint16%2#0", + "plugins#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "extract_uint16%2#0", + "extract_to_end%2#0", + "1", + "0x000200000000000000000000000000000000000000000000000000002c00000000000000000000000000000000000000" + ] + }, + "4330": { + "callsub": "_puya_lib.arc4.dynamic_array_concat_dynamic_element", + "op": "callsub dynamic_array_concat_dynamic_element", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "plugins#0" + ] + }, + "4333": { + "op": "bury 2", + "defined_out": [ + "plugins#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0" + ] + }, + "4335": { + "op": "b arc58_getNamedPlugins_block@8" + }, + "4338": { + "block": "arc58_getNamedPlugins_after_while@9", + "stack_in": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0" + ], + "op": "bytec 7 // 0x151f7c75", + "defined_out": [ + "0x151f7c75" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "0x151f7c75" + ] + }, + "4340": { + "op": "dig 2", + "defined_out": [ + "0x151f7c75", + "plugins#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "0x151f7c75", + "plugins#0" + ] + }, + "4342": { + "op": "concat", + "defined_out": [ + "plugins#0", + "tmp%2#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "tmp%2#0" + ] + }, + "4343": { + "op": "log", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0" + ] + }, + "4344": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "plugins#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0", + "1" + ] + }, + "4345": { + "op": "return", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#0", + "tmp%1#1", + "names#0", + "plugins#0", + "i#0" + ] + }, + "4346": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_getEscrows[routing]", + "params": {}, + "block": "arc58_getEscrows", + "stack_in": [], + "op": "intc_0 // 0", + "stack_out": [ + "box_prefixed_key%0#0" + ] + }, + "4347": { + "op": "bytec_1 // \"\"", + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1" + ] + }, + "4348": { + "op": "txna ApplicationArgs 1" + }, + "4351": { + "op": "bytec 10 // 0x0000" + }, + "4353": { + "op": "intc_0 // 0", + "defined_out": [ + "escrows#0", + "i#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0" + ] + }, + "4354": { + "block": "arc58_getEscrows_while_top@2", + "stack_in": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0" + ], + "op": "dig 2", + "defined_out": [ + "escrows#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "escrows#0" + ] + }, + "4356": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "escrows#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "escrows#0", + "0" + ] + }, + "4357": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%0#0", + "escrows#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "aggregate%array_length%0#0" + ] + }, + "4358": { + "op": "dig 1", + "defined_out": [ + "aggregate%array_length%0#0", + "escrows#0", + "i#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "aggregate%array_length%0#0", + "i#0" + ] + }, + "4360": { + "op": ">", + "defined_out": [ + "escrows#0", + "i#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "tmp%1#1" + ] + }, + "4361": { + "op": "dup", + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "tmp%1#1", + "tmp%1#1" + ] + }, + "4362": { + "op": "bury 5", + "defined_out": [ + "escrows#0", + "i#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "tmp%1#1" + ] + }, + "4364": { + "op": "bz arc58_getEscrows_after_while@7", + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0" + ] + }, + "4367": { + "op": "dig 2", + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "escrows#0" + ] + }, + "4369": { + "op": "extract 2 0", + "defined_out": [ + "aggregate%array_head_and_tail%0#0", + "escrows#0", + "i#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "aggregate%array_head_and_tail%0#0" + ] + }, + "4372": { + "op": "dig 4", + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "tmp%1#1" + ] + }, + "4374": { + "error": "index access is out of bounds", + "op": "assert // index access is out of bounds", + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "aggregate%array_head_and_tail%0#0" + ] + }, + "4375": { + "op": "dig 1", + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "i#0" + ] + }, + "4377": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "aggregate%array_head_and_tail%0#0", + "escrows#0", + "i#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "i#0", + "2" + ] + }, + "4378": { + "op": "*", + "defined_out": [ + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset_offset%0#0", + "escrows#0", + "i#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset_offset%0#0" + ] + }, + "4379": { + "op": "dig 1", + "defined_out": [ + "aggregate%array_head_and_tail%0#0", + "aggregate%array_head_and_tail%0#0 (copy)", + "aggregate%item_offset_offset%0#0", + "escrows#0", + "i#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset_offset%0#0", + "aggregate%array_head_and_tail%0#0 (copy)" + ] + }, + "4381": { + "op": "swap", + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%array_head_and_tail%0#0 (copy)", + "aggregate%item_offset_offset%0#0" + ] + }, + "4382": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset%0#0", + "escrows#0", + "i#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset%0#0" + ] + }, + "4383": { + "op": "dup2", + "defined_out": [ + "aggregate%array_head_and_tail%0#0", + "aggregate%array_head_and_tail%0#0 (copy)", + "aggregate%item_offset%0#0", + "aggregate%item_offset%0#0 (copy)", + "escrows#0", + "i#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset%0#0", + "aggregate%array_head_and_tail%0#0 (copy)", + "aggregate%item_offset%0#0 (copy)" + ] + }, + "4384": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_head_and_tail%0#0", + "aggregate%item_length%0#0", + "aggregate%item_offset%0#0", + "escrows#0", + "i#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset%0#0", + "aggregate%item_length%0#0" + ] + }, + "4385": { + "op": "intc_2 // 2", + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset%0#0", + "aggregate%item_length%0#0", + "2" + ] + }, + "4386": { + "op": "+", + "defined_out": [ + "aggregate%array_head_and_tail%0#0", + "aggregate%item_head_tail_length%0#0", + "aggregate%item_offset%0#0", + "escrows#0", + "i#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "aggregate%array_head_and_tail%0#0", + "aggregate%item_offset%0#0", + "aggregate%item_head_tail_length%0#0" + ] + }, + "4387": { + "op": "extract3", + "defined_out": [ + "aggregate%item%0#0", + "escrows#0", + "i#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "aggregate%item%0#0" + ] + }, + "4388": { + "op": "extract 2 0", + "defined_out": [ + "escrows#0", + "i#0", + "tmp%1#1", + "values%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "values%0#0" + ] + }, + "4391": { + "op": "bytec 5 // \"e\"", + "defined_out": [ + "\"e\"", + "escrows#0", + "i#0", + "tmp%1#1", + "values%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "values%0#0", + "\"e\"" + ] + }, + "4393": { + "op": "swap", + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "\"e\"", + "values%0#0" + ] + }, + "4394": { + "op": "concat", + "defined_out": [ + "box_prefixed_key%0#0", + "escrows#0", + "i#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "box_prefixed_key%0#0" + ] + }, + "4395": { + "op": "dup", + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0" + ] + }, + "4396": { + "op": "bury 6", + "defined_out": [ + "box_prefixed_key%0#0", + "escrows#0", + "i#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "box_prefixed_key%0#0" + ] + }, + "4398": { + "op": "box_len", + "defined_out": [ + "_%0#0", + "box_prefixed_key%0#0", + "escrows#0", + "i#0", + "maybe_exists%0#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "_%0#0", + "maybe_exists%0#0" + ] + }, + "4399": { + "op": "bury 1", + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "maybe_exists%0#0" + ] + }, + "4401": { + "op": "bz arc58_getEscrows_after_if_else@5", + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0" + ] + }, + "4404": { + "op": "dig 4", + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "box_prefixed_key%0#0" + ] + }, + "4406": { + "op": "box_get", + "defined_out": [ + "aggregate%box_get%0#0", + "aggregate%box_get%1#0", + "box_prefixed_key%0#0", + "escrows#0", + "i#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "aggregate%box_get%0#0", + "aggregate%box_get%1#0" + ] + }, + "4407": { + "error": "Box must have value", + "op": "assert // Box must have value", + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "aggregate%box_get%0#0" + ] + }, + "4408": { + "op": "dig 2", + "defined_out": [ + "aggregate%box_get%0#0", + "box_prefixed_key%0#0", + "escrows#0", + "i#0", + "result#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "aggregate%box_get%0#0", + "result#0" + ] + }, + "4410": { + "op": "dup" + }, + "4411": { + "op": "uncover 2", + "defined_out": [ + "aggregate%box_get%0#0", + "box_prefixed_key%0#0", + "escrows#0", + "i#0", + "result#0", + "result#0 (copy)", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "result#0", + "result#0 (copy)", + "aggregate%box_get%0#0" + ] + }, + "4413": { + "error": "max array length exceeded", + "op": "concat // on error: max array length exceeded", + "defined_out": [ + "box_prefixed_key%0#0", + "concat%0#0", + "escrows#0", + "i#0", + "result#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "result#0", + "concat%0#0" + ] + }, + "4414": { + "op": "swap", + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "concat%0#0", + "result#0" + ] + }, + "4415": { + "op": "intc_0 // 0", + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "concat%0#0", + "result#0", + "0" + ] + }, + "4416": { + "op": "extract_uint16", + "defined_out": [ + "box_prefixed_key%0#0", + "concat%0#0", + "escrows#0", + "extract_uint16%0#0", + "i#0", + "result#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "concat%0#0", + "extract_uint16%0#0" + ] + }, + "4417": { + "op": "intc_1 // 1", + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "concat%0#0", + "extract_uint16%0#0", + "1" + ] + }, + "4418": { + "op": "+", + "defined_out": [ + "add%0#0", + "box_prefixed_key%0#0", + "concat%0#0", + "escrows#0", + "i#0", + "result#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "concat%0#0", + "add%0#0" + ] + }, + "4419": { + "op": "itob", + "defined_out": [ + "as_bytes%0#0", + "box_prefixed_key%0#0", + "concat%0#0", + "escrows#0", + "i#0", + "result#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "concat%0#0", + "as_bytes%0#0" + ] + }, + "4420": { + "op": "extract 6 2", + "defined_out": [ + "as_u16_bytes%0#0", + "box_prefixed_key%0#0", + "concat%0#0", + "escrows#0", + "i#0", + "result#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "concat%0#0", + "as_u16_bytes%0#0" + ] + }, + "4423": { + "op": "replace2 0", + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "result#0" + ] + }, + "4425": { + "op": "bury 2", + "defined_out": [ + "box_prefixed_key%0#0", + "escrows#0", + "i#0", + "result#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0" + ] + }, + "4427": { + "block": "arc58_getEscrows_block@6", + "stack_in": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0" + ], + "op": "dup", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "i#0" + ] + }, + "4428": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "i#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "i#0", + "1" + ] + }, + "4429": { + "op": "+", + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "i#0" + ] + }, + "4430": { + "op": "bury 1", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0" + ] + }, + "4432": { + "op": "b arc58_getEscrows_while_top@2" + }, + "4435": { + "block": "arc58_getEscrows_after_if_else@5", + "stack_in": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0" + ], + "op": "dig 1", + "defined_out": [ + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "result#0" + ] + }, + "4437": { + "op": "dup", + "defined_out": [ + "result#0", + "result#0 (copy)" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "result#0", + "result#0 (copy)" + ] + }, + "4438": { + "op": "pushbytes 0x000000000000000000", + "defined_out": [ + "0x000000000000000000", + "result#0", + "result#0 (copy)" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "result#0", + "result#0 (copy)", + "0x000000000000000000" + ] + }, + "4449": { + "error": "max array length exceeded", + "op": "concat // on error: max array length exceeded", + "defined_out": [ + "concat%1#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "result#0", + "concat%1#0" + ] + }, + "4450": { + "op": "swap", + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "concat%1#0", + "result#0" + ] + }, + "4451": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "concat%1#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "concat%1#0", + "result#0", + "0" + ] + }, + "4452": { + "op": "extract_uint16", + "defined_out": [ + "concat%1#0", + "extract_uint16%1#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "concat%1#0", + "extract_uint16%1#0" + ] + }, + "4453": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "concat%1#0", + "extract_uint16%1#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "concat%1#0", + "extract_uint16%1#0", + "1" + ] + }, + "4454": { + "op": "+", + "defined_out": [ + "add%1#0", + "concat%1#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "concat%1#0", + "add%1#0" + ] + }, + "4455": { + "op": "itob", + "defined_out": [ + "as_bytes%1#0", + "concat%1#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "concat%1#0", + "as_bytes%1#0" + ] + }, + "4456": { + "op": "extract 6 2", + "defined_out": [ + "as_u16_bytes%1#0", + "concat%1#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "concat%1#0", + "as_u16_bytes%1#0" + ] + }, + "4459": { + "op": "replace2 0", + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "result#0" + ] + }, + "4461": { + "op": "bury 2", + "defined_out": [ + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0" + ] + }, + "4463": { + "op": "b arc58_getEscrows_block@6" + }, + "4466": { + "block": "arc58_getEscrows_after_while@7", + "stack_in": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0" + ], + "op": "bytec 7 // 0x151f7c75", + "defined_out": [ + "0x151f7c75" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "0x151f7c75" + ] + }, + "4468": { + "op": "dig 2", + "defined_out": [ + "0x151f7c75", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "0x151f7c75", + "result#0" + ] + }, + "4470": { + "op": "concat", + "defined_out": [ + "result#0", + "tmp%2#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "tmp%2#0" + ] + }, + "4471": { + "op": "log", + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0" + ] + }, + "4472": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0", + "1" + ] + }, + "4473": { + "op": "return", + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%1#1", + "escrows#0", + "result#0", + "i#0" + ] + }, + "4474": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_getAllowances[routing]", + "params": {}, + "block": "arc58_getAllowances", + "stack_in": [], + "op": "intc_0 // 0", + "stack_out": [ + "box_prefixed_key%0#0" + ] + }, + "4475": { + "op": "txna ApplicationArgs 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%0#0" + ] + }, + "4478": { + "op": "dup", + "defined_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%0#0", + "tmp%0#0 (copy)" + ] + }, + "4479": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%0#0", + "tmp%0#0 (copy)", + "0" + ] + }, + "4480": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%0#0", + "aggregate%array_length%0#0" + ] + }, + "4481": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "aggregate%array_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%0#0", + "aggregate%array_length%0#0", + "2" + ] + }, + "4482": { + "op": "+", + "defined_out": [ + "add%0#0", + "tmp%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%0#0", + "add%0#0" + ] + }, + "4483": { + "op": "dig 1", + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%0#0", + "add%0#0", + "tmp%0#0 (copy)" + ] + }, + "4485": { + "op": "len", + "defined_out": [ + "add%0#0", + "len%0#0", + "tmp%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%0#0", + "add%0#0", + "len%0#0" + ] + }, + "4486": { + "op": "==", + "defined_out": [ + "eq%0#0", + "tmp%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%0#0", + "eq%0#0" + ] + }, + "4487": { + "error": "invalid number of bytes for (len+utf8[])", + "op": "assert // invalid number of bytes for (len+utf8[])", + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%0#0" + ] + }, + "4488": { + "op": "extract 2 0", + "defined_out": [ + "escrow#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0" + ] + }, + "4491": { + "op": "txna ApplicationArgs 2" + }, + "4494": { + "op": "dupn 2", + "defined_out": [ + "assets#0", + "assets#0 (copy)", + "escrow#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "assets#0", + "assets#0 (copy)" + ] + }, + "4496": { + "op": "intc_0 // 0", + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "assets#0", + "assets#0 (copy)", + "0" + ] + }, + "4497": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "assets#0", + "aggregate%array_length%1#0" + ] + }, + "4498": { + "op": "dup", + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "assets#0", + "aggregate%array_length%1#0", + "aggregate%array_length%1#0" + ] + }, + "4499": { + "op": "cover 2", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "assets#0", + "aggregate%array_length%1#0" + ] + }, + "4501": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "aggregate%array_length%1#0", + "assets#0", + "escrow#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "assets#0", + "aggregate%array_length%1#0", + "8" + ] + }, + "4502": { + "op": "*", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "mul%1#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "assets#0", + "mul%1#0" + ] + }, + "4503": { + "op": "intc_2 // 2", + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "assets#0", + "mul%1#0", + "2" + ] + }, + "4504": { + "op": "+", + "defined_out": [ + "add%1#0", + "aggregate%array_length%1#0", + "assets#0", + "escrow#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "assets#0", + "add%1#0" + ] + }, + "4505": { + "op": "swap", + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "add%1#0", + "assets#0" + ] + }, + "4506": { + "op": "len", + "defined_out": [ + "add%1#0", + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "len%1#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "add%1#0", + "len%1#0" + ] + }, + "4507": { + "op": "==", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "eq%1#0", + "escrow#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "eq%1#0" + ] + }, + "4508": { + "error": "invalid number of bytes for (len+uint64[])", + "op": "assert // invalid number of bytes for (len+uint64[])", + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0" + ] + }, + "4509": { + "op": "bytec 10 // 0x0000" + }, + "4511": { + "op": "intc_0 // 0", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "i#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0" + ] + }, + "4512": { + "block": "arc58_getAllowances_while_top@2", + "stack_in": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0" + ], + "op": "dup", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "i#0" + ] + }, + "4513": { + "op": "dig 3", + "defined_out": [ + "aggregate%array_length%1#0", + "i#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "i#0", + "aggregate%array_length%1#0" + ] + }, + "4515": { + "op": "<", + "defined_out": [ + "aggregate%array_length%1#0", + "i#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "tmp%1#1" + ] + }, + "4516": { + "op": "bz arc58_getAllowances_after_while@7", + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0" + ] + }, + "4519": { + "op": "dig 3", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "i#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "assets#0" + ] + }, + "4521": { + "op": "extract 2 0", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%array_trimmed%0#0", + "assets#0", + "i#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "aggregate%array_trimmed%0#0" + ] + }, + "4524": { + "op": "dig 1", + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "aggregate%array_trimmed%0#0", + "i#0" + ] + }, + "4526": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "aggregate%array_length%1#0", + "aggregate%array_trimmed%0#0", + "assets#0", + "i#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "aggregate%array_trimmed%0#0", + "i#0", + "8" + ] + }, + "4527": { + "op": "*", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0", + "assets#0", + "i#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0" + ] + }, + "4528": { + "op": "intc_3 // 8", + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0", + "8" + ] + }, + "4529": { + "error": "index access is out of bounds", + "op": "extract3 // on error: index access is out of bounds", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "assets#0", + "i#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "aggregate%encoded_element%0#0" + ] + }, + "4530": { + "op": "dig 5", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "assets#0", + "escrow#0", + "i#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "aggregate%encoded_element%0#0", + "escrow#0" + ] + }, + "4532": { + "op": "dup", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "assets#0", + "escrow#0", + "escrow#0 (copy)", + "i#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "aggregate%encoded_element%0#0", + "escrow#0", + "escrow#0 (copy)" + ] + }, + "4533": { + "op": "len", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%length%0#0", + "assets#0", + "escrow#0", + "i#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "aggregate%encoded_element%0#0", + "escrow#0", + "aggregate%length%0#0" + ] + }, + "4534": { + "op": "itob", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%as_bytes%1#0", + "aggregate%encoded_element%0#0", + "assets#0", + "escrow#0", + "i#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "aggregate%encoded_element%0#0", + "escrow#0", + "aggregate%as_bytes%1#0" + ] + }, + "4535": { + "op": "extract 6 2", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%length_uint16%0#0", + "assets#0", + "escrow#0", + "i#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "aggregate%encoded_element%0#0", + "escrow#0", + "aggregate%length_uint16%0#0" + ] + }, + "4538": { + "op": "swap", + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "aggregate%encoded_element%0#0", + "aggregate%length_uint16%0#0", + "escrow#0" + ] + }, + "4539": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "assets#0", + "escrow#0", + "i#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0" + ] + }, + "4540": { + "op": "bytec 13 // 0x000a", + "defined_out": [ + "0x000a", + "aggregate%array_length%1#0", + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "assets#0", + "escrow#0", + "i#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "0x000a" + ] + }, + "4542": { + "op": "uncover 2", + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "aggregate%encoded_value%0#0", + "0x000a", + "aggregate%encoded_element%0#0" + ] + }, + "4544": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%encoded_value%0#0", + "aggregate%head%1#0", + "assets#0", + "escrow#0", + "i#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "aggregate%encoded_value%0#0", + "aggregate%head%1#0" + ] + }, + "4545": { + "op": "swap", + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "aggregate%head%1#0", + "aggregate%encoded_value%0#0" + ] + }, + "4546": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "i#0", + "key#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "key#0" + ] + }, + "4547": { + "op": "bytec 14 // \"a\"", + "defined_out": [ + "\"a\"", + "aggregate%array_length%1#0", + "assets#0", + "escrow#0", + "i#0", + "key#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "key#0", + "\"a\"" + ] + }, + "4549": { + "op": "swap", + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "\"a\"", + "key#0" + ] + }, + "4550": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "box_prefixed_key%0#0", + "escrow#0", + "i#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "box_prefixed_key%0#0" + ] + }, + "4551": { + "op": "dup", + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0" + ] + }, + "4552": { + "op": "bury 7", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "box_prefixed_key%0#0", + "escrow#0", + "i#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "box_prefixed_key%0#0" + ] + }, + "4554": { + "op": "box_len", + "defined_out": [ + "_%0#0", + "aggregate%array_length%1#0", + "assets#0", + "box_prefixed_key%0#0", + "escrow#0", + "i#0", + "maybe_exists%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "_%0#0", + "maybe_exists%0#0" + ] + }, + "4555": { + "op": "bury 1", + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "maybe_exists%0#0" + ] + }, + "4557": { + "op": "bz arc58_getAllowances_after_if_else@5", + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0" + ] + }, + "4560": { + "op": "dig 5", + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "box_prefixed_key%0#0" + ] + }, + "4562": { + "op": "box_get", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%box_get%0#0", + "aggregate%box_get%1#0", + "assets#0", + "box_prefixed_key%0#0", + "escrow#0", + "i#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "aggregate%box_get%0#0", + "aggregate%box_get%1#0" + ] + }, + "4563": { + "error": "Box must have value", + "op": "assert // Box must have value", + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "aggregate%box_get%0#0" + ] + }, + "4564": { + "op": "dig 2", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%box_get%0#0", + "assets#0", + "box_prefixed_key%0#0", + "escrow#0", + "i#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "aggregate%box_get%0#0", + "result#0" + ] + }, + "4566": { + "op": "dup" + }, + "4567": { + "op": "uncover 2", + "defined_out": [ + "aggregate%array_length%1#0", + "aggregate%box_get%0#0", + "assets#0", + "box_prefixed_key%0#0", + "escrow#0", + "i#0", + "result#0", + "result#0 (copy)" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "result#0", + "result#0 (copy)", + "aggregate%box_get%0#0" + ] + }, + "4569": { + "error": "max array length exceeded", + "op": "concat // on error: max array length exceeded", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "box_prefixed_key%0#0", + "concat%0#0", + "escrow#0", + "i#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "result#0", + "concat%0#0" + ] + }, + "4570": { + "op": "swap", + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "concat%0#0", + "result#0" + ] + }, + "4571": { + "op": "intc_0 // 0", + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "concat%0#0", + "result#0", + "0" + ] + }, + "4572": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "box_prefixed_key%0#0", + "concat%0#0", + "escrow#0", + "extract_uint16%0#0", + "i#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "concat%0#0", + "extract_uint16%0#0" + ] + }, + "4573": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "aggregate%array_length%1#0", + "assets#0", + "box_prefixed_key%0#0", + "concat%0#0", + "escrow#0", + "extract_uint16%0#0", + "i#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "concat%0#0", + "extract_uint16%0#0", + "1" + ] + }, + "4574": { + "op": "+", + "defined_out": [ + "add%0#0", + "aggregate%array_length%1#0", + "assets#0", + "box_prefixed_key%0#0", + "concat%0#0", + "escrow#0", + "i#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "concat%0#0", + "add%0#0" + ] + }, + "4575": { + "op": "itob", + "defined_out": [ + "aggregate%array_length%1#0", + "as_bytes%0#0", + "assets#0", + "box_prefixed_key%0#0", + "concat%0#0", + "escrow#0", + "i#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "concat%0#0", + "as_bytes%0#0" + ] + }, + "4576": { + "op": "extract 6 2", + "defined_out": [ + "aggregate%array_length%1#0", + "as_u16_bytes%0#0", + "assets#0", + "box_prefixed_key%0#0", + "concat%0#0", + "escrow#0", + "i#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "concat%0#0", + "as_u16_bytes%0#0" + ] + }, + "4579": { + "op": "replace2 0", + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "result#0" + ] + }, + "4581": { + "op": "bury 2", + "defined_out": [ + "aggregate%array_length%1#0", + "assets#0", + "box_prefixed_key%0#0", + "escrow#0", + "i#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0" + ] + }, + "4583": { + "block": "arc58_getAllowances_block@6", + "stack_in": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0" + ], + "op": "dup", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "i#0" + ] + }, + "4584": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "i#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "i#0", + "1" + ] + }, + "4585": { + "op": "+", + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "i#0" + ] + }, + "4586": { + "op": "bury 1", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0" + ] + }, + "4588": { + "op": "b arc58_getAllowances_while_top@2" + }, + "4591": { + "block": "arc58_getAllowances_after_if_else@5", + "stack_in": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0" + ], + "op": "dig 1", + "defined_out": [ + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "result#0" + ] + }, + "4593": { + "op": "dup", + "defined_out": [ + "result#0", + "result#0 (copy)" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "result#0", + "result#0 (copy)" + ] + }, + "4594": { + "op": "pushbytes 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "defined_out": [ + "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "result#0", + "result#0 (copy)" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "result#0", + "result#0 (copy)", + "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + ] + }, + "4646": { + "error": "max array length exceeded", + "op": "concat // on error: max array length exceeded", + "defined_out": [ + "concat%1#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "result#0", + "concat%1#0" + ] + }, + "4647": { + "op": "swap", + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "concat%1#0", + "result#0" + ] + }, + "4648": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "concat%1#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "concat%1#0", + "result#0", + "0" + ] + }, + "4649": { + "op": "extract_uint16", + "defined_out": [ + "concat%1#0", + "extract_uint16%1#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "concat%1#0", + "extract_uint16%1#0" + ] + }, + "4650": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "concat%1#0", + "extract_uint16%1#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "concat%1#0", + "extract_uint16%1#0", + "1" + ] + }, + "4651": { + "op": "+", + "defined_out": [ + "add%1#0", + "concat%1#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "concat%1#0", + "add%1#0" + ] + }, + "4652": { + "op": "itob", + "defined_out": [ + "as_bytes%1#0", + "concat%1#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "concat%1#0", + "as_bytes%1#0" + ] + }, + "4653": { + "op": "extract 6 2", + "defined_out": [ + "as_u16_bytes%1#0", + "concat%1#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "concat%1#0", + "as_u16_bytes%1#0" + ] + }, + "4656": { + "op": "replace2 0", + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "result#0" + ] + }, + "4658": { + "op": "bury 2", + "defined_out": [ + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0" + ] + }, + "4660": { + "op": "b arc58_getAllowances_block@6" + }, + "4663": { + "block": "arc58_getAllowances_after_while@7", + "stack_in": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0" + ], + "op": "bytec 7 // 0x151f7c75", + "defined_out": [ + "0x151f7c75" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "0x151f7c75" + ] + }, + "4665": { + "op": "dig 2", + "defined_out": [ + "0x151f7c75", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "0x151f7c75", + "result#0" + ] + }, + "4667": { + "op": "concat", + "defined_out": [ + "result#0", + "tmp%4#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "tmp%4#0" + ] + }, + "4668": { + "op": "log", + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0" + ] + }, + "4669": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0", + "1" + ] + }, + "4670": { + "op": "return", + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0", + "assets#0", + "aggregate%array_length%1#0", + "result#0", + "i#0" + ] + }, + "4671": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_getExecutions[routing]", + "params": {}, + "block": "arc58_getExecutions", + "stack_in": [], + "op": "intc_0 // 0", + "stack_out": [ + "box_prefixed_key%0#0" + ] + }, + "4672": { + "op": "txna ApplicationArgs 1" + }, + "4675": { + "op": "dupn 2", + "defined_out": [ + "leases#0", + "leases#0 (copy)" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "leases#0", + "leases#0 (copy)" + ] + }, + "4677": { + "op": "intc_0 // 0", + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "leases#0", + "leases#0 (copy)", + "0" + ] + }, + "4678": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%0#0", + "leases#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "leases#0", + "aggregate%array_length%0#0" + ] + }, + "4679": { + "op": "dup", + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "leases#0", + "aggregate%array_length%0#0", + "aggregate%array_length%0#0" + ] + }, + "4680": { + "op": "cover 2", + "defined_out": [ + "aggregate%array_length%0#0", + "leases#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "leases#0", + "aggregate%array_length%0#0" + ] + }, + "4682": { + "op": "pushint 32 // 32", + "defined_out": [ + "32", + "aggregate%array_length%0#0", + "leases#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "leases#0", + "aggregate%array_length%0#0", + "32" + ] + }, + "4684": { + "op": "*", + "defined_out": [ + "aggregate%array_length%0#0", + "leases#0", + "mul%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "leases#0", + "mul%0#0" + ] + }, + "4685": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "aggregate%array_length%0#0", + "leases#0", + "mul%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "leases#0", + "mul%0#0", + "2" + ] + }, + "4686": { + "op": "+", + "defined_out": [ + "add%0#0", + "aggregate%array_length%0#0", + "leases#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "leases#0", + "add%0#0" + ] + }, + "4687": { + "op": "swap", + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "add%0#0", + "leases#0" + ] + }, + "4688": { + "op": "len", + "defined_out": [ + "add%0#0", + "aggregate%array_length%0#0", + "leases#0", + "len%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "add%0#0", + "len%0#0" + ] + }, + "4689": { + "op": "==", + "defined_out": [ + "aggregate%array_length%0#0", + "eq%0#0", + "leases#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "eq%0#0" + ] + }, + "4690": { + "error": "invalid number of bytes for (len+uint8[32][])", + "op": "assert // invalid number of bytes for (len+uint8[32][])", + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0" + ] + }, + "4691": { + "op": "bytec 10 // 0x0000" + }, + "4693": { + "op": "intc_0 // 0", + "defined_out": [ + "aggregate%array_length%0#0", + "i#0", + "leases#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0" + ] + }, + "4694": { + "block": "arc58_getExecutions_while_top@2", + "stack_in": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0" + ], + "op": "dup", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "i#0" + ] + }, + "4695": { + "op": "dig 3", + "defined_out": [ + "aggregate%array_length%0#0", + "i#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "i#0", + "aggregate%array_length%0#0" + ] + }, + "4697": { + "op": "<", + "defined_out": [ + "aggregate%array_length%0#0", + "i#0", + "tmp%1#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "tmp%1#1" + ] + }, + "4698": { + "op": "bz arc58_getExecutions_after_while@7", + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0" + ] + }, + "4701": { + "op": "dig 3", + "defined_out": [ + "aggregate%array_length%0#0", + "i#0", + "leases#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "leases#0" + ] + }, + "4703": { + "op": "extract 2 0", + "defined_out": [ + "aggregate%array_length%0#0", + "aggregate%array_trimmed%0#0", + "i#0", + "leases#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "aggregate%array_trimmed%0#0" + ] + }, + "4706": { + "op": "dig 1", + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "aggregate%array_trimmed%0#0", + "i#0" + ] + }, + "4708": { + "op": "pushint 32 // 32", + "defined_out": [ + "32", + "aggregate%array_length%0#0", + "aggregate%array_trimmed%0#0", + "i#0", + "leases#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "aggregate%array_trimmed%0#0", + "i#0", + "32" + ] + }, + "4710": { + "op": "*", + "defined_out": [ + "aggregate%array_length%0#0", + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0", + "i#0", + "leases#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0" + ] + }, + "4711": { + "op": "pushint 32 // 32", + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0", + "32" + ] + }, + "4713": { + "error": "index access is out of bounds", + "op": "extract3 // on error: index access is out of bounds", + "defined_out": [ + "aggregate%array_length%0#0", + "aggregate%encoded_element%0#0", + "i#0", + "leases#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "aggregate%encoded_element%0#0" + ] + }, + "4714": { + "op": "bytec 8 // \"x\"", + "defined_out": [ + "\"x\"", + "aggregate%array_length%0#0", + "aggregate%encoded_element%0#0", + "i#0", + "leases#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "aggregate%encoded_element%0#0", + "\"x\"" + ] + }, + "4716": { + "op": "swap", + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "\"x\"", + "aggregate%encoded_element%0#0" + ] + }, + "4717": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%0#0", + "box_prefixed_key%0#0", + "i#0", + "leases#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "box_prefixed_key%0#0" + ] + }, + "4718": { + "op": "dup", + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0" + ] + }, + "4719": { + "op": "bury 6", + "defined_out": [ + "aggregate%array_length%0#0", + "box_prefixed_key%0#0", + "i#0", + "leases#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "box_prefixed_key%0#0" + ] + }, + "4721": { + "op": "box_len", + "defined_out": [ + "_%0#0", + "aggregate%array_length%0#0", + "box_prefixed_key%0#0", + "i#0", + "leases#0", + "maybe_exists%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "_%0#0", + "maybe_exists%0#0" + ] + }, + "4722": { + "op": "bury 1", + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "maybe_exists%0#0" + ] + }, + "4724": { + "op": "bz arc58_getExecutions_after_if_else@5", + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0" + ] + }, + "4727": { + "op": "dig 4", + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "box_prefixed_key%0#0" + ] + }, + "4729": { + "op": "box_get", + "defined_out": [ + "aggregate%array_length%0#0", + "aggregate%box_get%0#0", + "aggregate%box_get%1#0", + "box_prefixed_key%0#0", + "i#0", + "leases#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "aggregate%box_get%0#0", + "aggregate%box_get%1#0" + ] + }, + "4730": { + "error": "Box must have value", + "op": "assert // Box must have value", + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "aggregate%box_get%0#0" + ] + }, + "4731": { + "op": "dig 2", + "defined_out": [ + "aggregate%array_length%0#0", + "aggregate%box_get%0#0", + "box_prefixed_key%0#0", + "i#0", + "leases#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "aggregate%box_get%0#0", + "result#0" + ] + }, + "4733": { + "op": "dup", + "defined_out": [ + "aggregate%array_length%0#0", + "aggregate%box_get%0#0", + "box_prefixed_key%0#0", + "i#0", + "leases#0", + "result#0", + "result#0 (copy)" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "aggregate%box_get%0#0", + "result#0", + "result#0 (copy)" + ] + }, + "4734": { + "op": "intc_0 // 0", + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "aggregate%box_get%0#0", + "result#0", + "result#0 (copy)", + "0" + ] + }, + "4735": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%0#0", + "aggregate%box_get%0#0", + "box_prefixed_key%0#0", + "extract_uint16%0#0", + "i#0", + "leases#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "aggregate%box_get%0#0", + "result#0", + "extract_uint16%0#0" + ] + }, + "4736": { + "op": "swap", + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "aggregate%box_get%0#0", + "extract_uint16%0#0", + "result#0" + ] + }, + "4737": { + "op": "extract 2 0", + "defined_out": [ + "aggregate%array_length%0#0", + "aggregate%box_get%0#0", + "box_prefixed_key%0#0", + "extract_to_end%0#0", + "extract_uint16%0#0", + "i#0", + "leases#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "aggregate%box_get%0#0", + "extract_uint16%0#0", + "extract_to_end%0#0" + ] + }, + "4740": { + "op": "bytec 20 // 0x0002", + "defined_out": [ + "0x0002", + "aggregate%array_length%0#0", + "aggregate%box_get%0#0", + "box_prefixed_key%0#0", + "extract_to_end%0#0", + "extract_uint16%0#0", + "i#0", + "leases#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "aggregate%box_get%0#0", + "extract_uint16%0#0", + "extract_to_end%0#0", + "0x0002" + ] + }, + "4742": { + "op": "uncover 3", + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "extract_uint16%0#0", + "extract_to_end%0#0", + "0x0002", + "aggregate%box_get%0#0" + ] + }, + "4744": { + "op": "concat", + "defined_out": [ + "aggregate%array_length%0#0", + "aggregate%concat%0#0", + "box_prefixed_key%0#0", + "extract_to_end%0#0", + "extract_uint16%0#0", + "i#0", + "leases#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "extract_uint16%0#0", + "extract_to_end%0#0", + "aggregate%concat%0#0" + ] + }, + "4745": { + "op": "cover 2", + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "aggregate%concat%0#0", + "extract_uint16%0#0", + "extract_to_end%0#0" + ] + }, + "4747": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "aggregate%array_length%0#0", + "aggregate%concat%0#0", + "box_prefixed_key%0#0", + "extract_to_end%0#0", + "extract_uint16%0#0", + "i#0", + "leases#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "aggregate%concat%0#0", + "extract_uint16%0#0", + "extract_to_end%0#0", + "1" + ] + }, + "4748": { + "op": "uncover 3", + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "extract_uint16%0#0", + "extract_to_end%0#0", + "1", + "aggregate%concat%0#0" + ] + }, + "4750": { + "callsub": "_puya_lib.arc4.dynamic_array_concat_dynamic_element", + "op": "callsub dynamic_array_concat_dynamic_element", + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "result#0" + ] + }, + "4753": { + "op": "bury 2", + "defined_out": [ + "aggregate%array_length%0#0", + "box_prefixed_key%0#0", + "i#0", + "leases#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0" + ] + }, + "4755": { + "block": "arc58_getExecutions_block@6", + "stack_in": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0" + ], + "op": "dup", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "i#0" + ] + }, + "4756": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "i#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "i#0", + "1" + ] + }, + "4757": { + "op": "+", + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "i#0" + ] + }, + "4758": { + "op": "bury 1", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0" + ] + }, + "4760": { + "op": "b arc58_getExecutions_while_top@2" + }, + "4763": { + "block": "arc58_getExecutions_after_if_else@5", + "stack_in": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0" + ], + "op": "dig 1", + "defined_out": [ + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "result#0" + ] + }, + "4765": { + "op": "dup", + "defined_out": [ + "result#0", + "result#0 (copy)" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "result#0", + "result#0 (copy)" + ] + }, + "4766": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "result#0", + "result#0 (copy)" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "result#0", + "result#0 (copy)", + "0" + ] + }, + "4767": { + "op": "extract_uint16", + "defined_out": [ + "extract_uint16%1#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "result#0", + "extract_uint16%1#0" + ] + }, + "4768": { + "op": "swap", + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "extract_uint16%1#0", + "result#0" + ] + }, + "4769": { + "op": "extract 2 0", + "defined_out": [ + "extract_to_end%1#0", + "extract_uint16%1#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "extract_uint16%1#0", + "extract_to_end%1#0" + ] + }, + "4772": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "extract_to_end%1#0", + "extract_uint16%1#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "extract_uint16%1#0", + "extract_to_end%1#0", + "1" + ] + }, + "4773": { + "op": "pushbytes 0x00020012000000000000000000000000000000000000", + "defined_out": [ + "0x00020012000000000000000000000000000000000000", + "1", + "extract_to_end%1#0", + "extract_uint16%1#0", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "extract_uint16%1#0", + "extract_to_end%1#0", + "1", + "0x00020012000000000000000000000000000000000000" + ] + }, + "4797": { + "callsub": "_puya_lib.arc4.dynamic_array_concat_dynamic_element", + "op": "callsub dynamic_array_concat_dynamic_element", + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "result#0" + ] + }, + "4800": { + "op": "bury 2", + "defined_out": [ + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0" + ] + }, + "4802": { + "op": "b arc58_getExecutions_block@6" + }, + "4805": { + "block": "arc58_getExecutions_after_while@7", + "stack_in": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0" + ], + "op": "bytec 7 // 0x151f7c75", + "defined_out": [ + "0x151f7c75" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "0x151f7c75" + ] + }, + "4807": { + "op": "dig 2", + "defined_out": [ + "0x151f7c75", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "0x151f7c75", + "result#0" + ] + }, + "4809": { + "op": "concat", + "defined_out": [ + "result#0", + "tmp%2#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "tmp%2#0" + ] + }, + "4810": { + "op": "log", + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0" + ] + }, + "4811": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "result#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0", + "1" + ] + }, + "4812": { + "op": "return", + "stack_out": [ + "box_prefixed_key%0#0", + "leases#0", + "aggregate%array_length%0#0", + "result#0", + "i#0" + ] + }, + "4813": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.mbr[routing]", + "params": {}, + "block": "mbr", + "stack_in": [], + "op": "txna ApplicationArgs 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] + }, + "4816": { + "op": "dup", + "defined_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ] + }, + "4817": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "tmp%0#0", + "tmp%0#0 (copy)", + "0" + ] + }, + "4818": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "aggregate%array_length%0#0" + ] + }, + "4819": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "aggregate%array_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "aggregate%array_length%0#0", + "2" + ] + }, + "4820": { + "op": "+", + "defined_out": [ + "add%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "add%0#0" + ] + }, + "4821": { + "op": "dig 1", + "stack_out": [ + "tmp%0#0", + "add%0#0", + "tmp%0#0 (copy)" + ] + }, + "4823": { + "op": "len", + "defined_out": [ + "add%0#0", + "len%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "add%0#0", + "len%0#0" + ] + }, + "4824": { + "op": "==", + "defined_out": [ + "eq%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "eq%0#0" + ] + }, + "4825": { + "error": "invalid number of bytes for (len+utf8[])", + "op": "assert // invalid number of bytes for (len+utf8[])", + "stack_out": [ + "tmp%0#0" + ] + }, + "4826": { + "op": "extract 2 0", + "defined_out": [ + "escrow#0" + ], + "stack_out": [ + "escrow#0" + ] + }, + "4829": { + "op": "txna ApplicationArgs 2", + "defined_out": [ + "escrow#0", + "tmp%2#0" + ], + "stack_out": [ + "escrow#0", + "tmp%2#0" + ] + }, + "4832": { + "op": "dup", + "defined_out": [ + "escrow#0", + "tmp%2#0", + "tmp%2#0 (copy)" + ], + "stack_out": [ + "escrow#0", + "tmp%2#0", + "tmp%2#0 (copy)" + ] + }, + "4833": { + "op": "len", + "defined_out": [ + "escrow#0", + "len%1#0", + "tmp%2#0" + ], + "stack_out": [ + "escrow#0", + "tmp%2#0", + "len%1#0" + ] + }, + "4834": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "escrow#0", + "len%1#0", + "tmp%2#0" + ], + "stack_out": [ + "escrow#0", + "tmp%2#0", + "len%1#0", + "8" + ] + }, + "4835": { + "op": "==", + "defined_out": [ + "eq%1#0", + "escrow#0", + "tmp%2#0" + ], + "stack_out": [ + "escrow#0", + "tmp%2#0", + "eq%1#0" + ] + }, + "4836": { + "error": "invalid number of bytes for uint64", + "op": "assert // invalid number of bytes for uint64", + "stack_out": [ + "escrow#0", + "tmp%2#0" + ] + }, + "4837": { + "op": "btoi", + "defined_out": [ + "escrow#0", + "methodCount#0" + ], + "stack_out": [ + "escrow#0", + "methodCount#0" + ] + }, + "4838": { + "op": "txna ApplicationArgs 3", + "defined_out": [ + "escrow#0", + "methodCount#0", + "tmp%4#0" + ], + "stack_out": [ + "escrow#0", + "methodCount#0", + "tmp%4#0" + ] + }, + "4841": { + "op": "dup", + "defined_out": [ + "escrow#0", + "methodCount#0", + "tmp%4#0", + "tmp%4#0 (copy)" + ], + "stack_out": [ + "escrow#0", + "methodCount#0", + "tmp%4#0", + "tmp%4#0 (copy)" + ] + }, + "4842": { + "op": "intc_0 // 0", + "stack_out": [ + "escrow#0", + "methodCount#0", + "tmp%4#0", + "tmp%4#0 (copy)", + "0" + ] + }, + "4843": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%1#0", + "escrow#0", + "methodCount#0", + "tmp%4#0" + ], + "stack_out": [ + "escrow#0", + "methodCount#0", + "tmp%4#0", + "aggregate%array_length%1#0" + ] + }, + "4844": { + "op": "intc_2 // 2", + "stack_out": [ + "escrow#0", + "methodCount#0", + "tmp%4#0", + "aggregate%array_length%1#0", + "2" + ] + }, + "4845": { + "op": "+", + "defined_out": [ + "add%1#0", + "escrow#0", + "methodCount#0", + "tmp%4#0" + ], + "stack_out": [ + "escrow#0", + "methodCount#0", + "tmp%4#0", + "add%1#0" + ] + }, + "4846": { + "op": "dig 1", + "stack_out": [ + "escrow#0", + "methodCount#0", + "tmp%4#0", + "add%1#0", + "tmp%4#0 (copy)" + ] + }, + "4848": { + "op": "len", + "defined_out": [ + "add%1#0", + "escrow#0", + "len%2#0", + "methodCount#0", + "tmp%4#0" + ], + "stack_out": [ + "escrow#0", + "methodCount#0", + "tmp%4#0", + "add%1#0", + "len%2#0" + ] + }, + "4849": { + "op": "==", + "defined_out": [ + "eq%2#0", + "escrow#0", + "methodCount#0", + "tmp%4#0" + ], + "stack_out": [ + "escrow#0", + "methodCount#0", + "tmp%4#0", + "eq%2#0" + ] + }, + "4850": { + "error": "invalid number of bytes for (len+utf8[])", + "op": "assert // invalid number of bytes for (len+utf8[])", + "stack_out": [ + "escrow#0", + "methodCount#0", + "tmp%4#0" + ] + }, + "4851": { + "op": "extract 2 0", + "defined_out": [ + "escrow#0", + "methodCount#0", + "plugin#0" + ], + "stack_out": [ + "escrow#0", + "methodCount#0", + "plugin#0" + ] + }, + "4854": { + "op": "txna ApplicationArgs 4", + "defined_out": [ + "escrow#0", + "methodCount#0", + "plugin#0", + "tmp%6#0" + ], + "stack_out": [ + "escrow#0", + "methodCount#0", + "plugin#0", + "tmp%6#0" + ] + }, + "4857": { + "op": "dup", + "defined_out": [ + "escrow#0", + "methodCount#0", + "plugin#0", + "tmp%6#0", + "tmp%6#0 (copy)" + ], + "stack_out": [ + "escrow#0", + "methodCount#0", + "plugin#0", + "tmp%6#0", + "tmp%6#0 (copy)" + ] + }, + "4858": { + "op": "len", + "defined_out": [ + "escrow#0", + "len%3#0", + "methodCount#0", + "plugin#0", + "tmp%6#0" + ], + "stack_out": [ + "escrow#0", + "methodCount#0", + "plugin#0", + "tmp%6#0", + "len%3#0" + ] + }, + "4859": { + "op": "intc_3 // 8", + "stack_out": [ + "escrow#0", + "methodCount#0", + "plugin#0", + "tmp%6#0", + "len%3#0", + "8" + ] + }, + "4860": { + "op": "==", + "defined_out": [ + "eq%3#0", + "escrow#0", + "methodCount#0", + "plugin#0", + "tmp%6#0" + ], + "stack_out": [ + "escrow#0", + "methodCount#0", + "plugin#0", + "tmp%6#0", + "eq%3#0" + ] + }, + "4861": { + "error": "invalid number of bytes for uint64", + "op": "assert // invalid number of bytes for uint64", + "stack_out": [ + "escrow#0", + "methodCount#0", + "plugin#0", + "tmp%6#0" + ] + }, + "4862": { + "op": "btoi", + "defined_out": [ + "escrow#0", + "groups#0", + "methodCount#0", + "plugin#0" + ], + "stack_out": [ + "escrow#0", + "methodCount#0", + "plugin#0", + "groups#0" + ] + }, + "4863": { + "op": "dig 3", + "defined_out": [ + "escrow#0", + "escrow#0 (copy)", + "groups#0", + "methodCount#0", + "plugin#0" + ], + "stack_out": [ + "escrow#0", + "methodCount#0", + "plugin#0", + "groups#0", + "escrow#0 (copy)" + ] + }, + "4865": { + "op": "len", + "defined_out": [ + "escrow#0", + "groups#0", + "methodCount#0", + "plugin#0", + "tmp%0#1" + ], + "stack_out": [ + "escrow#0", + "methodCount#0", + "plugin#0", + "groups#0", + "tmp%0#1" + ] + }, + "4866": { + "op": "intc 4 // 400", + "defined_out": [ + "400", + "escrow#0", + "groups#0", + "methodCount#0", + "plugin#0", + "tmp%0#1" + ], + "stack_out": [ + "escrow#0", + "methodCount#0", + "plugin#0", + "groups#0", + "tmp%0#1", + "400" + ] + }, + "4868": { + "op": "*", + "defined_out": [ + "escrow#0", + "groups#0", + "methodCount#0", + "plugin#0", + "tmp%1#2" + ], + "stack_out": [ + "escrow#0", + "methodCount#0", + "plugin#0", + "groups#0", + "tmp%1#2" + ] + }, + "4869": { + "op": "pushint 6500 // 6500", + "defined_out": [ + "6500", + "escrow#0", + "groups#0", + "methodCount#0", + "plugin#0", + "tmp%1#2" + ], + "stack_out": [ + "escrow#0", + "methodCount#0", + "plugin#0", + "groups#0", + "tmp%1#2", + "6500" + ] + }, + "4872": { + "op": "dig 1", + "defined_out": [ + "6500", + "escrow#0", + "groups#0", + "methodCount#0", + "plugin#0", + "tmp%1#2", + "tmp%1#2 (copy)" + ], + "stack_out": [ + "escrow#0", + "methodCount#0", + "plugin#0", + "groups#0", + "tmp%1#2", + "6500", + "tmp%1#2 (copy)" + ] + }, + "4874": { + "op": "+", + "defined_out": [ + "escrow#0", + "escrows#0", + "groups#0", + "methodCount#0", + "plugin#0", + "tmp%1#2" + ], + "stack_out": [ + "escrow#0", + "methodCount#0", + "plugin#0", + "groups#0", + "tmp%1#2", + "escrows#0" + ] + }, + "4875": { + "op": "dig 5", + "stack_out": [ + "escrow#0", + "methodCount#0", + "plugin#0", + "groups#0", + "tmp%1#2", + "escrows#0", + "escrow#0 (copy)" + ] + }, + "4877": { + "op": "uncover 5", + "stack_out": [ + "escrow#0", + "plugin#0", + "groups#0", + "tmp%1#2", + "escrows#0", + "escrow#0 (copy)", + "methodCount#0" + ] + }, + "4879": { + "callsub": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.pluginsMbr", + "op": "callsub pluginsMbr", + "defined_out": [ + "escrow#0", + "escrows#0", + "groups#0", + "plugin#0", + "tmp%1#1", + "tmp%1#2" + ], + "stack_out": [ + "escrow#0", + "plugin#0", + "groups#0", + "tmp%1#2", + "escrows#0", + "tmp%1#1" + ] + }, + "4882": { + "op": "uncover 4", + "stack_out": [ + "escrow#0", + "groups#0", + "tmp%1#2", + "escrows#0", + "tmp%1#1", + "plugin#0" + ] + }, + "4884": { + "op": "len", + "stack_out": [ + "escrow#0", + "groups#0", + "tmp%1#2", + "escrows#0", + "tmp%1#1", + "tmp%0#1" + ] + }, + "4885": { + "op": "intc 4 // 400", + "stack_out": [ + "escrow#0", + "groups#0", + "tmp%1#2", + "escrows#0", + "tmp%1#1", + "tmp%0#1", + "400" + ] + }, + "4887": { + "op": "*", + "defined_out": [ + "escrow#0", + "escrows#0", + "groups#0", + "tmp%1#1", + "tmp%1#2", + "tmp%1#4" + ], + "stack_out": [ + "escrow#0", + "groups#0", + "tmp%1#2", + "escrows#0", + "tmp%1#1", + "tmp%1#4" + ] + }, + "4888": { + "op": "intc 5 // 21700", + "defined_out": [ + "21700", + "escrow#0", + "escrows#0", + "groups#0", + "tmp%1#1", + "tmp%1#2", + "tmp%1#4" + ], + "stack_out": [ + "escrow#0", + "groups#0", + "tmp%1#2", + "escrows#0", + "tmp%1#1", + "tmp%1#4", + "21700" + ] + }, + "4890": { + "op": "+", + "defined_out": [ + "escrow#0", + "escrows#0", + "groups#0", + "tmp%1#1", + "tmp%1#2", + "tmp%2#4" + ], + "stack_out": [ + "escrow#0", + "groups#0", + "tmp%1#2", + "escrows#0", + "tmp%1#1", + "tmp%2#4" + ] + }, + "4891": { + "op": "intc 6 // 27700", + "defined_out": [ + "27700", + "escrow#0", + "escrows#0", + "groups#0", + "tmp%1#1", + "tmp%1#2", + "tmp%2#4" + ], + "stack_out": [ + "escrow#0", + "groups#0", + "tmp%1#2", + "escrows#0", + "tmp%1#1", + "tmp%2#4", + "27700" + ] + }, + "4893": { + "op": "uncover 4", + "stack_out": [ + "escrow#0", + "groups#0", + "escrows#0", + "tmp%1#1", + "tmp%2#4", + "27700", + "tmp%1#2" + ] + }, + "4895": { + "op": "+", + "defined_out": [ + "escrow#0", + "escrows#0", + "groups#0", + "tmp%1#1", + "tmp%2#4", + "tmp%2#5" + ], + "stack_out": [ + "escrow#0", + "groups#0", + "escrows#0", + "tmp%1#1", + "tmp%2#4", + "tmp%2#5" + ] + }, + "4896": { + "op": "uncover 4", + "stack_out": [ + "escrow#0", + "escrows#0", + "tmp%1#1", + "tmp%2#4", + "tmp%2#5", + "groups#0" + ] + }, + "4898": { + "op": "pushint 12800 // 12800", + "defined_out": [ + "12800", + "escrow#0", + "escrows#0", + "groups#0", + "tmp%1#1", + "tmp%2#4", + "tmp%2#5" + ], + "stack_out": [ + "escrow#0", + "escrows#0", + "tmp%1#1", + "tmp%2#4", + "tmp%2#5", + "groups#0", + "12800" + ] + }, + "4901": { + "op": "*", + "stack_out": [ + "escrow#0", + "escrows#0", + "tmp%1#1", + "tmp%2#4", + "tmp%2#5", + "tmp%1#2" + ] + }, + "4902": { + "op": "pushint 20500 // 20500", + "defined_out": [ + "20500", + "escrow#0", + "escrows#0", + "tmp%1#1", + "tmp%1#2", + "tmp%2#4", + "tmp%2#5" + ], + "stack_out": [ + "escrow#0", + "escrows#0", + "tmp%1#1", + "tmp%2#4", + "tmp%2#5", + "tmp%1#2", + "20500" + ] + }, + "4906": { + "op": "+", + "defined_out": [ + "escrow#0", + "escrows#0", + "tmp%1#1", + "tmp%2#2", + "tmp%2#4", + "tmp%2#5" + ], + "stack_out": [ + "escrow#0", + "escrows#0", + "tmp%1#1", + "tmp%2#4", + "tmp%2#5", + "tmp%2#2" + ] + }, + "4907": { + "op": "bytec 5 // \"e\"", + "defined_out": [ + "\"e\"", + "escrow#0", + "escrows#0", + "tmp%1#1", + "tmp%2#2", + "tmp%2#4", + "tmp%2#5" + ], + "stack_out": [ + "escrow#0", + "escrows#0", + "tmp%1#1", + "tmp%2#4", + "tmp%2#5", + "tmp%2#2", + "\"e\"" + ] + }, + "4909": { + "op": "uncover 6", + "stack_out": [ + "escrows#0", + "tmp%1#1", + "tmp%2#4", + "tmp%2#5", + "tmp%2#2", + "\"e\"", + "escrow#0" + ] + }, + "4911": { + "op": "concat", + "defined_out": [ + "box_prefixed_key%0#0", + "escrows#0", + "tmp%1#1", + "tmp%2#2", + "tmp%2#4", + "tmp%2#5" + ], + "stack_out": [ + "escrows#0", + "tmp%1#1", + "tmp%2#4", + "tmp%2#5", + "tmp%2#2", + "box_prefixed_key%0#0" + ] + }, + "4912": { + "op": "box_len", + "defined_out": [ + "_%0#0", + "escrows#0", + "maybe_exists%0#0", + "tmp%1#1", + "tmp%2#2", + "tmp%2#4", + "tmp%2#5" + ], + "stack_out": [ + "escrows#0", + "tmp%1#1", + "tmp%2#4", + "tmp%2#5", + "tmp%2#2", + "_%0#0", + "maybe_exists%0#0" + ] + }, + "4913": { + "op": "cover 6", + "stack_out": [ + "maybe_exists%0#0", + "escrows#0", + "tmp%1#1", + "tmp%2#4", + "tmp%2#5", + "tmp%2#2", + "_%0#0" + ] + }, + "4915": { + "op": "pop", + "stack_out": [ + "maybe_exists%0#0", + "escrows#0", + "tmp%1#1", + "tmp%2#4", + "tmp%2#5", + "tmp%2#2" + ] + }, + "4916": { + "op": "global MinBalance", + "defined_out": [ + "escrows#0", + "maybe_exists%0#0", + "tmp%1#1", + "tmp%2#2", + "tmp%2#4", + "tmp%2#5", + "tmp%5#1" + ], + "stack_out": [ + "maybe_exists%0#0", + "escrows#0", + "tmp%1#1", + "tmp%2#4", + "tmp%2#5", + "tmp%2#2", + "tmp%5#1" + ] + }, + "4918": { + "op": "pushint 162100 // 162100", + "defined_out": [ + "162100", + "escrows#0", + "maybe_exists%0#0", + "tmp%1#1", + "tmp%2#2", + "tmp%2#4", + "tmp%2#5", + "tmp%5#1" + ], + "stack_out": [ + "maybe_exists%0#0", + "escrows#0", + "tmp%1#1", + "tmp%2#4", + "tmp%2#5", + "tmp%2#2", + "tmp%5#1", + "162100" + ] + }, + "4922": { + "op": "+", + "defined_out": [ + "escrows#0", + "maybe_exists%0#0", + "tmp%1#1", + "tmp%2#2", + "tmp%2#4", + "tmp%2#5", + "tmp%7#1" + ], + "stack_out": [ + "maybe_exists%0#0", + "escrows#0", + "tmp%1#1", + "tmp%2#4", + "tmp%2#5", + "tmp%2#2", + "tmp%7#1" + ] + }, + "4923": { + "op": "dig 5", + "defined_out": [ + "escrows#0", + "escrows#0 (copy)", + "maybe_exists%0#0", + "tmp%1#1", + "tmp%2#2", + "tmp%2#4", + "tmp%2#5", + "tmp%7#1" + ], + "stack_out": [ + "maybe_exists%0#0", + "escrows#0", + "tmp%1#1", + "tmp%2#4", + "tmp%2#5", + "tmp%2#2", + "tmp%7#1", + "escrows#0 (copy)" + ] + }, + "4925": { + "op": "+", + "defined_out": [ + "escrows#0", + "maybe_exists%0#0", + "tmp%1#1", + "tmp%2#2", + "tmp%2#4", + "tmp%2#5", + "tmp%8#1" + ], + "stack_out": [ + "maybe_exists%0#0", + "escrows#0", + "tmp%1#1", + "tmp%2#4", + "tmp%2#5", + "tmp%2#2", + "tmp%8#1" + ] + }, + "4926": { + "op": "uncover 4", + "stack_out": [ + "maybe_exists%0#0", + "escrows#0", + "tmp%2#4", + "tmp%2#5", + "tmp%2#2", + "tmp%8#1", + "tmp%1#1" + ] + }, + "4928": { + "op": "itob", + "defined_out": [ + "aggregate%val_as_bytes%0#0", + "escrows#0", + "maybe_exists%0#0", + "tmp%2#2", + "tmp%2#4", + "tmp%2#5", + "tmp%8#1" + ], + "stack_out": [ + "maybe_exists%0#0", + "escrows#0", + "tmp%2#4", + "tmp%2#5", + "tmp%2#2", + "tmp%8#1", + "aggregate%val_as_bytes%0#0" + ] + }, + "4929": { + "op": "uncover 4", + "stack_out": [ + "maybe_exists%0#0", + "escrows#0", + "tmp%2#5", + "tmp%2#2", + "tmp%8#1", + "aggregate%val_as_bytes%0#0", + "tmp%2#4" + ] + }, + "4931": { + "op": "itob", + "defined_out": [ + "aggregate%val_as_bytes%0#0", + "aggregate%val_as_bytes%1#0", + "escrows#0", + "maybe_exists%0#0", + "tmp%2#2", + "tmp%2#5", + "tmp%8#1" + ], + "stack_out": [ + "maybe_exists%0#0", + "escrows#0", + "tmp%2#5", + "tmp%2#2", + "tmp%8#1", + "aggregate%val_as_bytes%0#0", + "aggregate%val_as_bytes%1#0" + ] + }, + "4932": { + "op": "concat", + "defined_out": [ + "aggregate%head%1#0", + "escrows#0", + "maybe_exists%0#0", + "tmp%2#2", + "tmp%2#5", + "tmp%8#1" + ], + "stack_out": [ + "maybe_exists%0#0", + "escrows#0", + "tmp%2#5", + "tmp%2#2", + "tmp%8#1", + "aggregate%head%1#0" + ] + }, + "4933": { + "op": "uncover 4", + "stack_out": [ + "maybe_exists%0#0", + "tmp%2#5", + "tmp%2#2", + "tmp%8#1", + "aggregate%head%1#0", + "escrows#0" + ] + }, + "4935": { + "op": "itob", + "defined_out": [ + "aggregate%head%1#0", + "aggregate%val_as_bytes%2#0", + "maybe_exists%0#0", + "tmp%2#2", + "tmp%2#5", + "tmp%8#1" + ], + "stack_out": [ + "maybe_exists%0#0", + "tmp%2#5", + "tmp%2#2", + "tmp%8#1", + "aggregate%head%1#0", + "aggregate%val_as_bytes%2#0" + ] + }, + "4936": { + "op": "concat", + "defined_out": [ + "aggregate%head%2#0", + "maybe_exists%0#0", + "tmp%2#2", + "tmp%2#5", + "tmp%8#1" + ], + "stack_out": [ + "maybe_exists%0#0", + "tmp%2#5", + "tmp%2#2", + "tmp%8#1", + "aggregate%head%2#0" + ] + }, + "4937": { + "op": "uncover 3", + "stack_out": [ + "maybe_exists%0#0", + "tmp%2#2", + "tmp%8#1", + "aggregate%head%2#0", + "tmp%2#5" + ] + }, + "4939": { + "op": "itob", + "defined_out": [ + "aggregate%head%2#0", + "aggregate%val_as_bytes%3#0", + "maybe_exists%0#0", + "tmp%2#2", + "tmp%8#1" + ], + "stack_out": [ + "maybe_exists%0#0", + "tmp%2#2", + "tmp%8#1", + "aggregate%head%2#0", + "aggregate%val_as_bytes%3#0" + ] + }, + "4940": { + "op": "concat", + "defined_out": [ + "aggregate%head%3#0", + "maybe_exists%0#0", + "tmp%2#2", + "tmp%8#1" + ], + "stack_out": [ + "maybe_exists%0#0", + "tmp%2#2", + "tmp%8#1", + "aggregate%head%3#0" + ] + }, + "4941": { + "op": "uncover 2", + "stack_out": [ + "maybe_exists%0#0", + "tmp%8#1", + "aggregate%head%3#0", + "tmp%2#2" + ] + }, + "4943": { + "op": "itob", + "defined_out": [ + "aggregate%head%3#0", + "aggregate%val_as_bytes%4#0", + "maybe_exists%0#0", + "tmp%8#1" + ], + "stack_out": [ + "maybe_exists%0#0", + "tmp%8#1", + "aggregate%head%3#0", + "aggregate%val_as_bytes%4#0" + ] + }, + "4944": { + "op": "concat", + "defined_out": [ + "aggregate%head%4#0", + "maybe_exists%0#0", + "tmp%8#1" + ], + "stack_out": [ + "maybe_exists%0#0", + "tmp%8#1", + "aggregate%head%4#0" + ] + }, + "4945": { + "op": "bytec 9 // 0x00", + "defined_out": [ + "0x00", + "aggregate%head%4#0", + "maybe_exists%0#0", + "tmp%8#1" + ], + "stack_out": [ + "maybe_exists%0#0", + "tmp%8#1", + "aggregate%head%4#0", + "0x00" + ] + }, + "4947": { + "op": "intc_0 // 0", + "stack_out": [ + "maybe_exists%0#0", + "tmp%8#1", + "aggregate%head%4#0", + "0x00", + "0" + ] + }, + "4948": { + "op": "uncover 4", + "stack_out": [ + "tmp%8#1", + "aggregate%head%4#0", + "0x00", + "0", + "maybe_exists%0#0" + ] + }, + "4950": { + "op": "setbit", + "defined_out": [ + "aggregate%encoded_bool%0#0", + "aggregate%head%4#0", + "tmp%8#1" + ], + "stack_out": [ + "tmp%8#1", + "aggregate%head%4#0", + "aggregate%encoded_bool%0#0" + ] + }, + "4951": { + "op": "concat", + "defined_out": [ + "aggregate%head%5#0", + "tmp%8#1" + ], + "stack_out": [ + "tmp%8#1", + "aggregate%head%5#0" + ] + }, + "4952": { + "op": "swap", + "stack_out": [ + "aggregate%head%5#0", + "tmp%8#1" + ] + }, + "4953": { + "op": "itob", + "defined_out": [ + "aggregate%head%5#0", + "aggregate%val_as_bytes%5#0" + ], + "stack_out": [ + "aggregate%head%5#0", + "aggregate%val_as_bytes%5#0" + ] + }, + "4954": { + "op": "concat", + "defined_out": [ + "aggregate%head%6#0" + ], + "stack_out": [ + "aggregate%head%6#0" + ] + }, + "4955": { + "op": "bytec 7 // 0x151f7c75", + "defined_out": [ + "0x151f7c75", + "aggregate%head%6#0" + ], + "stack_out": [ + "aggregate%head%6#0", + "0x151f7c75" + ] + }, + "4957": { + "op": "swap", + "stack_out": [ + "0x151f7c75", + "aggregate%head%6#0" + ] + }, + "4958": { + "op": "concat", + "defined_out": [ + "tmp%9#0" + ], + "stack_out": [ + "tmp%9#0" + ] + }, + "4959": { + "op": "log", + "stack_out": [] + }, + "4960": { + "op": "intc_1 // 1", + "defined_out": [ + "1" + ], + "stack_out": [ + "1" + ] + }, + "4961": { + "op": "return", + "stack_out": [] + }, + "4962": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.pluginsMbr", + "params": { + "escrow#0": "bytes", + "methodCount#0": "uint64" + }, + "block": "pluginsMbr", + "stack_in": [], + "op": "proto 2 1" + }, + "4965": { + "op": "pushint 20 // 20", + "defined_out": [ + "20" + ], + "stack_out": [ + "20" + ] + }, + "4967": { + "op": "frame_dig -1", + "defined_out": [ + "20", + "methodCount#0 (copy)" + ], + "stack_out": [ + "20", + "methodCount#0 (copy)" + ] + }, + "4969": { + "op": "*", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] + }, + "4970": { + "op": "frame_dig -2", + "defined_out": [ + "escrow#0 (copy)", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "escrow#0 (copy)" + ] + }, + "4972": { + "op": "len", + "defined_out": [ + "tmp%0#0", + "tmp%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0" + ] + }, + "4973": { + "op": "+", + "defined_out": [ + "tmp%2#0" + ], + "stack_out": [ + "tmp%2#0" + ] + }, + "4974": { + "op": "intc 4 // 400", + "defined_out": [ + "400", + "tmp%2#0" + ], + "stack_out": [ + "tmp%2#0", + "400" + ] + }, + "4976": { + "op": "*", + "defined_out": [ + "tmp%3#0" + ], + "stack_out": [ + "tmp%3#0" + ] + }, + "4977": { + "op": "pushint 38900 // 38900", + "defined_out": [ + "38900", + "tmp%3#0" + ], + "stack_out": [ + "tmp%3#0", + "38900" + ] + }, + "4981": { + "op": "+", + "defined_out": [ + "tmp%4#0" + ], + "stack_out": [ + "tmp%4#0" + ] + }, + "4982": { + "retsub": true, + "op": "retsub" + }, + "4983": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.maybeNewEscrow", + "params": { + "escrow#0": "bytes" + }, + "block": "maybeNewEscrow", + "stack_in": [], + "op": "proto 1 1" + }, + "4986": { + "op": "intc_0 // 0", + "stack_out": [ + "box_prefixed_key%0#0" + ] + }, + "4987": { + "op": "frame_dig -1", + "defined_out": [ + "escrow#0 (copy)" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0 (copy)" + ] + }, + "4989": { + "op": "bytec_1 // \"\"", + "defined_out": [ + "\"\"", + "escrow#0 (copy)" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0 (copy)", + "\"\"" + ] + }, + "4990": { + "op": "==", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "tmp%0#0" + ] + }, + "4991": { + "op": "bz maybeNewEscrow_after_if_else@2", + "stack_out": [ + "box_prefixed_key%0#0" + ] + }, + "4994": { + "op": "intc_0 // 0", + "defined_out": [ + "0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "0" + ] + }, + "4995": { + "op": "swap" + }, + "4996": { + "retsub": true, + "op": "retsub" + }, + "4997": { + "block": "maybeNewEscrow_after_if_else@2", + "stack_in": [ + "box_prefixed_key%0#0" + ], + "op": "bytec 5 // \"e\"", + "defined_out": [ + "\"e\"" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "\"e\"" + ] + }, + "4999": { + "op": "frame_dig -1", + "defined_out": [ + "\"e\"", + "escrow#0 (copy)" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "\"e\"", + "escrow#0 (copy)" + ] + }, + "5001": { + "op": "concat", + "defined_out": [ + "box_prefixed_key%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%0#0" + ] + }, + "5002": { + "op": "dup", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0" + ] + }, + "5003": { + "op": "frame_bury 0", + "defined_out": [ + "box_prefixed_key%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%0#0" + ] + }, + "5005": { + "op": "box_len", + "defined_out": [ + "_%0#0", + "box_prefixed_key%0#0", + "maybe_exists%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "_%0#0", + "maybe_exists%0#0" + ] + }, + "5006": { + "op": "bury 1", + "stack_out": [ + "box_prefixed_key%0#0", + "maybe_exists%0#0" + ] + }, + "5008": { + "op": "bz maybeNewEscrow_ternary_false@4", + "stack_out": [ + "box_prefixed_key%0#0" + ] + }, + "5011": { + "op": "frame_dig 0", + "stack_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%0#0" + ] + }, + "5013": { + "op": "box_get", + "defined_out": [ + "aggregate%box_get%0#0", + "aggregate%box_get%1#0", + "box_prefixed_key%0#0" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%box_get%0#0", + "aggregate%box_get%1#0" + ] + }, + "5014": { + "error": "Box must have value", + "op": "assert // Box must have value", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%box_get%0#0" + ] + }, + "5015": { + "op": "intc_0 // 0", + "stack_out": [ + "box_prefixed_key%0#0", + "aggregate%box_get%0#0", + "0" + ] + }, + "5016": { + "op": "extract_uint64", + "defined_out": [ + "box_prefixed_key%0#0", + "ternary_result%0#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "ternary_result%0#1" + ] + }, + "5017": { + "block": "maybeNewEscrow_ternary_merge@5", + "stack_in": [ + "box_prefixed_key%0#0", + "ternary_result%0#1" + ], + "op": "swap", + "defined_out": [ + "ternary_result%0#1" + ] + }, + "5018": { + "retsub": true, + "op": "retsub" + }, + "5019": { + "block": "maybeNewEscrow_ternary_false@4", + "stack_in": [ + "box_prefixed_key%0#0" + ], + "op": "frame_dig -1", + "defined_out": [ + "escrow#0 (copy)" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "escrow#0 (copy)" + ] + }, + "5021": { + "callsub": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.newEscrow", + "op": "callsub newEscrow", + "defined_out": [ + "ternary_result%0#1" + ], + "stack_out": [ + "box_prefixed_key%0#0", + "ternary_result%0#1" + ] + }, + "5024": { + "op": "b maybeNewEscrow_ternary_merge@5" + }, + "5027": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.newEscrow", + "params": { + "escrow#0": "bytes" + }, + "block": "newEscrow", + "stack_in": [], + "op": "proto 1 1" + }, + "5030": { + "op": "intc_0 // 0", + "defined_out": [ + "0" + ], + "stack_out": [ + "0" + ] + }, + "5031": { + "op": "bytec_0 // \"controlled_address\"", + "defined_out": [ + "\"controlled_address\"", + "0" + ], + "stack_out": [ + "0", + "\"controlled_address\"" + ] + }, + "5032": { + "op": "app_global_get_ex", + "defined_out": [ + "maybe_exists%0#0", + "maybe_value%0#0" + ], + "stack_out": [ + "maybe_value%0#0", + "maybe_exists%0#0" + ] + }, + "5033": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "maybe_value%0#0" + ] + }, + "5034": { + "op": "global CurrentApplicationAddress", + "defined_out": [ + "maybe_value%0#0", + "tmp%0#0" + ], + "stack_out": [ + "maybe_value%0#0", + "tmp%0#0" + ] + }, + "5036": { + "op": "!=", + "defined_out": [ + "tmp%1#0" + ], + "stack_out": [ + "tmp%1#0" + ] + }, + "5037": { + "op": "bz newEscrow_after_if_else@3", + "stack_out": [] + }, + "5040": { + "op": "itxn_begin" + }, + "5041": { + "op": "intc_0 // 0", + "stack_out": [ + "0" + ] + }, + "5042": { + "op": "bytec_0 // \"controlled_address\"", + "stack_out": [ + "0", + "\"controlled_address\"" + ] + }, + "5043": { + "op": "app_global_get_ex", + "defined_out": [ + "maybe_exists%1#0", + "maybe_value%1#0" + ], + "stack_out": [ + "maybe_value%1#0", + "maybe_exists%1#0" + ] + }, + "5044": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "maybe_value%1#0" + ] + }, + "5045": { + "op": "global CurrentApplicationAddress", + "defined_out": [ + "inner_txn_params%0%%param_Receiver_idx_0#0", + "maybe_value%1#0" + ], + "stack_out": [ + "maybe_value%1#0", + "inner_txn_params%0%%param_Receiver_idx_0#0" + ] + }, + "5047": { + "op": "frame_dig -1", + "defined_out": [ + "escrow#0 (copy)", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "maybe_value%1#0" + ], + "stack_out": [ + "maybe_value%1#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "escrow#0 (copy)" + ] + }, + "5049": { + "op": "len", + "defined_out": [ + "inner_txn_params%0%%param_Receiver_idx_0#0", + "maybe_value%1#0", + "tmp%0#1" + ], + "stack_out": [ + "maybe_value%1#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "tmp%0#1" + ] + }, + "5050": { + "op": "intc 4 // 400", + "defined_out": [ + "400", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "maybe_value%1#0", + "tmp%0#1" + ], + "stack_out": [ + "maybe_value%1#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "tmp%0#1", + "400" + ] + }, + "5052": { + "op": "*", + "defined_out": [ + "inner_txn_params%0%%param_Receiver_idx_0#0", + "maybe_value%1#0", + "tmp%1#1" + ], + "stack_out": [ + "maybe_value%1#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "tmp%1#1" + ] + }, + "5053": { + "op": "pushint 6500 // 6500", + "defined_out": [ + "6500", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "maybe_value%1#0", + "tmp%1#1" + ], + "stack_out": [ + "maybe_value%1#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "tmp%1#1", + "6500" + ] + }, + "5056": { + "op": "+", + "defined_out": [ + "inner_txn_params%0%%param_Receiver_idx_0#0", + "maybe_value%1#0", + "tmp%2#0" + ], + "stack_out": [ + "maybe_value%1#0", + "inner_txn_params%0%%param_Receiver_idx_0#0", + "tmp%2#0" + ] + }, + "5057": { + "op": "itxn_field Amount", + "stack_out": [ + "maybe_value%1#0", + "inner_txn_params%0%%param_Receiver_idx_0#0" + ] + }, + "5059": { + "op": "itxn_field Receiver", + "stack_out": [ + "maybe_value%1#0" + ] + }, + "5061": { + "op": "itxn_field Sender", + "stack_out": [] + }, + "5063": { + "op": "intc_1 // 1", + "defined_out": [ + "1" + ], + "stack_out": [ + "1" + ] + }, + "5064": { + "op": "itxn_field TypeEnum", + "stack_out": [] + }, + "5066": { + "op": "intc_0 // 0", + "stack_out": [ + "0" + ] + }, + "5067": { + "op": "itxn_field Fee", + "stack_out": [] + }, + "5069": { + "op": "itxn_submit" + }, + "5070": { + "block": "newEscrow_after_if_else@3", + "stack_in": [], + "op": "itxn_begin" + }, + "5071": { + "op": "intc_0 // 0", + "defined_out": [ + "0" + ], + "stack_out": [ + "0" + ] + }, + "5072": { + "op": "bytec_0 // \"controlled_address\"", + "defined_out": [ + "\"controlled_address\"", + "0" + ], + "stack_out": [ + "0", + "\"controlled_address\"" + ] + }, + "5073": { + "op": "app_global_get_ex", + "defined_out": [ + "maybe_exists%2#0", + "maybe_value%2#0" + ], + "stack_out": [ + "maybe_value%2#0", + "maybe_exists%2#0" + ] + }, + "5074": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "maybe_value%2#0" + ] + }, + "5075": { + "op": "pushint 150000 // 150000", + "defined_out": [ + "150000", + "maybe_value%2#0" + ], + "stack_out": [ + "maybe_value%2#0", + "150000" + ] + }, + "5079": { + "op": "global MinBalance", + "defined_out": [ + "150000", + "maybe_value%2#0", + "tmp%2#0" + ], + "stack_out": [ + "maybe_value%2#0", + "150000", + "tmp%2#0" + ] + }, + "5081": { + "op": "+", + "defined_out": [ + "inner_txn_params%1%%param_Amount_idx_0#0", + "maybe_value%2#0" + ], + "stack_out": [ + "maybe_value%2#0", + "inner_txn_params%1%%param_Amount_idx_0#0" + ] + }, + "5082": { + "op": "intc_0 // 0", + "stack_out": [ + "maybe_value%2#0", + "inner_txn_params%1%%param_Amount_idx_0#0", + "0" + ] + }, + "5083": { + "op": "bytec 18 // \"escrow_factory\"", + "defined_out": [ + "\"escrow_factory\"", + "0", + "inner_txn_params%1%%param_Amount_idx_0#0", + "maybe_value%2#0" + ], + "stack_out": [ + "maybe_value%2#0", + "inner_txn_params%1%%param_Amount_idx_0#0", + "0", + "\"escrow_factory\"" + ] + }, + "5085": { + "op": "app_global_get_ex", + "defined_out": [ + "inner_txn_params%1%%param_Amount_idx_0#0", + "maybe_exists%3#0", + "maybe_value%2#0", + "maybe_value%3#0" + ], + "stack_out": [ + "maybe_value%2#0", + "inner_txn_params%1%%param_Amount_idx_0#0", + "maybe_value%3#0", + "maybe_exists%3#0" + ] + }, + "5086": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "maybe_value%2#0", + "inner_txn_params%1%%param_Amount_idx_0#0", + "maybe_value%3#0" + ] + }, + "5087": { + "op": "dup", + "defined_out": [ + "inner_txn_params%1%%param_Amount_idx_0#0", + "maybe_value%2#0", + "maybe_value%3#0", + "maybe_value%3#0 (copy)" + ], + "stack_out": [ + "maybe_value%2#0", + "inner_txn_params%1%%param_Amount_idx_0#0", + "maybe_value%3#0", + "maybe_value%3#0 (copy)" + ] + }, + "5088": { + "op": "app_params_get AppAddress", + "defined_out": [ + "check%0#0", + "inner_txn_params%1%%param_Amount_idx_0#0", + "maybe_value%2#0", + "maybe_value%3#0", + "value%0#0" + ], + "stack_out": [ + "maybe_value%2#0", + "inner_txn_params%1%%param_Amount_idx_0#0", + "maybe_value%3#0", + "value%0#0", + "check%0#0" + ] + }, + "5090": { + "error": "application exists", + "op": "assert // application exists", + "stack_out": [ + "maybe_value%2#0", + "inner_txn_params%1%%param_Amount_idx_0#0", + "maybe_value%3#0", + "value%0#0" + ] + }, + "5091": { + "op": "itxn_field Receiver", + "stack_out": [ + "maybe_value%2#0", + "inner_txn_params%1%%param_Amount_idx_0#0", + "maybe_value%3#0" + ] + }, + "5093": { + "op": "swap", + "stack_out": [ + "maybe_value%2#0", + "maybe_value%3#0", + "inner_txn_params%1%%param_Amount_idx_0#0" + ] + }, + "5094": { + "op": "itxn_field Amount", + "stack_out": [ + "maybe_value%2#0", + "maybe_value%3#0" + ] + }, + "5096": { + "op": "dig 1", + "defined_out": [ + "maybe_value%2#0", + "maybe_value%2#0 (copy)", + "maybe_value%3#0" + ], + "stack_out": [ + "maybe_value%2#0", + "maybe_value%3#0", + "maybe_value%2#0 (copy)" + ] + }, + "5098": { + "op": "itxn_field Sender", + "stack_out": [ + "maybe_value%2#0", + "maybe_value%3#0" + ] + }, + "5100": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "maybe_value%2#0", + "maybe_value%3#0" + ], + "stack_out": [ + "maybe_value%2#0", + "maybe_value%3#0", + "1" + ] + }, + "5101": { + "op": "itxn_field TypeEnum", + "stack_out": [ + "maybe_value%2#0", + "maybe_value%3#0" + ] + }, + "5103": { + "op": "intc_0 // 0", + "stack_out": [ + "maybe_value%2#0", + "maybe_value%3#0", + "0" + ] + }, + "5104": { + "op": "itxn_field Fee", + "stack_out": [ + "maybe_value%2#0", + "maybe_value%3#0" + ] + }, + "5106": { + "op": "itxn_next" + }, + "5107": { + "op": "pushbytes 0xd85cf184 // method \"new(pay)uint64\"", + "defined_out": [ + "Method(new(pay)uint64)", + "maybe_value%2#0", + "maybe_value%3#0" + ], + "stack_out": [ + "maybe_value%2#0", + "maybe_value%3#0", + "Method(new(pay)uint64)" + ] + }, + "5113": { + "op": "itxn_field ApplicationArgs", + "stack_out": [ + "maybe_value%2#0", + "maybe_value%3#0" + ] + }, + "5115": { + "op": "itxn_field ApplicationID", + "stack_out": [ + "maybe_value%2#0" + ] + }, + "5117": { + "op": "itxn_field Sender", + "stack_out": [] + }, + "5119": { + "op": "pushint 6 // appl", + "defined_out": [ + "appl" + ], + "stack_out": [ + "appl" + ] + }, + "5121": { + "op": "itxn_field TypeEnum", + "stack_out": [] + }, + "5123": { + "op": "intc_0 // 0", + "stack_out": [ + "0" + ] + }, + "5124": { + "op": "itxn_field Fee", + "stack_out": [] + }, + "5126": { + "op": "itxn_submit" + }, + "5127": { + "op": "gitxn 1 LastLog", + "defined_out": [ + "awst_tmp%0#0" + ], + "stack_out": [ + "awst_tmp%0#0" + ] + }, + "5130": { + "op": "dup", + "defined_out": [ + "awst_tmp%0#0", + "awst_tmp%0#0 (copy)" + ], + "stack_out": [ + "awst_tmp%0#0", + "awst_tmp%0#0 (copy)" + ] + }, + "5131": { + "op": "extract 4 0", + "defined_out": [ + "awst_tmp%0#0", + "tmp%3#0" + ], + "stack_out": [ + "awst_tmp%0#0", + "tmp%3#0" + ] + }, + "5134": { + "op": "swap", + "stack_out": [ + "tmp%3#0", + "awst_tmp%0#0" + ] + }, + "5135": { + "op": "extract 0 4", + "defined_out": [ + "tmp%3#0", + "tmp%4#0" + ], + "stack_out": [ + "tmp%3#0", + "tmp%4#0" + ] + }, + "5138": { + "op": "bytec 7 // 0x151f7c75", + "defined_out": [ + "0x151f7c75", + "tmp%3#0", + "tmp%4#0" + ], + "stack_out": [ + "tmp%3#0", + "tmp%4#0", + "0x151f7c75" + ] + }, + "5140": { + "op": "==", + "defined_out": [ + "tmp%3#0", + "tmp%5#0" + ], + "stack_out": [ + "tmp%3#0", + "tmp%5#0" + ] + }, + "5141": { + "error": "Bytes has valid prefix", + "op": "assert // Bytes has valid prefix", + "stack_out": [ + "tmp%3#0" + ] + }, + "5142": { + "op": "dup", + "defined_out": [ + "tmp%3#0", + "tmp%3#0 (copy)" + ], + "stack_out": [ + "tmp%3#0", + "tmp%3#0 (copy)" + ] + }, + "5143": { + "op": "len", + "defined_out": [ + "len%0#0", + "tmp%3#0" + ], + "stack_out": [ + "tmp%3#0", + "len%0#0" + ] + }, + "5144": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "len%0#0", + "tmp%3#0" + ], + "stack_out": [ + "tmp%3#0", + "len%0#0", + "8" + ] + }, + "5145": { + "op": "==", + "defined_out": [ + "eq%0#0", + "tmp%3#0" + ], + "stack_out": [ + "tmp%3#0", + "eq%0#0" + ] + }, + "5146": { + "error": "invalid number of bytes for uint64", + "op": "assert // invalid number of bytes for uint64", + "stack_out": [ + "tmp%3#0" + ] + }, + "5147": { + "op": "btoi", + "defined_out": [ + "id#0" + ], + "stack_out": [ + "id#0" + ] + }, + "5148": { + "op": "dup", + "defined_out": [ + "id#0", + "id#0 (copy)" + ], + "stack_out": [ + "id#0", + "id#0 (copy)" + ] + }, + "5149": { + "op": "itob", + "defined_out": [ + "aggregate%val_as_bytes%0#0", + "id#0" + ], + "stack_out": [ + "id#0", + "aggregate%val_as_bytes%0#0" + ] + }, + "5150": { + "op": "bytec 9 // 0x00", + "defined_out": [ + "0x00", + "aggregate%val_as_bytes%0#0", + "id#0" + ], + "stack_out": [ + "id#0", + "aggregate%val_as_bytes%0#0", + "0x00" + ] + }, + "5152": { + "op": "concat", + "defined_out": [ + "aggregate%head%1#0", + "id#0" + ], + "stack_out": [ + "id#0", + "aggregate%head%1#0" + ] + }, + "5153": { + "op": "bytec 5 // \"e\"", + "defined_out": [ + "\"e\"", + "aggregate%head%1#0", + "id#0" + ], + "stack_out": [ + "id#0", + "aggregate%head%1#0", + "\"e\"" + ] + }, + "5155": { + "op": "frame_dig -1", + "defined_out": [ + "\"e\"", + "aggregate%head%1#0", + "escrow#0 (copy)", + "id#0" + ], + "stack_out": [ + "id#0", + "aggregate%head%1#0", + "\"e\"", + "escrow#0 (copy)" + ] + }, + "5157": { + "op": "concat", + "defined_out": [ + "aggregate%head%1#0", + "box_prefixed_key%0#0", + "id#0" + ], + "stack_out": [ + "id#0", + "aggregate%head%1#0", + "box_prefixed_key%0#0" + ] + }, + "5158": { + "op": "swap", + "stack_out": [ + "id#0", + "box_prefixed_key%0#0", + "aggregate%head%1#0" + ] + }, + "5159": { + "op": "box_put", + "stack_out": [ + "id#0" + ] + }, + "5160": { + "retsub": true, + "op": "retsub" + }, + "5161": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.pluginCallAllowed", + "params": { + "plugin#0": "uint64", + "caller#0": "bytes", + "escrow#0": "bytes", + "method#0": "bytes" + }, + "block": "pluginCallAllowed", + "stack_in": [], + "op": "proto 4 1" + }, + "5164": { + "op": "bytec_1 // \"\"", + "stack_out": [ + "cooldown#0" + ] + }, + "5165": { + "op": "dupn 5", + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0" + ] + }, + "5167": { + "op": "frame_dig -4", + "defined_out": [ + "plugin#0 (copy)" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "plugin#0 (copy)" + ] + }, + "5169": { + "op": "itob", + "defined_out": [ + "aggregate%val_as_bytes%0#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "aggregate%val_as_bytes%0#0" + ] + }, + "5170": { + "op": "frame_dig -3", + "defined_out": [ + "aggregate%val_as_bytes%0#0", + "caller#0 (copy)" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "aggregate%val_as_bytes%0#0", + "caller#0 (copy)" + ] + }, + "5172": { + "op": "concat", + "defined_out": [ + "aggregate%head%1#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "aggregate%head%1#0" + ] + }, + "5173": { + "op": "frame_dig -2", + "defined_out": [ + "aggregate%head%1#0", + "escrow#0 (copy)" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "aggregate%head%1#0", + "escrow#0 (copy)" + ] + }, + "5175": { + "op": "len", + "defined_out": [ + "aggregate%head%1#0", + "aggregate%length%0#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "aggregate%head%1#0", + "aggregate%length%0#0" + ] + }, + "5176": { + "op": "itob", + "defined_out": [ + "aggregate%as_bytes%0#0", + "aggregate%head%1#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "aggregate%head%1#0", + "aggregate%as_bytes%0#0" + ] + }, + "5177": { + "op": "extract 6 2", + "defined_out": [ + "aggregate%head%1#0", + "aggregate%length_uint16%0#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "aggregate%head%1#0", + "aggregate%length_uint16%0#0" + ] + }, + "5180": { + "op": "frame_dig -2", + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "aggregate%head%1#0", + "aggregate%length_uint16%0#0", + "escrow#0 (copy)" + ] + }, + "5182": { + "op": "concat", + "defined_out": [ + "aggregate%encoded_value%0#0", + "aggregate%head%1#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "aggregate%head%1#0", + "aggregate%encoded_value%0#0" + ] + }, + "5183": { + "op": "swap", + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "aggregate%encoded_value%0#0", + "aggregate%head%1#0" + ] + }, + "5184": { + "op": "bytec 12 // 0x002a", + "defined_out": [ + "0x002a", + "aggregate%encoded_value%0#0", + "aggregate%head%1#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "aggregate%encoded_value%0#0", + "aggregate%head%1#0", + "0x002a" + ] + }, + "5186": { + "op": "concat", + "defined_out": [ + "aggregate%encoded_value%0#0", + "aggregate%head%2#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "aggregate%encoded_value%0#0", + "aggregate%head%2#0" + ] + }, + "5187": { + "op": "swap", + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "aggregate%head%2#0", + "aggregate%encoded_value%0#0" + ] + }, + "5188": { + "op": "concat", + "defined_out": [ + "key#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "key#0" + ] + }, + "5189": { + "op": "bytec 4 // \"p\"", + "defined_out": [ + "\"p\"", + "key#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "key#0", + "\"p\"" + ] + }, + "5191": { + "op": "swap", + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "\"p\"", + "key#0" + ] + }, + "5192": { + "op": "concat", + "defined_out": [ + "box_prefixed_key%0#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0" + ] + }, + "5193": { + "op": "dup", + "defined_out": [ + "box_prefixed_key%0#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0" + ] + }, + "5194": { + "op": "box_len", + "defined_out": [ + "_%0#0", + "box_prefixed_key%0#0", + "maybe_exists%0#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "_%0#0", + "maybe_exists%0#0" + ] + }, + "5195": { + "op": "bury 1", + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "maybe_exists%0#0" + ] + }, + "5197": { + "op": "bnz pluginCallAllowed_after_if_else@2", + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0" + ] + }, + "5200": { + "op": "intc_0 // 0", + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "0" + ] + }, + "5201": { + "op": "frame_bury 0" + }, + "5203": { + "retsub": true, + "op": "retsub" + }, + "5204": { + "block": "pluginCallAllowed_after_if_else@2", + "stack_in": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0" + ], + "op": "frame_dig 6", + "defined_out": [ + "box_prefixed_key%0#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0" + ] + }, + "5206": { + "op": "dup", + "defined_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)" + ] + }, + "5207": { + "op": "pushint 17 // 17", + "defined_out": [ + "17", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "17" + ] + }, + "5209": { + "op": "intc_3 // 8", + "defined_out": [ + "17", + "8", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "17", + "8" + ] + }, + "5210": { + "op": "box_extract", + "defined_out": [ + "box%box_extract%0#0", + "box_prefixed_key%0#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "box%box_extract%0#0" + ] + }, + "5211": { + "op": "btoi", + "defined_out": [ + "box_prefixed_key%0#0", + "cooldown#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "cooldown#0" + ] + }, + "5212": { + "op": "frame_bury 0", + "defined_out": [ + "box_prefixed_key%0#0", + "cooldown#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0" + ] + }, + "5214": { + "op": "dup", + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)" + ] + }, + "5215": { + "op": "pushint 27 // 27", + "defined_out": [ + "27", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "cooldown#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "27" + ] + }, + "5217": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "27", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "cooldown#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "27", + "1" + ] + }, + "5218": { + "op": "box_extract", + "defined_out": [ + "box%box_extract%1#0", + "box_prefixed_key%0#0", + "cooldown#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "box%box_extract%1#0" + ] + }, + "5219": { + "op": "dup", + "defined_out": [ + "box%box_extract%1#0", + "box%box_extract%1#0 (copy)", + "box_prefixed_key%0#0", + "cooldown#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "box%box_extract%1#0", + "box%box_extract%1#0 (copy)" + ] + }, + "5220": { + "op": "intc_1 // 1", + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "box%box_extract%1#0", + "box%box_extract%1#0 (copy)", + "1" + ] + }, + "5221": { + "op": "getbit", + "defined_out": [ + "box%box_extract%1#0", + "box_prefixed_key%0#0", + "cooldown#0", + "useRounds#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "box%box_extract%1#0", + "useRounds#0" + ] + }, + "5222": { + "op": "frame_bury 5", + "defined_out": [ + "box%box_extract%1#0", + "box_prefixed_key%0#0", + "cooldown#0", + "useRounds#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "box%box_extract%1#0" + ] + }, + "5224": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "box%box_extract%1#0", + "box_prefixed_key%0#0", + "cooldown#0", + "useRounds#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "box%box_extract%1#0", + "2" + ] + }, + "5225": { + "op": "getbit", + "defined_out": [ + "box_prefixed_key%0#0", + "cooldown#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "useExecutionKey#0" + ] + }, + "5226": { + "op": "swap", + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "useExecutionKey#0", + "box_prefixed_key%0#0" + ] + }, + "5227": { + "op": "pushint 28 // 28", + "defined_out": [ + "28", + "box_prefixed_key%0#0", + "cooldown#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "useExecutionKey#0", + "box_prefixed_key%0#0", + "28" + ] + }, + "5229": { + "op": "intc_3 // 8", + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "useExecutionKey#0", + "box_prefixed_key%0#0", + "28", + "8" + ] + }, + "5230": { + "op": "box_extract", + "defined_out": [ + "box%box_extract%3#0", + "box_prefixed_key%0#0", + "cooldown#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "useExecutionKey#0", + "box%box_extract%3#0" + ] + }, + "5231": { + "op": "btoi", + "defined_out": [ + "box_prefixed_key%0#0", + "cooldown#0", + "lastCalled#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "useExecutionKey#0", + "lastCalled#0" + ] + }, + "5232": { + "op": "frame_bury 3", + "defined_out": [ + "box_prefixed_key%0#0", + "cooldown#0", + "lastCalled#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "useExecutionKey#0" + ] + }, + "5234": { + "op": "bz pluginCallAllowed_after_if_else@4", + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0" + ] + }, + "5237": { + "op": "intc_0 // 0", + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "0" + ] + }, + "5238": { + "op": "frame_bury 0" + }, + "5240": { + "retsub": true, + "op": "retsub" + }, + "5241": { + "block": "pluginCallAllowed_after_if_else@4", + "stack_in": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0" + ], + "op": "frame_dig 6", + "defined_out": [ + "box_prefixed_key%0#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0" + ] + }, + "5243": { + "op": "pushint 44 // 44", + "defined_out": [ + "44", + "box_prefixed_key%0#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "44" + ] + }, + "5245": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "44", + "box_prefixed_key%0#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "44", + "2" + ] + }, + "5246": { + "op": "box_extract", + "defined_out": [ + "box%box_extract%4#0", + "box_prefixed_key%0#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box%box_extract%4#0" + ] + }, + "5247": { + "op": "btoi", + "defined_out": [ + "box%array_length%0#0", + "box_prefixed_key%0#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box%array_length%0#0" + ] + }, + "5248": { + "op": "!", + "defined_out": [ + "box_prefixed_key%0#0", + "methodAllowed#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "methodAllowed#0" + ] + }, + "5249": { + "op": "frame_bury 4", + "defined_out": [ + "box_prefixed_key%0#0", + "methodAllowed#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0" + ] + }, + "5251": { + "op": "intc_0 // 0", + "defined_out": [ + "box_prefixed_key%0#0", + "i#0", + "methodAllowed#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "i#0" + ] + }, + "5252": { + "op": "frame_bury 2", + "defined_out": [ + "box_prefixed_key%0#0", + "i#0", + "methodAllowed#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0" + ] + }, + "5254": { + "block": "pluginCallAllowed_while_top@5", + "stack_in": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0" + ], + "op": "frame_dig 6", + "defined_out": [ + "box_prefixed_key%0#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0" + ] + }, + "5256": { + "op": "pushint 44 // 44", + "defined_out": [ + "44", + "box_prefixed_key%0#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "44" + ] + }, + "5258": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "44", + "box_prefixed_key%0#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "44", + "2" + ] + }, + "5259": { + "op": "box_extract", + "defined_out": [ + "box%box_extract%5#0", + "box_prefixed_key%0#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box%box_extract%5#0" + ] + }, + "5260": { + "op": "btoi", + "defined_out": [ + "box%array_length%1#0", + "box_prefixed_key%0#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box%array_length%1#0" + ] + }, + "5261": { + "op": "frame_dig 2", + "defined_out": [ + "box%array_length%1#0", + "box_prefixed_key%0#0", + "i#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box%array_length%1#0", + "i#0" + ] + }, + "5263": { + "op": ">", + "defined_out": [ + "box_prefixed_key%0#0", + "i#0", + "tmp%4#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "tmp%4#0" + ] + }, + "5264": { + "op": "bz pluginCallAllowed_block@10", + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0" + ] + }, + "5267": { + "op": "frame_dig 2", + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "i#0" + ] + }, + "5269": { + "op": "pushint 20 // 20", + "defined_out": [ + "20", + "box_prefixed_key%0#0", + "i#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "i#0", + "20" + ] + }, + "5271": { + "op": "*", + "defined_out": [ + "box%element_offset%1#0", + "box_prefixed_key%0#0", + "i#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box%element_offset%1#0" + ] + }, + "5272": { + "op": "pushint 46 // 46", + "defined_out": [ + "46", + "box%element_offset%1#0", + "box_prefixed_key%0#0", + "i#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box%element_offset%1#0", + "46" + ] + }, + "5274": { + "op": "+", + "defined_out": [ + "box%offset%7#0", + "box_prefixed_key%0#0", + "i#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box%offset%7#0" + ] + }, + "5275": { + "op": "frame_dig 6", + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box%offset%7#0", + "box_prefixed_key%0#0" + ] + }, + "5277": { + "op": "swap", + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "box%offset%7#0" + ] + }, + "5278": { + "op": "pushint 20 // 20", + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0", + "box%offset%7#0", + "20" + ] + }, + "5280": { + "op": "box_extract", + "defined_out": [ + "box%box_extract%7#0", + "box_prefixed_key%0#0", + "i#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box%box_extract%7#0" + ] + }, + "5281": { + "op": "extract 0 4", + "defined_out": [ + "aggregate%extract%0#0", + "box_prefixed_key%0#0", + "i#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "aggregate%extract%0#0" + ] + }, + "5284": { + "op": "frame_dig -1", + "defined_out": [ + "aggregate%extract%0#0", + "box_prefixed_key%0#0", + "i#0", + "method#0 (copy)" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "aggregate%extract%0#0", + "method#0 (copy)" + ] + }, + "5286": { + "op": "==", + "defined_out": [ + "box_prefixed_key%0#0", + "i#0", + "tmp%5#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "tmp%5#0" + ] + }, + "5287": { + "op": "bz pluginCallAllowed_after_if_else@8", + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0" + ] + }, + "5290": { + "op": "intc_1 // 1", + "defined_out": [ + "box_prefixed_key%0#0", + "i#0", + "methodAllowed#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "methodAllowed#0" + ] + }, + "5291": { + "op": "frame_bury 4", + "defined_out": [ + "box_prefixed_key%0#0", + "i#0", + "methodAllowed#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0" + ] + }, + "5293": { + "block": "pluginCallAllowed_block@10", + "stack_in": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0" + ], + "op": "frame_dig 5", + "defined_out": [ + "useRounds#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "useRounds#0" + ] + }, + "5295": { + "op": "bz pluginCallAllowed_ternary_false@12", + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0" + ] + }, + "5298": { + "op": "global Round", + "defined_out": [ + "epochRef#0", + "useRounds#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "epochRef#0" + ] + }, + "5300": { + "op": "frame_bury 1", + "defined_out": [ + "epochRef#0", + "useRounds#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0" + ] + }, + "5302": { + "block": "pluginCallAllowed_ternary_merge@13", + "stack_in": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0" + ], + "op": "frame_dig 3", + "defined_out": [ + "lastCalled#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "lastCalled#0" + ] + }, + "5304": { + "op": "frame_dig 1", + "defined_out": [ + "epochRef#0", + "lastCalled#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "lastCalled#0", + "epochRef#0" + ] + }, + "5306": { + "op": ">=", + "defined_out": [ + "epochRef#0", + "lastCalled#0", + "tmp%7#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "tmp%7#0" + ] + }, + "5307": { + "op": "bz pluginCallAllowed_bool_false@16", + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0" + ] + }, + "5310": { + "op": "frame_dig 1", + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "epochRef#0" + ] + }, + "5312": { + "op": "frame_dig 3", + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "epochRef#0", + "lastCalled#0" + ] + }, + "5314": { + "op": "-", + "defined_out": [ + "epochRef#0", + "lastCalled#0", + "tmp%8#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "tmp%8#0" + ] + }, + "5315": { + "op": "frame_dig 0", + "defined_out": [ + "cooldown#0", + "epochRef#0", + "lastCalled#0", + "tmp%8#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "tmp%8#0", + "cooldown#0" + ] + }, + "5317": { + "op": ">=", + "defined_out": [ + "cooldown#0", + "epochRef#0", + "lastCalled#0", + "tmp%9#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "tmp%9#0" + ] + }, + "5318": { + "op": "bz pluginCallAllowed_bool_false@16", + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0" + ] + }, + "5321": { + "op": "intc_1 // 1", + "defined_out": [ + "and_result%0#0", + "cooldown#0", + "epochRef#0", + "lastCalled#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "and_result%0#0" + ] + }, + "5322": { + "block": "pluginCallAllowed_bool_merge@17", + "stack_in": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "and_result%0#0" + ], + "op": "frame_dig 4", + "defined_out": [ + "and_result%0#0", + "methodAllowed#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "and_result%0#0", + "methodAllowed#0" + ] + }, + "5324": { + "op": "&&", + "defined_out": [ + "methodAllowed#0", + "tmp%10#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "tmp%10#0" + ] + }, + "5325": { + "op": "frame_bury 0" + }, + "5327": { + "retsub": true, + "op": "retsub" + }, + "5328": { + "block": "pluginCallAllowed_bool_false@16", + "stack_in": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0" + ], + "op": "intc_0 // 0", + "defined_out": [ + "and_result%0#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "and_result%0#0" + ] + }, + "5329": { + "op": "b pluginCallAllowed_bool_merge@17" + }, + "5332": { + "block": "pluginCallAllowed_ternary_false@12", + "stack_in": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0" + ], + "op": "global LatestTimestamp", + "defined_out": [ + "epochRef#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "epochRef#0" + ] + }, + "5334": { + "op": "frame_bury 1", + "defined_out": [ + "epochRef#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0" + ] + }, + "5336": { + "op": "b pluginCallAllowed_ternary_merge@13" + }, + "5339": { + "block": "pluginCallAllowed_after_if_else@8", + "stack_in": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0" + ], + "op": "frame_dig 2", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "i#0" + ] + }, + "5341": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "i#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "i#0", + "1" + ] + }, + "5342": { + "op": "+", + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0", + "i#0" + ] + }, + "5343": { + "op": "frame_bury 2", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "cooldown#0", + "epochRef#0", + "i#0", + "lastCalled#0", + "methodAllowed#0", + "useRounds#0", + "box_prefixed_key%0#0" + ] + }, + "5345": { + "op": "b pluginCallAllowed_while_top@5" + }, + "5348": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.txnRekeysBack", + "params": { + "txn#0": "uint64" + }, + "block": "txnRekeysBack", + "stack_in": [], + "op": "proto 1 1" + }, + "5351": { + "op": "frame_dig -1", + "defined_out": [ + "txn#0 (copy)" + ], + "stack_out": [ + "txn#0 (copy)" + ] + }, + "5353": { + "op": "gtxns Sender", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] + }, + "5355": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "0" + ] + }, + "5356": { + "op": "bytec_0 // \"controlled_address\"", + "defined_out": [ + "\"controlled_address\"", + "0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "0", + "\"controlled_address\"" + ] + }, + "5357": { + "op": "app_global_get_ex", + "defined_out": [ + "maybe_exists%0#0", + "maybe_value%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "maybe_value%0#0", + "maybe_exists%0#0" + ] + }, + "5358": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "tmp%0#0", + "maybe_value%0#0" + ] + }, + "5359": { + "op": "==", + "defined_out": [ + "tmp%1#0" + ], + "stack_out": [ + "tmp%1#0" + ] + }, + "5360": { + "op": "bz txnRekeysBack_after_if_else@3", + "stack_out": [] + }, + "5363": { + "op": "frame_dig -1", + "stack_out": [ + "txn#0 (copy)" + ] + }, + "5365": { + "op": "gtxns RekeyTo", + "defined_out": [ + "tmp%2#0" + ], + "stack_out": [ + "tmp%2#0" + ] + }, + "5367": { + "op": "global CurrentApplicationAddress", + "defined_out": [ + "tmp%2#0", + "tmp%3#0" + ], + "stack_out": [ + "tmp%2#0", + "tmp%3#0" + ] + }, + "5369": { + "op": "==", + "defined_out": [ + "tmp%4#0" + ], + "stack_out": [ + "tmp%4#0" + ] + }, + "5370": { + "op": "bz txnRekeysBack_after_if_else@3", + "stack_out": [] + }, + "5373": { + "op": "intc_1 // 1", + "defined_out": [ + "1" + ], + "stack_out": [ + "1" + ] + }, + "5374": { + "retsub": true, + "op": "retsub" + }, + "5375": { + "block": "txnRekeysBack_after_if_else@3", + "stack_in": [], + "op": "frame_dig -1", + "defined_out": [ + "txn#0 (copy)" + ], + "stack_out": [ + "txn#0 (copy)" + ] + }, + "5377": { + "op": "gtxns TypeEnum", + "defined_out": [ + "tmp%5#0" + ], + "stack_out": [ + "tmp%5#0" + ] + }, + "5379": { + "op": "pushint 6 // 6", + "defined_out": [ + "6", + "tmp%5#0" + ], + "stack_out": [ + "tmp%5#0", + "6" + ] + }, + "5381": { + "op": "==", + "defined_out": [ + "tmp%6#0" + ], + "stack_out": [ + "tmp%6#0" + ] + }, + "5382": { + "op": "bz txnRekeysBack_bool_false@9", + "stack_out": [] + }, + "5385": { + "op": "frame_dig -1", + "stack_out": [ + "txn#0 (copy)" + ] + }, + "5387": { + "op": "gtxns ApplicationID", + "defined_out": [ + "tmp%7#0" + ], + "stack_out": [ + "tmp%7#0" + ] + }, + "5389": { + "op": "global CurrentApplicationID", + "defined_out": [ + "tmp%7#0", + "tmp%8#0" + ], + "stack_out": [ + "tmp%7#0", + "tmp%8#0" + ] + }, + "5391": { + "op": "==", + "defined_out": [ + "tmp%9#0" + ], + "stack_out": [ + "tmp%9#0" + ] + }, + "5392": { + "op": "bz txnRekeysBack_bool_false@9", + "stack_out": [] + }, + "5395": { + "op": "frame_dig -1", + "stack_out": [ + "txn#0 (copy)" + ] + }, + "5397": { + "op": "gtxns NumAppArgs", + "defined_out": [ + "tmp%10#0" + ], + "stack_out": [ + "tmp%10#0" + ] + }, + "5399": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "tmp%10#0" + ], + "stack_out": [ + "tmp%10#0", + "1" + ] + }, + "5400": { + "op": "==", + "defined_out": [ + "tmp%11#0" + ], + "stack_out": [ + "tmp%11#0" + ] + }, + "5401": { + "op": "bz txnRekeysBack_bool_false@9", + "stack_out": [] + }, + "5404": { + "op": "frame_dig -1", + "stack_out": [ + "txn#0 (copy)" + ] + }, + "5406": { + "op": "gtxns OnCompletion", + "defined_out": [ + "tmp%12#0" + ], + "stack_out": [ + "tmp%12#0" + ] + }, + "5408": { + "op": "bnz txnRekeysBack_bool_false@9", + "stack_out": [] + }, + "5411": { + "op": "frame_dig -1", + "stack_out": [ + "txn#0 (copy)" + ] + }, + "5413": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "txn#0 (copy)" + ], + "stack_out": [ + "txn#0 (copy)", + "0" + ] + }, + "5414": { + "op": "gtxnsas ApplicationArgs", + "defined_out": [ + "tmp%14#0" + ], + "stack_out": [ + "tmp%14#0" + ] + }, + "5416": { + "op": "bytec 22 // method \"arc58_verifyAuthAddress()void\"", + "defined_out": [ + "Method(arc58_verifyAuthAddress()void)", + "tmp%14#0" + ], + "stack_out": [ + "tmp%14#0", + "Method(arc58_verifyAuthAddress()void)" + ] + }, + "5418": { + "op": "==", + "defined_out": [ + "tmp%15#0" + ], + "stack_out": [ + "tmp%15#0" + ] + }, + "5419": { + "op": "bz txnRekeysBack_bool_false@9", + "stack_out": [] + }, + "5422": { + "op": "intc_1 // 1", + "defined_out": [ + "and_result%0#0" + ], + "stack_out": [ + "and_result%0#0" + ] + }, + "5423": { + "retsub": true, + "op": "retsub" + }, + "5424": { + "block": "txnRekeysBack_bool_false@9", + "stack_in": [], + "op": "intc_0 // 0", + "defined_out": [ + "and_result%0#0" + ], + "stack_out": [ + "and_result%0#0" + ] + }, + "5425": { + "retsub": true, + "op": "retsub" + }, + "5426": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.pluginCheck", + "params": { + "key#0": "bytes" + }, + "block": "pluginCheck", + "stack_in": [], + "op": "proto 1 2" + }, + "5429": { + "op": "bytec_1 // \"\"", + "stack_out": [ + "cooldown#0" + ] + }, + "5430": { + "op": "dupn 2", + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0" + ] + }, + "5432": { + "op": "bytec 4 // \"p\"", + "defined_out": [ + "\"p\"" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "\"p\"" + ] + }, + "5434": { + "op": "frame_dig -1", + "defined_out": [ + "\"p\"", + "key#0 (copy)" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "\"p\"", + "key#0 (copy)" + ] + }, + "5436": { + "op": "concat", + "defined_out": [ + "box_prefixed_key%0#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0" + ] + }, + "5437": { + "op": "dup", + "defined_out": [ + "box_prefixed_key%0#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0" + ] + }, + "5438": { + "op": "box_len", + "defined_out": [ + "_%0#0", + "box_prefixed_key%0#0", + "exists#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "_%0#0", + "exists#0" + ] + }, + "5439": { + "op": "dup", + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "_%0#0", + "exists#0", + "exists#0 (copy)" + ] + }, + "5440": { + "op": "uncover 2", + "defined_out": [ + "_%0#0", + "box_prefixed_key%0#0", + "exists#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "exists#0", + "_%0#0" + ] + }, + "5442": { + "op": "pop", + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "exists#0" + ] + }, + "5443": { + "op": "bnz pluginCheck_after_if_else@2", + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0" + ] + }, + "5446": { + "op": "pushbytes 0x60", + "defined_out": [ + "0x60", + "box_prefixed_key%0#0", + "exists#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "0x60" + ] + }, + "5449": { + "op": "frame_dig -1", + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "0x60", + "key#0 (copy)" + ] + }, + "5451": { + "op": "frame_bury 1" + }, + "5453": { + "op": "frame_bury 0" + }, + "5455": { + "retsub": true, + "op": "retsub" + }, + "5456": { + "block": "pluginCheck_after_if_else@2", + "stack_in": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0" + ], + "op": "frame_dig 3", + "defined_out": [ + "box_prefixed_key%0#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "box_prefixed_key%0#0" + ] + }, + "5458": { + "op": "dup", + "defined_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)" + ] + }, + "5459": { + "op": "pushint 9 // 9", + "defined_out": [ + "9", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "9" + ] + }, + "5461": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "9", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "9", + "8" + ] + }, + "5462": { + "op": "box_extract", + "defined_out": [ + "box%box_extract%0#0", + "box_prefixed_key%0#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "box_prefixed_key%0#0", + "box%box_extract%0#0" + ] + }, + "5463": { + "op": "btoi", + "defined_out": [ + "box_prefixed_key%0#0", + "lastValid#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "box_prefixed_key%0#0", + "lastValid#0" + ] + }, + "5464": { + "op": "frame_bury 2", + "defined_out": [ + "box_prefixed_key%0#0", + "lastValid#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "box_prefixed_key%0#0" + ] + }, + "5466": { + "op": "dup", + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)" + ] + }, + "5467": { + "op": "pushint 17 // 17", + "defined_out": [ + "17", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "lastValid#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "17" + ] + }, + "5469": { + "op": "intc_3 // 8", + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "17", + "8" + ] + }, + "5470": { + "op": "box_extract", + "defined_out": [ + "box%box_extract%1#0", + "box_prefixed_key%0#0", + "lastValid#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "box_prefixed_key%0#0", + "box%box_extract%1#0" + ] + }, + "5471": { + "op": "btoi", + "defined_out": [ + "box_prefixed_key%0#0", + "cooldown#0", + "lastValid#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "box_prefixed_key%0#0", + "cooldown#0" + ] + }, + "5472": { + "op": "frame_bury 0", + "defined_out": [ + "box_prefixed_key%0#0", + "cooldown#0", + "lastValid#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "box_prefixed_key%0#0" + ] + }, + "5474": { + "op": "dup", + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)" + ] + }, + "5475": { + "op": "pushint 27 // 27", + "defined_out": [ + "27", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "cooldown#0", + "lastValid#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "27" + ] + }, + "5477": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "27", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "cooldown#0", + "lastValid#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "27", + "1" + ] + }, + "5478": { + "op": "box_extract", + "defined_out": [ + "box%box_extract%2#0", + "box_prefixed_key%0#0", + "cooldown#0", + "lastValid#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "box_prefixed_key%0#0", + "box%box_extract%2#0" + ] + }, + "5479": { + "op": "intc_1 // 1", + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "box_prefixed_key%0#0", + "box%box_extract%2#0", + "1" + ] + }, + "5480": { + "op": "getbit", + "defined_out": [ + "box_prefixed_key%0#0", + "cooldown#0", + "lastValid#0", + "useRounds#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "box_prefixed_key%0#0", + "useRounds#0" + ] + }, + "5481": { + "op": "swap", + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "useRounds#0", + "box_prefixed_key%0#0" + ] + }, + "5482": { + "op": "pushint 28 // 28", + "defined_out": [ + "28", + "box_prefixed_key%0#0", + "cooldown#0", + "lastValid#0", + "useRounds#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "useRounds#0", + "box_prefixed_key%0#0", + "28" + ] + }, + "5484": { + "op": "intc_3 // 8", + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "useRounds#0", + "box_prefixed_key%0#0", + "28", + "8" + ] + }, + "5485": { + "op": "box_extract", + "defined_out": [ + "box%box_extract%3#0", + "box_prefixed_key%0#0", + "cooldown#0", + "lastValid#0", + "useRounds#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "useRounds#0", + "box%box_extract%3#0" + ] + }, + "5486": { + "op": "btoi", + "defined_out": [ + "box_prefixed_key%0#0", + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "useRounds#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "useRounds#0", + "lastCalled#0" + ] + }, + "5487": { + "op": "frame_bury 1", + "defined_out": [ + "box_prefixed_key%0#0", + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "useRounds#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "useRounds#0" + ] + }, + "5489": { + "op": "bz pluginCheck_ternary_false@4", + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0" + ] + }, + "5492": { + "op": "global Round", + "defined_out": [ + "box_prefixed_key%0#0", + "cooldown#0", + "epochRef#0", + "lastCalled#0", + "lastValid#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "epochRef#0" + ] + }, + "5494": { + "block": "pluginCheck_ternary_merge@5", + "stack_in": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "epochRef#0" + ], + "op": "dup", + "defined_out": [ + "epochRef#0", + "epochRef#0 (copy)" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "epochRef#0", + "epochRef#0 (copy)" + ] + }, + "5495": { + "op": "frame_dig 2", + "defined_out": [ + "epochRef#0", + "epochRef#0 (copy)", + "lastValid#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "epochRef#0", + "epochRef#0 (copy)", + "lastValid#0" + ] + }, + "5497": { + "op": ">", + "defined_out": [ + "epochRef#0", + "lastValid#0", + "tmp%1#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "epochRef#0", + "tmp%1#0" + ] + }, + "5498": { + "op": "swap", + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "tmp%1#0", + "epochRef#0" + ] + }, + "5499": { + "op": "frame_dig 1", + "defined_out": [ + "epochRef#0", + "lastCalled#0", + "lastValid#0", + "tmp%1#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "tmp%1#0", + "epochRef#0", + "lastCalled#0" + ] + }, + "5501": { + "op": "-", + "defined_out": [ + "lastCalled#0", + "lastValid#0", + "tmp%1#0", + "tmp%2#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "tmp%1#0", + "tmp%2#0" + ] + }, + "5502": { + "op": "frame_dig 0", + "defined_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "tmp%1#0", + "tmp%2#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "tmp%1#0", + "tmp%2#0", + "cooldown#0" + ] + }, + "5504": { + "op": "<", + "defined_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "tmp%1#0", + "tmp%3#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "tmp%1#0", + "tmp%3#0" + ] + }, + "5505": { + "op": "frame_dig 3", + "defined_out": [ + "box_prefixed_key%0#0", + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "tmp%1#0", + "tmp%3#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "tmp%1#0", + "tmp%3#0", + "box_prefixed_key%0#0" + ] + }, + "5507": { + "op": "pushint 44 // 44", + "defined_out": [ + "44", + "box_prefixed_key%0#0", + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "tmp%1#0", + "tmp%3#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "tmp%1#0", + "tmp%3#0", + "box_prefixed_key%0#0", + "44" + ] + }, + "5509": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "44", + "box_prefixed_key%0#0", + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "tmp%1#0", + "tmp%3#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "tmp%1#0", + "tmp%3#0", + "box_prefixed_key%0#0", + "44", + "2" + ] + }, + "5510": { + "op": "box_extract", + "defined_out": [ + "box%box_extract%4#0", + "box_prefixed_key%0#0", + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "tmp%1#0", + "tmp%3#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "tmp%1#0", + "tmp%3#0", + "box%box_extract%4#0" + ] + }, + "5511": { + "op": "btoi", + "defined_out": [ + "box%array_length%0#0", + "box_prefixed_key%0#0", + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "tmp%1#0", + "tmp%3#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "tmp%1#0", + "tmp%3#0", + "box%array_length%0#0" + ] + }, + "5512": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "box%array_length%0#0", + "box_prefixed_key%0#0", + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "tmp%1#0", + "tmp%3#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "tmp%1#0", + "tmp%3#0", + "box%array_length%0#0", + "0" + ] + }, + "5513": { + "op": ">", + "defined_out": [ + "box_prefixed_key%0#0", + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "tmp%1#0", + "tmp%3#0", + "tmp%5#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "tmp%1#0", + "tmp%3#0", + "tmp%5#0" + ] + }, + "5514": { + "op": "bytec 9 // 0x00", + "defined_out": [ + "0x00", + "box_prefixed_key%0#0", + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "tmp%1#0", + "tmp%3#0", + "tmp%5#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "tmp%1#0", + "tmp%3#0", + "tmp%5#0", + "0x00" + ] + }, + "5516": { + "op": "intc_0 // 0", + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "tmp%1#0", + "tmp%3#0", + "tmp%5#0", + "0x00", + "0" + ] + }, + "5517": { + "op": "frame_dig 4", + "defined_out": [ + "0", + "0x00", + "box_prefixed_key%0#0", + "cooldown#0", + "exists#0", + "lastCalled#0", + "lastValid#0", + "tmp%1#0", + "tmp%3#0", + "tmp%5#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "tmp%1#0", + "tmp%3#0", + "tmp%5#0", + "0x00", + "0", + "exists#0" + ] + }, + "5519": { + "op": "setbit", + "defined_out": [ + "aggregate%encoded_bool%1#0", + "box_prefixed_key%0#0", + "cooldown#0", + "exists#0", + "lastCalled#0", + "lastValid#0", + "tmp%1#0", + "tmp%3#0", + "tmp%5#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "tmp%1#0", + "tmp%3#0", + "tmp%5#0", + "aggregate%encoded_bool%1#0" + ] + }, + "5520": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "aggregate%encoded_bool%1#0", + "box_prefixed_key%0#0", + "cooldown#0", + "exists#0", + "lastCalled#0", + "lastValid#0", + "tmp%1#0", + "tmp%3#0", + "tmp%5#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "tmp%1#0", + "tmp%3#0", + "tmp%5#0", + "aggregate%encoded_bool%1#0", + "1" + ] + }, + "5521": { + "op": "uncover 4", + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "tmp%3#0", + "tmp%5#0", + "aggregate%encoded_bool%1#0", + "1", + "tmp%1#0" + ] + }, + "5523": { + "op": "setbit", + "defined_out": [ + "aggregate%set_bit%3#0", + "box_prefixed_key%0#0", + "cooldown#0", + "exists#0", + "lastCalled#0", + "lastValid#0", + "tmp%3#0", + "tmp%5#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "tmp%3#0", + "tmp%5#0", + "aggregate%set_bit%3#0" + ] + }, + "5524": { + "op": "intc_2 // 2", + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "tmp%3#0", + "tmp%5#0", + "aggregate%set_bit%3#0", + "2" + ] + }, + "5525": { + "op": "uncover 3", + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "tmp%5#0", + "aggregate%set_bit%3#0", + "2", + "tmp%3#0" + ] + }, + "5527": { + "op": "setbit", + "defined_out": [ + "aggregate%set_bit%4#0", + "box_prefixed_key%0#0", + "cooldown#0", + "exists#0", + "lastCalled#0", + "lastValid#0", + "tmp%5#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "tmp%5#0", + "aggregate%set_bit%4#0" + ] + }, + "5528": { + "op": "pushint 3 // 3", + "defined_out": [ + "3", + "aggregate%set_bit%4#0", + "box_prefixed_key%0#0", + "cooldown#0", + "exists#0", + "lastCalled#0", + "lastValid#0", + "tmp%5#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "tmp%5#0", + "aggregate%set_bit%4#0", + "3" + ] + }, + "5530": { + "op": "uncover 2", + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "aggregate%set_bit%4#0", + "3", + "tmp%5#0" + ] + }, + "5532": { + "op": "setbit", + "defined_out": [ + "aggregate%set_bit%5#0", + "box_prefixed_key%0#0", + "cooldown#0", + "exists#0", + "lastCalled#0", + "lastValid#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "aggregate%set_bit%5#0" + ] + }, + "5533": { + "op": "frame_dig -1", + "defined_out": [ + "aggregate%set_bit%5#0", + "box_prefixed_key%0#0", + "cooldown#0", + "exists#0", + "key#0 (copy)", + "lastCalled#0", + "lastValid#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "aggregate%set_bit%5#0", + "key#0 (copy)" + ] + }, + "5535": { + "op": "frame_bury 1" + }, + "5537": { + "op": "frame_bury 0" + }, + "5539": { + "retsub": true, + "op": "retsub" + }, + "5540": { + "block": "pluginCheck_ternary_false@4", + "stack_in": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0" + ], + "op": "global LatestTimestamp", + "defined_out": [ + "epochRef#0" + ], + "stack_out": [ + "cooldown#0", + "lastCalled#0", + "lastValid#0", + "box_prefixed_key%0#0", + "exists#0", + "epochRef#0" + ] + }, + "5542": { + "op": "b pluginCheck_ternary_merge@5" + }, + "5545": { + "subroutine": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin", + "params": { + "plugin#0": "uint64", + "global#0": "uint64", + "escrow#0": "bytes", + "methodOffsets#0": "bytes", + "fundsRequest#0": "bytes" + }, + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin", + "stack_in": [], + "op": "proto 5 2" + }, + "5548": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%encoded_element%0#0" + ] + }, + "5549": { + "op": "dupn 10", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0" + ] + }, + "5551": { + "op": "bytec_1 // \"\"", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0" + ] + }, + "5552": { + "op": "dupn 18", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "5554": { + "op": "frame_dig -4", + "defined_out": [ + "global#0 (copy)" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "global#0 (copy)" + ] + }, + "5556": { + "op": "bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_false@2", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "5559": { + "op": "global ZeroAddress", + "defined_out": [ + "caller#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "caller#0" + ] + }, + "5561": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_merge@3", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "caller#0" + ], + "op": "frame_dig -5", + "defined_out": [ + "plugin#0 (copy)" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "caller#0", + "plugin#0 (copy)" + ] + }, + "5563": { + "op": "itob", + "defined_out": [ + "aggregate%val_as_bytes%0#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "caller#0", + "aggregate%val_as_bytes%0#0" + ] + }, + "5564": { + "op": "swap", + "defined_out": [ + "aggregate%val_as_bytes%0#0", + "caller#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%val_as_bytes%0#0", + "caller#0" + ] + }, + "5565": { + "op": "concat", + "defined_out": [ + "aggregate%head%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%head%1#0" + ] + }, + "5566": { + "op": "frame_dig -3", + "defined_out": [ + "aggregate%head%1#0", + "escrow#0 (copy)" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%head%1#0", + "escrow#0 (copy)" + ] + }, + "5568": { + "op": "len", + "defined_out": [ + "aggregate%head%1#0", + "aggregate%length%0#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%head%1#0", + "aggregate%length%0#0" + ] + }, + "5569": { + "op": "itob", + "defined_out": [ + "aggregate%as_bytes%0#0", + "aggregate%head%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%head%1#0", + "aggregate%as_bytes%0#0" + ] + }, + "5570": { + "op": "extract 6 2", + "defined_out": [ + "aggregate%head%1#0", + "aggregate%length_uint16%0#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%head%1#0", + "aggregate%length_uint16%0#0" + ] + }, + "5573": { + "op": "frame_dig -3", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%head%1#0", + "aggregate%length_uint16%0#0", + "escrow#0 (copy)" + ] + }, + "5575": { + "op": "concat", + "defined_out": [ + "aggregate%encoded_value%0#0", + "aggregate%head%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%head%1#0", + "aggregate%encoded_value%0#0" + ] + }, + "5576": { + "op": "dup", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%head%1#0", + "aggregate%encoded_value%0#0", + "aggregate%encoded_value%0#0" + ] + }, + "5577": { + "op": "frame_bury 1", + "defined_out": [ + "aggregate%encoded_value%0#0", + "aggregate%head%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%head%1#0", + "aggregate%encoded_value%0#0" + ] + }, + "5579": { + "op": "swap", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%encoded_value%0#0", + "aggregate%head%1#0" + ] + }, + "5580": { + "op": "bytec 12 // 0x002a", + "defined_out": [ + "0x002a", + "aggregate%encoded_value%0#0", + "aggregate%head%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%encoded_value%0#0", + "aggregate%head%1#0", + "0x002a" + ] + }, + "5582": { + "op": "concat", + "defined_out": [ + "aggregate%encoded_value%0#0", + "aggregate%head%2#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%encoded_value%0#0", + "aggregate%head%2#0" + ] + }, + "5583": { + "op": "swap", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%head%2#0", + "aggregate%encoded_value%0#0" + ] + }, + "5584": { + "op": "concat", + "defined_out": [ + "aggregate%encoded_value%0#0", + "key#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0" + ] + }, + "5585": { + "op": "dup", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "key#0" + ] + }, + "5586": { + "op": "frame_bury 6", + "defined_out": [ + "aggregate%encoded_value%0#0", + "key#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0" + ] + }, + "5588": { + "op": "bytec 4 // \"p\"", + "defined_out": [ + "\"p\"", + "aggregate%encoded_value%0#0", + "key#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "\"p\"" + ] + }, + "5590": { + "op": "dig 1", + "defined_out": [ + "\"p\"", + "aggregate%encoded_value%0#0", + "key#0", + "key#0 (copy)" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "\"p\"", + "key#0 (copy)" + ] + }, + "5592": { + "op": "concat", + "defined_out": [ + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "key#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "box_prefixed_key%0#0" + ] + }, + "5593": { + "op": "dup", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0" + ] + }, + "5594": { + "op": "frame_bury 2", + "defined_out": [ + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "key#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "box_prefixed_key%0#0" + ] + }, + "5596": { + "op": "box_len", + "defined_out": [ + "_%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "key#0", + "maybe_exists%0#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "_%0#0", + "maybe_exists%0#0" + ] + }, + "5597": { + "op": "bury 1", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "maybe_exists%0#0" + ] + }, + "5599": { + "error": "plugin does not exist", + "op": "assert // plugin does not exist", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0" + ] + }, + "5600": { + "op": "bytec 19 // \"current_plugin\"", + "defined_out": [ + "\"current_plugin\"", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "key#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "\"current_plugin\"" + ] + }, + "5602": { + "op": "swap", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "\"current_plugin\"", + "key#0" + ] + }, + "5603": { + "op": "app_global_put", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "5604": { + "op": "frame_dig -3", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "escrow#0 (copy)" + ] + }, + "5606": { + "op": "bytec_1 // \"\"", + "defined_out": [ + "\"\"", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "escrow#0 (copy)", + "key#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "escrow#0 (copy)", + "\"\"" + ] + }, + "5607": { + "op": "!=", + "defined_out": [ + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "key#0", + "tmp%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%1#0" + ] + }, + "5608": { + "op": "bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_else_body@7", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "5611": { + "op": "bytec 5 // \"e\"", + "defined_out": [ + "\"e\"", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "key#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "\"e\"" + ] + }, + "5613": { + "op": "frame_dig -3", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "\"e\"", + "escrow#0 (copy)" + ] + }, + "5615": { + "op": "concat", + "defined_out": [ + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%1#0", + "key#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%1#0" + ] + }, + "5616": { + "op": "dup", + "defined_out": [ + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%1#0", + "box_prefixed_key%1#0 (copy)", + "key#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%1#0", + "box_prefixed_key%1#0 (copy)" + ] + }, + "5617": { + "op": "box_len", + "defined_out": [ + "_%1#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%1#0", + "key#0", + "maybe_exists%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%1#0", + "_%1#0", + "maybe_exists%1#0" + ] + }, + "5618": { + "op": "bury 1", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%1#0", + "maybe_exists%1#0" + ] + }, + "5620": { + "error": "escrow does not exist", + "op": "assert // escrow does not exist", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%1#0" + ] + }, + "5621": { + "op": "box_get", + "defined_out": [ + "aggregate%box_get%0#0", + "aggregate%box_get%1#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "key#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%box_get%0#0", + "aggregate%box_get%1#0" + ] + }, + "5622": { + "op": "pop", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%box_get%0#0" + ] + }, + "5623": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%box_get%0#0", + "0" + ] + }, + "5624": { + "op": "extract_uint64", + "defined_out": [ + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "escrowID#0", + "key#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "escrowID#0" + ] + }, + "5625": { + "op": "dup", + "defined_out": [ + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "escrowID#0", + "escrowID#0 (copy)", + "key#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "escrowID#0", + "escrowID#0 (copy)" + ] + }, + "5626": { + "op": "app_params_get AppAddress", + "defined_out": [ + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "check%0#0", + "escrowID#0", + "key#0", + "value%0#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "escrowID#0", + "value%0#0", + "check%0#0" + ] + }, + "5628": { + "error": "application exists", + "op": "assert // application exists", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "escrowID#0", + "value%0#0" + ] + }, + "5629": { + "op": "bytec 11 // \"spending_address\"", + "defined_out": [ + "\"spending_address\"", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "escrowID#0", + "key#0", + "value%0#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "escrowID#0", + "value%0#0", + "\"spending_address\"" + ] + }, + "5631": { + "op": "swap", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "escrowID#0", + "\"spending_address\"", + "value%0#0" + ] + }, + "5632": { + "op": "app_global_put", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "escrowID#0" + ] + }, + "5633": { + "op": "app_params_get AppAddress", + "defined_out": [ + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "check%0#0", + "escrowAddress#0", + "key#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "escrowAddress#0", + "check%0#0" + ] + }, + "5635": { + "op": "swap", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "check%0#0", + "escrowAddress#0" + ] + }, + "5636": { + "op": "frame_bury 5", + "defined_out": [ + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "check%0#0", + "escrowAddress#0", + "key#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "check%0#0" + ] + }, + "5638": { + "error": "application exists", + "op": "assert // application exists", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "5639": { + "op": "intc_0 // 0", + "defined_out": [ + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "escrowAddress#0", + "i#0", + "key#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "i#0" + ] + }, + "5640": { + "op": "frame_bury 16", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "5642": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_while_top@56", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ], + "op": "frame_dig -1", + "defined_out": [ + "fundsRequest#0 (copy)" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "fundsRequest#0 (copy)" + ] + }, + "5644": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "fundsRequest#0 (copy)" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "fundsRequest#0 (copy)", + "0" + ] + }, + "5645": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%0#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%array_length%0#0" + ] + }, + "5646": { + "op": "frame_dig 16", + "defined_out": [ + "aggregate%array_length%0#0", + "i#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%array_length%0#0", + "i#0" + ] + }, + "5648": { + "op": ">", + "defined_out": [ + "i#0", + "tmp%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%1#0" + ] + }, + "5649": { + "op": "bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@8", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "5652": { + "op": "frame_dig -1", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "fundsRequest#0 (copy)" + ] + }, + "5654": { + "op": "extract 2 0", + "defined_out": [ + "aggregate%array_trimmed%0#0", + "i#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%array_trimmed%0#0" + ] + }, + "5657": { + "op": "frame_dig 16", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%array_trimmed%0#0", + "i#0" + ] + }, + "5659": { + "op": "pushint 16 // 16", + "defined_out": [ + "16", + "aggregate%array_trimmed%0#0", + "i#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%array_trimmed%0#0", + "i#0", + "16" + ] + }, + "5661": { + "op": "*", + "defined_out": [ + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0", + "i#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0" + ] + }, + "5662": { + "op": "pushint 16 // 16", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0", + "16" + ] + }, + "5664": { + "error": "index access is out of bounds", + "op": "extract3 // on error: index access is out of bounds", + "defined_out": [ + "aggregate%encoded_element%0#0", + "i#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%encoded_element%0#0" + ] + }, + "5665": { + "op": "dup", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%encoded_element%0#0", + "aggregate%encoded_element%0#0" + ] + }, + "5666": { + "op": "frame_bury 0", + "defined_out": [ + "aggregate%encoded_element%0#0", + "i#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%encoded_element%0#0" + ] + }, + "5668": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%encoded_element%0#0", + "0" + ] + }, + "5669": { + "op": "extract_uint64", + "defined_out": [ + "aggregate%encoded_element%0#0", + "i#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "values%1#0" + ] + }, + "5670": { + "op": "dup", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "values%1#0", + "values%1#0" + ] + }, + "5671": { + "op": "frame_bury 29", + "defined_out": [ + "aggregate%encoded_element%0#0", + "i#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "values%1#0" + ] + }, + "5673": { + "op": "itob", + "defined_out": [ + "aggregate%encoded_element%0#0", + "aggregate%val_as_bytes%1#0", + "i#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%val_as_bytes%1#0" + ] + }, + "5674": { + "op": "bytec 13 // 0x000a", + "defined_out": [ + "0x000a", + "aggregate%encoded_element%0#0", + "aggregate%val_as_bytes%1#0", + "i#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%val_as_bytes%1#0", + "0x000a" + ] + }, + "5676": { + "op": "swap", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "0x000a", + "aggregate%val_as_bytes%1#0" + ] + }, + "5677": { + "op": "concat", + "defined_out": [ + "aggregate%encoded_element%0#0", + "aggregate%head%4#0", + "i#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%head%4#0" + ] + }, + "5678": { + "op": "frame_dig 1", + "defined_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "aggregate%head%4#0", + "i#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%head%4#0", + "aggregate%encoded_value%0#0" + ] + }, + "5680": { + "op": "concat", + "defined_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "allowanceKey#0", + "i#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "allowanceKey#0" + ] + }, + "5681": { + "op": "bytec 14 // \"a\"", + "defined_out": [ + "\"a\"", + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "allowanceKey#0", + "i#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "allowanceKey#0", + "\"a\"" + ] + }, + "5683": { + "op": "swap", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "\"a\"", + "allowanceKey#0" + ] + }, + "5684": { + "op": "concat", + "defined_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#4", + "i#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%0#4" + ] + }, + "5685": { + "op": "dup", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%0#4", + "box_prefixed_key%0#4" + ] + }, + "5686": { + "op": "frame_bury 3", + "defined_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#4", + "i#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%0#4" + ] + }, + "5688": { + "op": "dup", + "defined_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%0#4 (copy)", + "i#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%0#4", + "box_prefixed_key%0#4 (copy)" + ] + }, + "5689": { + "op": "box_len", + "defined_out": [ + "_%0#0", + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#4", + "i#0", + "maybe_exists%0#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%0#4", + "_%0#0", + "maybe_exists%0#0" + ] + }, + "5690": { + "op": "bury 1", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%0#4", + "maybe_exists%0#0" + ] + }, + "5692": { + "error": "allowance does not exist", + "op": "assert // allowance does not exist", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%0#4" + ] + }, + "5693": { + "op": "box_get", + "defined_out": [ + "aggregate%box_get%4#0", + "aggregate%box_get%5#0", + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#4", + "i#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%box_get%4#0", + "aggregate%box_get%5#0" + ] + }, + "5694": { + "op": "pop", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%box_get%4#0" + ] + }, + "5695": { + "op": "dup", + "defined_out": [ + "aggregate%box_get%4#0", + "aggregate%box_get%4#0 (copy)", + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#4", + "i#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%box_get%4#0", + "aggregate%box_get%4#0 (copy)" + ] + }, + "5696": { + "op": "extract 0 1", + "defined_out": [ + "aggregate%box_get%4#0", + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#4", + "i#0", + "type#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%box_get%4#0", + "type#0" + ] + }, + "5699": { + "op": "frame_bury 10", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%box_get%4#0" + ] + }, + "5701": { + "op": "dup", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%box_get%4#0", + "aggregate%box_get%4#0 (copy)" + ] + }, + "5702": { + "op": "pushint 17 // 17", + "defined_out": [ + "17", + "aggregate%box_get%4#0", + "aggregate%box_get%4#0 (copy)", + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#4", + "i#0", + "type#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%box_get%4#0", + "aggregate%box_get%4#0 (copy)", + "17" + ] + }, + "5704": { + "op": "extract_uint64", + "defined_out": [ + "aggregate%box_get%4#0", + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#4", + "i#0", + "spent#0", + "type#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%box_get%4#0", + "spent#0" + ] + }, + "5705": { + "op": "frame_bury 26", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%box_get%4#0" + ] + }, + "5707": { + "op": "dup", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%box_get%4#0", + "aggregate%box_get%4#0 (copy)" + ] + }, + "5708": { + "op": "pushint 9 // 9", + "defined_out": [ + "9", + "aggregate%box_get%4#0", + "aggregate%box_get%4#0 (copy)", + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#4", + "i#0", + "spent#0", + "type#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%box_get%4#0", + "aggregate%box_get%4#0 (copy)", + "9" + ] + }, + "5710": { + "op": "extract_uint64", + "defined_out": [ + "aggregate%box_get%4#0", + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "amount#0", + "box_prefixed_key%0#4", + "i#0", + "spent#0", + "type#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%box_get%4#0", + "amount#0" + ] + }, + "5711": { + "op": "frame_bury 11", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%box_get%4#0" + ] + }, + "5713": { + "op": "dup", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%box_get%4#0", + "aggregate%box_get%4#0 (copy)" + ] + }, + "5714": { + "op": "pushint 33 // 33", + "defined_out": [ + "33", + "aggregate%box_get%4#0", + "aggregate%box_get%4#0 (copy)", + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "amount#0", + "box_prefixed_key%0#4", + "i#0", + "spent#0", + "type#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%box_get%4#0", + "aggregate%box_get%4#0 (copy)", + "33" + ] + }, + "5716": { + "op": "extract_uint64", + "defined_out": [ + "aggregate%box_get%4#0", + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "amount#0", + "box_prefixed_key%0#4", + "i#0", + "last#0", + "spent#0", + "type#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%box_get%4#0", + "last#0" + ] + }, + "5717": { + "op": "frame_bury 19", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%box_get%4#0" + ] + }, + "5719": { + "op": "dup", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%box_get%4#0", + "aggregate%box_get%4#0 (copy)" + ] + }, + "5720": { + "op": "intc_1 // 1", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%box_get%4#0", + "aggregate%box_get%4#0 (copy)", + "1" + ] + }, + "5721": { + "op": "extract_uint64", + "defined_out": [ + "aggregate%box_get%4#0", + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "amount#0", + "box_prefixed_key%0#4", + "i#0", + "last#0", + "max#0", + "spent#0", + "type#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%box_get%4#0", + "max#0" + ] + }, + "5722": { + "op": "frame_bury 21", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%box_get%4#0" + ] + }, + "5724": { + "op": "dup", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%box_get%4#0", + "aggregate%box_get%4#0 (copy)" + ] + }, + "5725": { + "op": "pushint 25 // 25", + "defined_out": [ + "25", + "aggregate%box_get%4#0", + "aggregate%box_get%4#0 (copy)", + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "amount#0", + "box_prefixed_key%0#4", + "i#0", + "last#0", + "max#0", + "spent#0", + "type#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%box_get%4#0", + "aggregate%box_get%4#0 (copy)", + "25" + ] + }, + "5727": { + "op": "extract_uint64", + "defined_out": [ + "aggregate%box_get%4#0", + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "amount#0", + "box_prefixed_key%0#4", + "i#0", + "interval#0", + "last#0", + "max#0", + "spent#0", + "type#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%box_get%4#0", + "interval#0" + ] + }, + "5728": { + "op": "frame_bury 17", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%box_get%4#0" + ] + }, + "5730": { + "op": "dup", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%box_get%4#0", + "aggregate%box_get%4#0 (copy)" + ] + }, + "5731": { + "op": "pushint 41 // 41", + "defined_out": [ + "41", + "aggregate%box_get%4#0", + "aggregate%box_get%4#0 (copy)", + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "amount#0", + "box_prefixed_key%0#4", + "i#0", + "interval#0", + "last#0", + "max#0", + "spent#0", + "type#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%box_get%4#0", + "aggregate%box_get%4#0 (copy)", + "41" + ] + }, + "5733": { + "op": "extract_uint64", + "defined_out": [ + "aggregate%box_get%4#0", + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "amount#0", + "box_prefixed_key%0#4", + "i#0", + "interval#0", + "last#0", + "max#0", + "spent#0", + "start#0", + "type#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%box_get%4#0", + "start#0" + ] + }, + "5734": { + "op": "frame_bury 27", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%box_get%4#0" + ] + }, + "5736": { + "op": "pushint 392 // 392", + "defined_out": [ + "392", + "aggregate%box_get%4#0", + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "amount#0", + "box_prefixed_key%0#4", + "i#0", + "interval#0", + "last#0", + "max#0", + "spent#0", + "start#0", + "type#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%box_get%4#0", + "392" + ] + }, + "5739": { + "op": "getbit", + "defined_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "amount#0", + "box_prefixed_key%0#4", + "i#0", + "interval#0", + "last#0", + "max#0", + "spent#0", + "start#0", + "type#0", + "useRounds#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "useRounds#0" + ] + }, + "5740": { + "op": "dup", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "useRounds#0", + "useRounds#0" + ] + }, + "5741": { + "op": "frame_bury 28", + "defined_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "amount#0", + "box_prefixed_key%0#4", + "i#0", + "interval#0", + "last#0", + "max#0", + "spent#0", + "start#0", + "type#0", + "useRounds#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "useRounds#0" + ] + }, + "5743": { + "op": "bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_false@59", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "5746": { + "op": "global Round", + "defined_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "amount#0", + "box_prefixed_key%0#4", + "i#0", + "interval#0", + "last#0", + "max#0", + "newLast#0", + "spent#0", + "start#0", + "type#0", + "useRounds#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "newLast#0" + ] + }, + "5748": { + "op": "frame_bury 24", + "defined_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "amount#0", + "box_prefixed_key%0#4", + "i#0", + "interval#0", + "last#0", + "max#0", + "newLast#0", + "spent#0", + "start#0", + "type#0", + "useRounds#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "5750": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_merge@60", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ], + "op": "frame_dig 10", + "defined_out": [ + "type#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "type#0" + ] + }, + "5752": { + "op": "bytec 15 // 0x01", + "defined_out": [ + "0x01", + "type#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "type#0", + "0x01" + ] + }, + "5754": { + "op": "==", + "defined_out": [ + "tmp%0#3", + "type#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%0#3" + ] + }, + "5755": { + "op": "bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_else_body@62", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "5758": { + "op": "frame_dig 11", + "defined_out": [ + "amount#0", + "type#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "amount#0" + ] + }, + "5760": { + "op": "frame_dig 26", + "defined_out": [ + "amount#0", + "spent#0", + "type#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "amount#0", + "spent#0" + ] + }, + "5762": { + "op": "-", + "defined_out": [ + "amount#0", + "leftover#0", + "spent#0", + "type#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "leftover#0" + ] + }, + "5763": { + "op": "frame_dig 0", + "defined_out": [ + "aggregate%encoded_element%0#0", + "amount#0", + "leftover#0", + "spent#0", + "type#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "leftover#0", + "aggregate%encoded_element%0#0" + ] + }, + "5765": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "aggregate%encoded_element%0#0", + "amount#0", + "leftover#0", + "spent#0", + "type#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "leftover#0", + "aggregate%encoded_element%0#0", + "8" + ] + }, + "5766": { + "op": "extract_uint64", + "defined_out": [ + "aggregate%encoded_element%0#0", + "amount#0", + "leftover#0", + "spent#0", + "type#0", + "values%7#1" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "leftover#0", + "values%7#1" + ] + }, + "5767": { + "op": "swap", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "values%7#1", + "leftover#0" + ] + }, + "5768": { + "op": "dig 1", + "defined_out": [ + "aggregate%encoded_element%0#0", + "amount#0", + "leftover#0", + "spent#0", + "type#0", + "values%7#1", + "values%7#1 (copy)" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "values%7#1", + "leftover#0", + "values%7#1 (copy)" + ] + }, + "5770": { + "op": ">=", + "defined_out": [ + "aggregate%encoded_element%0#0", + "amount#0", + "spent#0", + "tmp%2#2", + "type#0", + "values%7#1" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "values%7#1", + "tmp%2#2" + ] + }, + "5771": { + "error": "allowance exceeded", + "op": "assert // allowance exceeded", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "values%7#1" + ] + }, + "5772": { + "op": "frame_dig 3", + "defined_out": [ + "aggregate%encoded_element%0#0", + "amount#0", + "box_prefixed_key%0#4", + "spent#0", + "type#0", + "values%7#1" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "values%7#1", + "box_prefixed_key%0#4" + ] + }, + "5774": { + "op": "dup", + "defined_out": [ + "aggregate%encoded_element%0#0", + "amount#0", + "box_prefixed_key%0#4", + "box_prefixed_key%0#4 (copy)", + "spent#0", + "type#0", + "values%7#1" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "values%7#1", + "box_prefixed_key%0#4 (copy)", + "box_prefixed_key%0#4 (copy)" + ] + }, + "5775": { + "op": "cover 2", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%0#4", + "values%7#1", + "box_prefixed_key%0#4 (copy)" + ] + }, + "5777": { + "op": "box_get", + "defined_out": [ + "aggregate%box_get%6#0", + "aggregate%box_get%7#0", + "aggregate%encoded_element%0#0", + "amount#0", + "box_prefixed_key%0#4", + "spent#0", + "type#0", + "values%7#1" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%0#4", + "values%7#1", + "aggregate%box_get%6#0", + "aggregate%box_get%7#0" + ] + }, + "5778": { + "error": "Box must have value", + "op": "assert // Box must have value", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%0#4", + "values%7#1", + "aggregate%box_get%6#0" + ] + }, + "5779": { + "op": "pushint 17 // 17", + "defined_out": [ + "17", + "aggregate%box_get%6#0", + "aggregate%encoded_element%0#0", + "amount#0", + "box_prefixed_key%0#4", + "spent#0", + "type#0", + "values%7#1" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%0#4", + "values%7#1", + "aggregate%box_get%6#0", + "17" + ] + }, + "5781": { + "op": "extract_uint64", + "defined_out": [ + "aggregate%encoded_element%0#0", + "amount#0", + "box_prefixed_key%0#4", + "spent#0", + "type#0", + "values%7#1", + "values%8#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%0#4", + "values%7#1", + "values%8#0" + ] + }, + "5782": { + "op": "+", + "defined_out": [ + "aggregate%encoded_element%0#0", + "amount#0", + "box_prefixed_key%0#4", + "spent#0", + "tmp%3#3", + "type#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%0#4", + "tmp%3#3" + ] + }, + "5783": { + "op": "itob", + "defined_out": [ + "aggregate%encoded_element%0#0", + "aggregate%val_as_bytes%2#0", + "amount#0", + "box_prefixed_key%0#4", + "spent#0", + "type#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%0#4", + "aggregate%val_as_bytes%2#0" + ] + }, + "5784": { + "op": "pushint 17 // 17" + }, + "5786": { + "op": "swap", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%0#4", + "17", + "aggregate%val_as_bytes%2#0" + ] + }, + "5787": { + "op": "box_replace", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "5788": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@71", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ], + "op": "frame_dig 24", + "defined_out": [ + "newLast#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "newLast#0" + ] + }, + "5790": { + "op": "itob", + "defined_out": [ + "aggregate%val_as_bytes%5#0", + "newLast#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%val_as_bytes%5#0" + ] + }, + "5791": { + "op": "frame_dig 3", + "defined_out": [ + "aggregate%val_as_bytes%5#0", + "box_prefixed_key%0#4", + "newLast#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%val_as_bytes%5#0", + "box_prefixed_key%0#4" + ] + }, + "5793": { + "op": "pushint 33 // 33", + "defined_out": [ + "33", + "aggregate%val_as_bytes%5#0", + "box_prefixed_key%0#4", + "newLast#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%val_as_bytes%5#0", + "box_prefixed_key%0#4", + "33" + ] + }, + "5795": { + "op": "uncover 2", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%0#4", + "33", + "aggregate%val_as_bytes%5#0" + ] + }, + "5797": { + "op": "box_replace", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "5798": { + "op": "frame_dig 29", + "defined_out": [ + "box_prefixed_key%0#4", + "newLast#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "values%1#0" + ] + }, + "5800": { + "op": "bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_else_body@73", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "5803": { + "op": "itxn_begin" + }, + "5804": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "box_prefixed_key%0#4", + "newLast#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "0" + ] + }, + "5805": { + "op": "bytec_0 // \"controlled_address\"", + "defined_out": [ + "\"controlled_address\"", + "0", + "box_prefixed_key%0#4", + "newLast#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "0", + "\"controlled_address\"" + ] + }, + "5806": { + "op": "app_global_get_ex", + "defined_out": [ + "box_prefixed_key%0#4", + "maybe_exists%0#0", + "maybe_value%0#0", + "newLast#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "maybe_value%0#0", + "maybe_exists%0#0" + ] + }, + "5807": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "maybe_value%0#0" + ] + }, + "5808": { + "op": "frame_dig 0", + "defined_out": [ + "aggregate%encoded_element%0#0", + "box_prefixed_key%0#4", + "maybe_value%0#0", + "newLast#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "maybe_value%0#0", + "aggregate%encoded_element%0#0" + ] + }, + "5810": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "aggregate%encoded_element%0#0", + "box_prefixed_key%0#4", + "maybe_value%0#0", + "newLast#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "maybe_value%0#0", + "aggregate%encoded_element%0#0", + "8" + ] + }, + "5811": { + "op": "extract_uint64", + "defined_out": [ + "aggregate%encoded_element%0#0", + "box_prefixed_key%0#4", + "maybe_value%0#0", + "newLast#0", + "values%1#0", + "values%3#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "maybe_value%0#0", + "values%3#0" + ] + }, + "5812": { + "op": "frame_dig 29", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "maybe_value%0#0", + "values%3#0", + "values%1#0" + ] + }, + "5814": { + "op": "itxn_field XferAsset", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "maybe_value%0#0", + "values%3#0" + ] + }, + "5816": { + "op": "itxn_field AssetAmount", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "maybe_value%0#0" + ] + }, + "5818": { + "op": "frame_dig 5", + "defined_out": [ + "aggregate%encoded_element%0#0", + "box_prefixed_key%0#4", + "escrowAddress#0", + "maybe_value%0#0", + "newLast#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "maybe_value%0#0", + "escrowAddress#0" + ] + }, + "5820": { + "op": "itxn_field AssetReceiver", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "maybe_value%0#0" + ] + }, + "5822": { + "op": "itxn_field Sender", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "5824": { + "op": "pushint 4 // 4", + "defined_out": [ + "4", + "aggregate%encoded_element%0#0", + "box_prefixed_key%0#4", + "escrowAddress#0", + "newLast#0", + "values%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "4" + ] + }, + "5826": { + "op": "itxn_field TypeEnum", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "5828": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "0" + ] + }, + "5829": { + "op": "itxn_field Fee", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "5831": { + "op": "itxn_submit" + }, + "5832": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@74", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ], + "op": "frame_dig 16", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "i#0" + ] + }, + "5834": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "i#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "i#0", + "1" + ] + }, + "5835": { + "op": "+", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "i#0" + ] + }, + "5836": { + "op": "frame_bury 16", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "5838": { + "op": "b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_while_top@56" + }, + "5841": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_else_body@73", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ], + "op": "itxn_begin" + }, + "5842": { + "op": "intc_0 // 0", + "defined_out": [ + "0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "0" + ] + }, + "5843": { + "op": "bytec_0 // \"controlled_address\"", + "defined_out": [ + "\"controlled_address\"", + "0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "0", + "\"controlled_address\"" + ] + }, + "5844": { + "op": "app_global_get_ex", + "defined_out": [ + "maybe_exists%1#0", + "maybe_value%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "maybe_value%1#0", + "maybe_exists%1#0" + ] + }, + "5845": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "maybe_value%1#0" + ] + }, + "5846": { + "op": "frame_dig 0", + "defined_out": [ + "aggregate%encoded_element%0#0", + "maybe_value%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "maybe_value%1#0", + "aggregate%encoded_element%0#0" + ] + }, + "5848": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "aggregate%encoded_element%0#0", + "maybe_value%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "maybe_value%1#0", + "aggregate%encoded_element%0#0", + "8" + ] + }, + "5849": { + "op": "extract_uint64", + "defined_out": [ + "aggregate%encoded_element%0#0", + "maybe_value%1#0", + "values%5#1" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "maybe_value%1#0", + "values%5#1" + ] + }, + "5850": { + "op": "itxn_field Amount", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "maybe_value%1#0" + ] + }, + "5852": { + "op": "frame_dig 5", + "defined_out": [ + "aggregate%encoded_element%0#0", + "escrowAddress#0", + "maybe_value%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "maybe_value%1#0", + "escrowAddress#0" + ] + }, + "5854": { + "op": "itxn_field Receiver", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "maybe_value%1#0" + ] + }, + "5856": { + "op": "itxn_field Sender", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "5858": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "aggregate%encoded_element%0#0", + "escrowAddress#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "1" + ] + }, + "5859": { + "op": "itxn_field TypeEnum", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "5861": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "0" + ] + }, + "5862": { + "op": "itxn_field Fee", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "5864": { + "op": "itxn_submit" + }, + "5865": { + "op": "b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@74" + }, + "5868": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_else_body@62", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ], + "op": "frame_dig 10", + "defined_out": [ + "type#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "type#0" + ] + }, + "5870": { + "op": "pushbytes 0x02", + "defined_out": [ + "0x02", + "type#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "type#0", + "0x02" + ] + }, + "5873": { + "op": "==", + "defined_out": [ + "tmp%4#2", + "type#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%4#2" + ] + }, + "5874": { + "op": "bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_else_body@66", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "5877": { + "op": "frame_dig 28", + "defined_out": [ + "type#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "useRounds#0" + ] + }, + "5879": { + "op": "bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@77", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "5882": { + "op": "global Round", + "defined_out": [ + "tmp%0#4", + "type#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%0#4" + ] + }, + "5884": { + "op": "dup", + "defined_out": [ + "tmp%0#4", + "tmp%1#2", + "type#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%0#4", + "tmp%1#2" + ] + }, + "5885": { + "op": "frame_dig 27", + "defined_out": [ + "start#0", + "tmp%0#4", + "tmp%1#2", + "type#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%0#4", + "tmp%1#2", + "start#0" + ] + }, + "5887": { + "op": "-", + "defined_out": [ + "start#0", + "tmp%0#4", + "tmp%2#0", + "type#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%0#4", + "tmp%2#0" + ] + }, + "5888": { + "op": "frame_dig 17", + "defined_out": [ + "interval#0", + "start#0", + "tmp%0#4", + "tmp%2#0", + "type#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%0#4", + "tmp%2#0", + "interval#0" + ] + }, + "5890": { + "op": "%", + "defined_out": [ + "interval#0", + "start#0", + "tmp%0#4", + "tmp%3#3", + "type#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%0#4", + "tmp%3#3" + ] + }, + "5891": { + "op": "-", + "defined_out": [ + "currentWindowStart#0", + "interval#0", + "start#0", + "type#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "currentWindowStart#0" + ] + }, + "5892": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_inlined_smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.getLatestWindowStart@78", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "currentWindowStart#0" + ], + "op": "frame_dig 19", + "defined_out": [ + "currentWindowStart#0", + "last#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "currentWindowStart#0", + "last#0" + ] + }, + "5894": { + "op": ">", + "defined_out": [ + "last#0", + "tmp%6#2" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%6#2" + ] + }, + "5895": { + "op": "bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_else_body@65", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "5898": { + "op": "frame_dig 0", + "defined_out": [ + "aggregate%encoded_element%0#0", + "last#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%encoded_element%0#0" + ] + }, + "5900": { + "op": "dup", + "defined_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_element%0#0 (copy)", + "last#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%encoded_element%0#0", + "aggregate%encoded_element%0#0 (copy)" + ] + }, + "5901": { + "op": "extract 8 8", + "defined_out": [ + "aggregate%encoded_element%0#0", + "aggregate%extract%12#0", + "last#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%encoded_element%0#0", + "aggregate%extract%12#0" + ] + }, + "5904": { + "op": "swap", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%extract%12#0", + "aggregate%encoded_element%0#0" + ] + }, + "5905": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "aggregate%encoded_element%0#0", + "aggregate%extract%12#0", + "last#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%extract%12#0", + "aggregate%encoded_element%0#0", + "8" + ] + }, + "5906": { + "op": "extract_uint64", + "defined_out": [ + "aggregate%encoded_element%0#0", + "aggregate%extract%12#0", + "last#0", + "values%10#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%extract%12#0", + "values%10#0" + ] + }, + "5907": { + "op": "frame_dig 11", + "defined_out": [ + "aggregate%encoded_element%0#0", + "aggregate%extract%12#0", + "amount#0", + "last#0", + "values%10#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%extract%12#0", + "values%10#0", + "amount#0" + ] + }, + "5909": { + "op": "<=", + "defined_out": [ + "aggregate%encoded_element%0#0", + "aggregate%extract%12#0", + "amount#0", + "last#0", + "tmp%7#1" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%extract%12#0", + "tmp%7#1" + ] + }, + "5910": { + "error": "allowance exceeded", + "op": "assert // allowance exceeded", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%extract%12#0" + ] + }, + "5911": { + "op": "frame_dig 3", + "defined_out": [ + "aggregate%encoded_element%0#0", + "aggregate%extract%12#0", + "amount#0", + "box_prefixed_key%0#4", + "last#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%extract%12#0", + "box_prefixed_key%0#4" + ] + }, + "5913": { + "op": "pushint 17 // 17", + "defined_out": [ + "17", + "aggregate%encoded_element%0#0", + "aggregate%extract%12#0", + "amount#0", + "box_prefixed_key%0#4", + "last#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%extract%12#0", + "box_prefixed_key%0#4", + "17" + ] + }, + "5915": { + "op": "uncover 2", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%0#4", + "17", + "aggregate%extract%12#0" + ] + }, + "5917": { + "op": "box_replace", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "5918": { + "op": "b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@71" + }, + "5921": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_else_body@65", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ], + "op": "frame_dig 11", + "defined_out": [ + "amount#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "amount#0" + ] + }, + "5923": { + "op": "frame_dig 26", + "defined_out": [ + "amount#0", + "spent#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "amount#0", + "spent#0" + ] + }, + "5925": { + "op": "-", + "defined_out": [ + "amount#0", + "leftover\u2081#0", + "spent#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "leftover\u2081#0" + ] + }, + "5926": { + "op": "frame_dig 0", + "defined_out": [ + "aggregate%encoded_element%0#0", + "amount#0", + "leftover\u2081#0", + "spent#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "leftover\u2081#0", + "aggregate%encoded_element%0#0" + ] + }, + "5928": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "aggregate%encoded_element%0#0", + "amount#0", + "leftover\u2081#0", + "spent#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "leftover\u2081#0", + "aggregate%encoded_element%0#0", + "8" + ] + }, + "5929": { + "op": "extract_uint64", + "defined_out": [ + "aggregate%encoded_element%0#0", + "amount#0", + "leftover\u2081#0", + "spent#0", + "values%12#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "leftover\u2081#0", + "values%12#0" + ] + }, + "5930": { + "op": "swap", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "values%12#0", + "leftover\u2081#0" + ] + }, + "5931": { + "op": "dig 1", + "defined_out": [ + "aggregate%encoded_element%0#0", + "amount#0", + "leftover\u2081#0", + "spent#0", + "values%12#0", + "values%12#0 (copy)" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "values%12#0", + "leftover\u2081#0", + "values%12#0 (copy)" + ] + }, + "5933": { + "op": ">=", + "defined_out": [ + "aggregate%encoded_element%0#0", + "amount#0", + "spent#0", + "tmp%9#2", + "values%12#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "values%12#0", + "tmp%9#2" + ] + }, + "5934": { + "error": "allowance exceeded", + "op": "assert // allowance exceeded", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "values%12#0" + ] + }, + "5935": { + "op": "frame_dig 3", + "defined_out": [ + "aggregate%encoded_element%0#0", + "amount#0", + "box_prefixed_key%0#4", + "spent#0", + "values%12#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "values%12#0", + "box_prefixed_key%0#4" + ] + }, + "5937": { + "op": "dup", + "defined_out": [ + "aggregate%encoded_element%0#0", + "amount#0", + "box_prefixed_key%0#4", + "box_prefixed_key%0#4 (copy)", + "spent#0", + "values%12#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "values%12#0", + "box_prefixed_key%0#4 (copy)", + "box_prefixed_key%0#4 (copy)" + ] + }, + "5938": { + "op": "cover 2", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%0#4", + "values%12#0", + "box_prefixed_key%0#4 (copy)" + ] + }, + "5940": { + "op": "box_get", + "defined_out": [ + "aggregate%box_get%8#0", + "aggregate%box_get%9#0", + "aggregate%encoded_element%0#0", + "amount#0", + "box_prefixed_key%0#4", + "spent#0", + "values%12#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%0#4", + "values%12#0", + "aggregate%box_get%8#0", + "aggregate%box_get%9#0" + ] + }, + "5941": { + "error": "Box must have value", + "op": "assert // Box must have value", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%0#4", + "values%12#0", + "aggregate%box_get%8#0" + ] + }, + "5942": { + "op": "pushint 17 // 17", + "defined_out": [ + "17", + "aggregate%box_get%8#0", + "aggregate%encoded_element%0#0", + "amount#0", + "box_prefixed_key%0#4", + "spent#0", + "values%12#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%0#4", + "values%12#0", + "aggregate%box_get%8#0", + "17" + ] + }, + "5944": { + "op": "extract_uint64", + "defined_out": [ + "aggregate%encoded_element%0#0", + "amount#0", + "box_prefixed_key%0#4", + "spent#0", + "values%12#0", + "values%13#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%0#4", + "values%12#0", + "values%13#0" + ] + }, + "5945": { + "op": "+", + "defined_out": [ + "aggregate%encoded_element%0#0", + "amount#0", + "box_prefixed_key%0#4", + "spent#0", + "tmp%10#2" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%0#4", + "tmp%10#2" + ] + }, + "5946": { + "op": "itob", + "defined_out": [ + "aggregate%encoded_element%0#0", + "aggregate%val_as_bytes%3#0", + "amount#0", + "box_prefixed_key%0#4", + "spent#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%0#4", + "aggregate%val_as_bytes%3#0" + ] + }, + "5947": { + "op": "pushint 17 // 17" + }, + "5949": { + "op": "swap", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%0#4", + "17", + "aggregate%val_as_bytes%3#0" + ] + }, + "5950": { + "op": "box_replace", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "5951": { + "op": "b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@71" + }, + "5954": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@77", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ], + "op": "global LatestTimestamp", + "defined_out": [ + "tmp%5#1" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%5#1" + ] + }, + "5956": { + "op": "dup", + "defined_out": [ + "tmp%5#1", + "tmp%6#1" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%5#1", + "tmp%6#1" + ] + }, + "5957": { + "op": "frame_dig 27", + "defined_out": [ + "start#0", + "tmp%5#1", + "tmp%6#1" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%5#1", + "tmp%6#1", + "start#0" + ] + }, + "5959": { + "op": "-", + "defined_out": [ + "start#0", + "tmp%5#1", + "tmp%7#2" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%5#1", + "tmp%7#2" + ] + }, + "5960": { + "op": "frame_dig 17", + "defined_out": [ + "interval#0", + "start#0", + "tmp%5#1", + "tmp%7#2" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%5#1", + "tmp%7#2", + "interval#0" + ] + }, + "5962": { + "op": "%", + "defined_out": [ + "interval#0", + "start#0", + "tmp%5#1", + "tmp%8#2" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%5#1", + "tmp%8#2" + ] + }, + "5963": { + "op": "-", + "defined_out": [ + "currentWindowStart#0", + "interval#0", + "start#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "currentWindowStart#0" + ] + }, + "5964": { + "op": "b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_inlined_smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.getLatestWindowStart@78" + }, + "5967": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_else_body@66", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ], + "op": "frame_dig 10", + "defined_out": [ + "type#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "type#0" + ] + }, + "5969": { + "op": "pushbytes 0x03", + "defined_out": [ + "0x03", + "type#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "type#0", + "0x03" + ] + }, + "5972": { + "op": "==", + "defined_out": [ + "tmp%11#0", + "type#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%11#0" + ] + }, + "5973": { + "op": "bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@71", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "5976": { + "op": "frame_dig 28", + "defined_out": [ + "type#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "useRounds#0" + ] + }, + "5978": { + "op": "bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_false@69", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "5981": { + "op": "global Round", + "defined_out": [ + "epochRef#0", + "type#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "epochRef#0" + ] + }, + "5983": { + "op": "frame_bury 14", + "defined_out": [ + "epochRef#0", + "type#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "5985": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_merge@70", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ], + "op": "frame_dig 14", + "defined_out": [ + "epochRef#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "epochRef#0" + ] + }, + "5987": { + "op": "frame_dig 19", + "defined_out": [ + "epochRef#0", + "last#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "epochRef#0", + "last#0" + ] + }, + "5989": { + "op": "-", + "defined_out": [ + "epochRef#0", + "last#0", + "passed#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "passed#0" + ] + }, + "5990": { + "op": "frame_dig 17", + "defined_out": [ + "epochRef#0", + "interval#0", + "last#0", + "passed#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "passed#0", + "interval#0" + ] + }, + "5992": { + "op": "/", + "defined_out": [ + "epochRef#0", + "interval#0", + "last#0", + "tmp%13#1" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%13#1" + ] + }, + "5993": { + "op": "frame_dig 11", + "defined_out": [ + "amount#0", + "epochRef#0", + "interval#0", + "last#0", + "tmp%13#1" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%13#1", + "amount#0" + ] + }, + "5995": { + "op": "*", + "defined_out": [ + "amount#0", + "epochRef#0", + "interval#0", + "last#0", + "tmp%14#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%14#0" + ] + }, + "5996": { + "op": "frame_dig 26", + "defined_out": [ + "amount#0", + "epochRef#0", + "interval#0", + "last#0", + "spent#0", + "tmp%14#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%14#0", + "spent#0" + ] + }, + "5998": { + "op": "+", + "defined_out": [ + "accrued#0", + "amount#0", + "epochRef#0", + "interval#0", + "last#0", + "spent#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "accrued#0" + ] + }, + "5999": { + "op": "dup", + "defined_out": [ + "accrued#0", + "accrued#0 (copy)", + "amount#0", + "epochRef#0", + "interval#0", + "last#0", + "spent#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "accrued#0", + "accrued#0 (copy)" + ] + }, + "6000": { + "op": "frame_dig 21", + "defined_out": [ + "accrued#0", + "accrued#0 (copy)", + "amount#0", + "epochRef#0", + "interval#0", + "last#0", + "max#0", + "spent#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "accrued#0", + "accrued#0 (copy)", + "max#0" + ] + }, + "6002": { + "op": "dup", + "defined_out": [ + "accrued#0", + "accrued#0 (copy)", + "amount#0", + "epochRef#0", + "interval#0", + "last#0", + "max#0", + "max#0 (copy)", + "spent#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "accrued#0", + "accrued#0 (copy)", + "max#0 (copy)", + "max#0 (copy)" + ] + }, + "6003": { + "op": "cover 3", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "max#0", + "accrued#0", + "accrued#0 (copy)", + "max#0 (copy)" + ] + }, + "6005": { + "op": ">", + "defined_out": [ + "accrued#0", + "amount#0", + "epochRef#0", + "interval#0", + "last#0", + "max#0", + "spent#0", + "tmp%16#1" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "max#0", + "accrued#0", + "tmp%16#1" + ] + }, + "6006": { + "op": "swap", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "max#0", + "tmp%16#1", + "accrued#0" + ] + }, + "6007": { + "op": "cover 2", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "accrued#0", + "max#0", + "tmp%16#1" + ] + }, + "6009": { + "op": "select", + "defined_out": [ + "amount#0", + "available#0", + "epochRef#0", + "interval#0", + "last#0", + "max#0", + "spent#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "available#0" + ] + }, + "6010": { + "op": "frame_dig 0", + "defined_out": [ + "aggregate%encoded_element%0#0", + "amount#0", + "available#0", + "epochRef#0", + "interval#0", + "last#0", + "max#0", + "spent#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "available#0", + "aggregate%encoded_element%0#0" + ] + }, + "6012": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "aggregate%encoded_element%0#0", + "amount#0", + "available#0", + "epochRef#0", + "interval#0", + "last#0", + "max#0", + "spent#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "available#0", + "aggregate%encoded_element%0#0", + "8" + ] + }, + "6013": { + "op": "extract_uint64", + "defined_out": [ + "aggregate%encoded_element%0#0", + "amount#0", + "available#0", + "epochRef#0", + "interval#0", + "last#0", + "max#0", + "spent#0", + "values%15#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "available#0", + "values%15#0" + ] + }, + "6014": { + "op": "dup2", + "defined_out": [ + "aggregate%encoded_element%0#0", + "amount#0", + "available#0", + "available#0 (copy)", + "epochRef#0", + "interval#0", + "last#0", + "max#0", + "spent#0", + "values%15#0", + "values%15#0 (copy)" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "available#0", + "values%15#0", + "available#0 (copy)", + "values%15#0 (copy)" + ] + }, + "6015": { + "op": ">=", + "defined_out": [ + "aggregate%encoded_element%0#0", + "amount#0", + "available#0", + "epochRef#0", + "interval#0", + "last#0", + "max#0", + "spent#0", + "tmp%17#0", + "values%15#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "available#0", + "values%15#0", + "tmp%17#0" + ] + }, + "6016": { + "error": "allowance exceeded", + "op": "assert // allowance exceeded", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "available#0", + "values%15#0" + ] + }, + "6017": { + "op": "-", + "defined_out": [ + "aggregate%encoded_element%0#0", + "amount#0", + "epochRef#0", + "interval#0", + "last#0", + "max#0", + "spent#0", + "tmp%18#1" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%18#1" + ] + }, + "6018": { + "op": "itob", + "defined_out": [ + "aggregate%encoded_element%0#0", + "aggregate%val_as_bytes%4#0", + "amount#0", + "epochRef#0", + "interval#0", + "last#0", + "max#0", + "spent#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%val_as_bytes%4#0" + ] + }, + "6019": { + "op": "frame_dig 3", + "defined_out": [ + "aggregate%encoded_element%0#0", + "aggregate%val_as_bytes%4#0", + "amount#0", + "box_prefixed_key%0#4", + "epochRef#0", + "interval#0", + "last#0", + "max#0", + "spent#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%val_as_bytes%4#0", + "box_prefixed_key%0#4" + ] + }, + "6021": { + "op": "pushint 17 // 17", + "defined_out": [ + "17", + "aggregate%encoded_element%0#0", + "aggregate%val_as_bytes%4#0", + "amount#0", + "box_prefixed_key%0#4", + "epochRef#0", + "interval#0", + "last#0", + "max#0", + "spent#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%val_as_bytes%4#0", + "box_prefixed_key%0#4", + "17" + ] + }, + "6023": { + "op": "uncover 2", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%0#4", + "17", + "aggregate%val_as_bytes%4#0" + ] + }, + "6025": { + "op": "box_replace", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6026": { + "op": "b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@71" + }, + "6029": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_false@69", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ], + "op": "global LatestTimestamp", + "defined_out": [ + "epochRef#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "epochRef#0" + ] + }, + "6031": { + "op": "frame_bury 14", + "defined_out": [ + "epochRef#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6033": { + "op": "b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_merge@70" + }, + "6036": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_false@59", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ], + "op": "global LatestTimestamp", + "defined_out": [ + "newLast#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "newLast#0" + ] + }, + "6038": { + "op": "frame_bury 24", + "defined_out": [ + "newLast#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6040": { + "op": "b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_merge@60" + }, + "6043": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@8", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ], + "op": "frame_dig 2", + "defined_out": [ + "box_prefixed_key%0#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%0#0" + ] + }, + "6045": { + "op": "pushint 27 // 27", + "defined_out": [ + "27", + "box_prefixed_key%0#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%0#0", + "27" + ] + }, + "6047": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "27", + "box_prefixed_key%0#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%0#0", + "27", + "1" + ] + }, + "6048": { + "op": "box_extract", + "defined_out": [ + "box%box_extract%0#0", + "box_prefixed_key%0#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box%box_extract%0#0" + ] + }, + "6049": { + "op": "dup", + "defined_out": [ + "box%box_extract%0#0", + "box%box_extract%0#0 (copy)", + "box_prefixed_key%0#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box%box_extract%0#0", + "box%box_extract%0#0 (copy)" + ] + }, + "6050": { + "op": "intc_1 // 1", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box%box_extract%0#0", + "box%box_extract%0#0 (copy)", + "1" + ] + }, + "6051": { + "op": "getbit", + "defined_out": [ + "box%box_extract%0#0", + "box_prefixed_key%0#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box%box_extract%0#0", + "useRounds#0" + ] + }, + "6052": { + "op": "frame_bury 28", + "defined_out": [ + "box%box_extract%0#0", + "box_prefixed_key%0#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box%box_extract%0#0" + ] + }, + "6054": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "box%box_extract%0#0", + "box_prefixed_key%0#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box%box_extract%0#0", + "2" + ] + }, + "6055": { + "op": "getbit", + "defined_out": [ + "box_prefixed_key%0#0", + "useExecutionKey#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "useExecutionKey#0" + ] + }, + "6056": { + "op": "bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@22", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6059": { + "op": "txn Sender", + "defined_out": [ + "box_prefixed_key%0#0", + "tmp%0#1", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%0#1" + ] + }, + "6061": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%0#1", + "0" + ] + }, + "6062": { + "op": "bytec_2 // \"admin\"", + "defined_out": [ + "\"admin\"", + "0", + "box_prefixed_key%0#0", + "tmp%0#1", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%0#1", + "0", + "\"admin\"" + ] + }, + "6063": { + "op": "app_global_get_ex", + "defined_out": [ + "box_prefixed_key%0#0", + "maybe_exists%0#0", + "maybe_value%0#0", + "tmp%0#1", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%0#1", + "maybe_value%0#0", + "maybe_exists%0#0" + ] + }, + "6064": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%0#1", + "maybe_value%0#0" + ] + }, + "6065": { + "op": "==", + "defined_out": [ + "box_prefixed_key%0#0", + "tmp%1#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%1#0" + ] + }, + "6066": { + "op": "bnz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@22", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6069": { + "op": "bytec 8 // \"x\"", + "defined_out": [ + "\"x\"", + "box_prefixed_key%0#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "\"x\"" + ] + }, + "6071": { + "op": "txn Lease", + "defined_out": [ + "\"x\"", + "box_prefixed_key%0#0", + "materialized_values%0#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "\"x\"", + "materialized_values%0#0" + ] + }, + "6073": { + "op": "concat", + "defined_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%1#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%1#0" + ] + }, + "6074": { + "op": "box_len", + "defined_out": [ + "_%0#0", + "box_prefixed_key%0#0", + "maybe_exists%1#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "_%0#0", + "maybe_exists%1#0" + ] + }, + "6075": { + "op": "bury 1", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "maybe_exists%1#0" + ] + }, + "6077": { + "error": "Execution key not found", + "op": "assert // Execution key not found", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6078": { + "op": "bytec 8 // \"x\"", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "\"x\"" + ] + }, + "6080": { + "op": "txn Lease", + "defined_out": [ + "\"x\"", + "box_prefixed_key%0#0", + "materialized_values%1#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "\"x\"", + "materialized_values%1#0" + ] + }, + "6082": { + "op": "concat", + "defined_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%2#1", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%2#1" + ] + }, + "6083": { + "op": "intc_2 // 2", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%2#1", + "2" + ] + }, + "6084": { + "op": "intc_3 // 8", + "defined_out": [ + "2", + "8", + "box_prefixed_key%0#0", + "box_prefixed_key%2#1", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%2#1", + "2", + "8" + ] + }, + "6085": { + "op": "box_extract", + "defined_out": [ + "box%box_extract%2#0", + "box_prefixed_key%0#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box%box_extract%2#0" + ] + }, + "6086": { + "op": "btoi", + "defined_out": [ + "box_prefixed_key%0#0", + "useRounds#0", + "values%2#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "values%2#0" + ] + }, + "6087": { + "op": "global Round", + "defined_out": [ + "box_prefixed_key%0#0", + "tmp%2#0", + "useRounds#0", + "values%2#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "values%2#0", + "tmp%2#0" + ] + }, + "6089": { + "op": "<=", + "defined_out": [ + "box_prefixed_key%0#0", + "tmp%3#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%3#0" + ] + }, + "6090": { + "error": "Execution key not ready", + "op": "assert // Execution key not ready", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6091": { + "op": "bytec 8 // \"x\"", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "\"x\"" + ] + }, + "6093": { + "op": "txn Lease", + "defined_out": [ + "\"x\"", + "box_prefixed_key%0#0", + "materialized_values%2#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "\"x\"", + "materialized_values%2#0" + ] + }, + "6095": { + "op": "concat", + "defined_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%3#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%3#0" + ] + }, + "6096": { + "op": "pushint 10 // 10", + "defined_out": [ + "10", + "box_prefixed_key%0#0", + "box_prefixed_key%3#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%3#0", + "10" + ] + }, + "6098": { + "op": "intc_3 // 8", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%3#0", + "10", + "8" + ] + }, + "6099": { + "op": "box_extract", + "defined_out": [ + "box%box_extract%3#0", + "box_prefixed_key%0#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box%box_extract%3#0" + ] + }, + "6100": { + "op": "btoi", + "defined_out": [ + "box_prefixed_key%0#0", + "useRounds#0", + "values%3#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "values%3#0" + ] + }, + "6101": { + "op": "global Round", + "defined_out": [ + "box_prefixed_key%0#0", + "tmp%4#0", + "useRounds#0", + "values%3#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "values%3#0", + "tmp%4#0" + ] + }, + "6103": { + "op": ">=", + "defined_out": [ + "box_prefixed_key%0#0", + "tmp%5#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%5#0" + ] + }, + "6104": { + "error": "Execution key expired", + "op": "assert // Execution key expired", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6105": { + "op": "bytec 8 // \"x\"", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "\"x\"" + ] + }, + "6107": { + "op": "txn Lease", + "defined_out": [ + "\"x\"", + "box_prefixed_key%0#0", + "materialized_values%3#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "\"x\"", + "materialized_values%3#0" + ] + }, + "6109": { + "op": "concat", + "defined_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%4#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%4#0" + ] + }, + "6110": { + "op": "frame_bury 4", + "defined_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%4#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6112": { + "op": "intc_0 // 0", + "defined_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%4#0", + "foundGroup#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "foundGroup#0" + ] + }, + "6113": { + "op": "frame_bury 15", + "defined_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%4#0", + "foundGroup#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6115": { + "op": "intc_0 // 0", + "defined_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%4#0", + "foundGroup#0", + "i#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "i#0" + ] + }, + "6116": { + "op": "frame_bury 16", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6118": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_while_top@17", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ], + "op": "frame_dig 4", + "defined_out": [ + "box_prefixed_key%4#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%4#0" + ] + }, + "6120": { + "op": "pushint 18 // 18", + "defined_out": [ + "18", + "box_prefixed_key%4#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%4#0", + "18" + ] + }, + "6122": { + "op": "intc_2 // 2", + "defined_out": [ + "18", + "2", + "box_prefixed_key%4#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%4#0", + "18", + "2" + ] + }, + "6123": { + "op": "box_extract", + "defined_out": [ + "box%box_extract%4#0", + "box_prefixed_key%4#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box%box_extract%4#0" + ] + }, + "6124": { + "op": "btoi", + "defined_out": [ + "box%array_length%0#0", + "box_prefixed_key%4#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box%array_length%0#0" + ] + }, + "6125": { + "op": "frame_dig 16", + "defined_out": [ + "box%array_length%0#0", + "box_prefixed_key%4#0", + "i#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box%array_length%0#0", + "i#0" + ] + }, + "6127": { + "op": ">", + "defined_out": [ + "box_prefixed_key%4#0", + "i#0", + "tmp%8#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%8#0" + ] + }, + "6128": { + "op": "bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_while@21", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6131": { + "op": "frame_dig 16", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "i#0" + ] + }, + "6133": { + "op": "pushint 32 // 32", + "defined_out": [ + "32", + "box_prefixed_key%4#0", + "i#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "i#0", + "32" + ] + }, + "6135": { + "op": "*", + "defined_out": [ + "box%element_offset%0#0", + "box_prefixed_key%4#0", + "i#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box%element_offset%0#0" + ] + }, + "6136": { + "op": "pushint 20 // 20", + "defined_out": [ + "20", + "box%element_offset%0#0", + "box_prefixed_key%4#0", + "i#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box%element_offset%0#0", + "20" + ] + }, + "6138": { + "op": "+", + "defined_out": [ + "box%offset%4#0", + "box_prefixed_key%4#0", + "i#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box%offset%4#0" + ] + }, + "6139": { + "op": "frame_dig 4", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box%offset%4#0", + "box_prefixed_key%4#0" + ] + }, + "6141": { + "op": "swap", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%4#0", + "box%offset%4#0" + ] + }, + "6142": { + "op": "pushint 32 // 32", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%4#0", + "box%offset%4#0", + "32" + ] + }, + "6144": { + "op": "box_extract", + "defined_out": [ + "box%box_extract%5#0", + "box_prefixed_key%4#0", + "i#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box%box_extract%5#0" + ] + }, + "6145": { + "op": "global GroupID", + "defined_out": [ + "box%box_extract%5#0", + "box_prefixed_key%4#0", + "i#0", + "tmp%9#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box%box_extract%5#0", + "tmp%9#0" + ] + }, + "6147": { + "op": "==", + "defined_out": [ + "box_prefixed_key%4#0", + "i#0", + "tmp%10#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%10#0" + ] + }, + "6148": { + "op": "bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@20", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6151": { + "op": "intc_1 // 1", + "defined_out": [ + "box_prefixed_key%4#0", + "foundGroup#0", + "i#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "foundGroup#0" + ] + }, + "6152": { + "op": "frame_bury 15", + "defined_out": [ + "box_prefixed_key%4#0", + "foundGroup#0", + "i#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6154": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@20", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ], + "op": "frame_dig 16", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "i#0" + ] + }, + "6156": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "i#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "i#0", + "1" + ] + }, + "6157": { + "op": "+", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "i#0" + ] + }, + "6158": { + "op": "frame_bury 16", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6160": { + "op": "b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_while_top@17" + }, + "6163": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_while@21", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ], + "op": "frame_dig 15", + "defined_out": [ + "foundGroup#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "foundGroup#0" + ] + }, + "6165": { + "error": "Group not found", + "op": "assert // Group not found", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6166": { + "op": "bytec 8 // \"x\"", + "defined_out": [ + "\"x\"", + "foundGroup#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "\"x\"" + ] + }, + "6168": { + "op": "txn Lease", + "defined_out": [ + "\"x\"", + "foundGroup#0", + "materialized_values%4#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "\"x\"", + "materialized_values%4#0" + ] + }, + "6170": { + "op": "concat", + "defined_out": [ + "box_prefixed_key%5#0", + "foundGroup#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%5#0" + ] + }, + "6171": { + "op": "box_del", + "defined_out": [ + "foundGroup#0", + "{box_del}" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "{box_del}" + ] + }, + "6172": { + "op": "pop", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6173": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@22", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ], + "op": "frame_dig 6", + "defined_out": [ + "key#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0" + ] + }, + "6175": { + "callsub": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.pluginCheck", + "op": "callsub pluginCheck", + "defined_out": [ + "initialCheck#0", + "key#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "initialCheck#0", + "key#0" + ] + }, + "6178": { + "op": "frame_bury 6", + "defined_out": [ + "initialCheck#0", + "key#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "initialCheck#0" + ] + }, + "6180": { + "op": "dup", + "defined_out": [ + "initialCheck#0", + "initialCheck#0 (copy)", + "key#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "initialCheck#0", + "initialCheck#0 (copy)" + ] + }, + "6181": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "initialCheck#0", + "initialCheck#0 (copy)", + "0" + ] + }, + "6182": { + "op": "getbit", + "defined_out": [ + "aggregate%get_bit%3#0", + "initialCheck#0", + "key#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "initialCheck#0", + "aggregate%get_bit%3#0" + ] + }, + "6183": { + "error": "plugin does not exist", + "op": "assert // plugin does not exist", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "initialCheck#0" + ] + }, + "6184": { + "op": "dup", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "initialCheck#0", + "initialCheck#0 (copy)" + ] + }, + "6185": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "initialCheck#0", + "initialCheck#0 (copy)", + "key#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "initialCheck#0", + "initialCheck#0 (copy)", + "1" + ] + }, + "6186": { + "op": "getbit", + "defined_out": [ + "aggregate%get_bit%4#0", + "initialCheck#0", + "key#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "initialCheck#0", + "aggregate%get_bit%4#0" + ] + }, + "6187": { + "op": "!", + "defined_out": [ + "initialCheck#0", + "key#0", + "tmp%12#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "initialCheck#0", + "tmp%12#0" + ] + }, + "6188": { + "error": "plugin expired", + "op": "assert // plugin expired", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "initialCheck#0" + ] + }, + "6189": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "initialCheck#0", + "key#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "initialCheck#0", + "2" + ] + }, + "6190": { + "op": "getbit", + "defined_out": [ + "aggregate%get_bit%5#0", + "key#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%get_bit%5#0" + ] + }, + "6191": { + "op": "!", + "defined_out": [ + "key#0", + "tmp%13#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%13#0" + ] + }, + "6192": { + "error": "plugin on cooldown", + "op": "assert // plugin on cooldown", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6193": { + "op": "frame_dig 28", + "defined_out": [ + "key#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "useRounds#0" + ] + }, + "6195": { + "op": "bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_false@24", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6198": { + "op": "global Round", + "defined_out": [ + "epochRef#0", + "key#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "epochRef#0" + ] + }, + "6200": { + "op": "frame_bury 14", + "defined_out": [ + "epochRef#0", + "key#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6202": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_merge@25", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ], + "op": "intc_0 // 0", + "defined_out": [ + "rekeysBack#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "rekeysBack#0" + ] + }, + "6203": { + "op": "frame_bury 25", + "defined_out": [ + "rekeysBack#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6205": { + "op": "intc_0 // 0", + "defined_out": [ + "methodIndex#0", + "rekeysBack#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "methodIndex#0" + ] + }, + "6206": { + "op": "frame_bury 22", + "defined_out": [ + "methodIndex#0", + "rekeysBack#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6208": { + "op": "txn GroupIndex", + "defined_out": [ + "methodIndex#0", + "rekeysBack#0", + "tmp%14#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%14#0" + ] + }, + "6210": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "methodIndex#0", + "rekeysBack#0", + "tmp%14#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%14#0", + "1" + ] + }, + "6211": { + "op": "+", + "defined_out": [ + "i\u2081#0", + "methodIndex#0", + "rekeysBack#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "i\u2081#0" + ] + }, + "6212": { + "op": "frame_bury 18", + "defined_out": [ + "i\u2081#0", + "methodIndex#0", + "rekeysBack#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6214": { + "op": "frame_dig 6", + "defined_out": [ + "i\u2081#0", + "key#3", + "methodIndex#0", + "rekeysBack#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#3" + ] + }, + "6216": { + "op": "frame_bury 7", + "defined_out": [ + "i\u2081#0", + "key#3", + "methodIndex#0", + "rekeysBack#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6218": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_while_top@26", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ], + "op": "frame_dig 18", + "defined_out": [ + "i\u2081#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "i\u2081#0" + ] + }, + "6220": { + "op": "global GroupSize", + "defined_out": [ + "i\u2081#0", + "tmp%16#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "i\u2081#0", + "tmp%16#0" + ] + }, + "6222": { + "op": "<", + "defined_out": [ + "i\u2081#0", + "tmp%17#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%17#0" + ] + }, + "6223": { + "op": "bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_block@53", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6226": { + "op": "frame_dig 18", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "i\u2081#0" + ] + }, + "6228": { + "callsub": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.txnRekeysBack", + "op": "callsub txnRekeysBack", + "defined_out": [ + "i\u2081#0", + "tmp%18#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%18#0" + ] + }, + "6231": { + "op": "bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@29", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6234": { + "op": "intc_1 // 1", + "defined_out": [ + "i\u2081#0", + "rekeysBack#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "rekeysBack#0" + ] + }, + "6235": { + "op": "frame_bury 25", + "defined_out": [ + "i\u2081#0", + "rekeysBack#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6237": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_block@53", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ], + "op": "frame_dig 25", + "defined_out": [ + "rekeysBack#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "rekeysBack#0" + ] + }, + "6239": { + "error": "missing rekey back", + "op": "assert // missing rekey back", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6240": { + "op": "itxn_begin" + }, + "6241": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "rekeysBack#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "0" + ] + }, + "6242": { + "op": "bytec 11 // \"spending_address\"", + "defined_out": [ + "\"spending_address\"", + "0", + "rekeysBack#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "0", + "\"spending_address\"" + ] + }, + "6244": { + "op": "app_global_get_ex", + "defined_out": [ + "maybe_exists%3#0", + "maybe_value%1#0", + "rekeysBack#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "maybe_value%1#0", + "maybe_exists%3#0" + ] + }, + "6245": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "maybe_value%1#0" + ] + }, + "6246": { + "op": "frame_dig -5", + "defined_out": [ + "maybe_value%1#0", + "plugin#0 (copy)", + "rekeysBack#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "maybe_value%1#0", + "plugin#0 (copy)" + ] + }, + "6248": { + "op": "app_params_get AppAddress", + "defined_out": [ + "check%1#0", + "maybe_value%1#0", + "rekeysBack#0", + "value%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "maybe_value%1#0", + "value%1#0", + "check%1#0" + ] + }, + "6250": { + "error": "application exists", + "op": "assert // application exists", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "maybe_value%1#0", + "value%1#0" + ] + }, + "6251": { + "op": "pushbytes \"rekeying to plugin app\"", + "defined_out": [ + "\"rekeying to plugin app\"", + "maybe_value%1#0", + "rekeysBack#0", + "value%1#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "maybe_value%1#0", + "value%1#0", + "\"rekeying to plugin app\"" + ] + }, + "6275": { + "op": "itxn_field Note", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "maybe_value%1#0", + "value%1#0" + ] + }, + "6277": { + "op": "itxn_field RekeyTo", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "maybe_value%1#0" + ] + }, + "6279": { + "op": "dup", + "defined_out": [ + "maybe_value%1#0", + "maybe_value%1#0 (copy)", + "rekeysBack#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "maybe_value%1#0", + "maybe_value%1#0 (copy)" + ] + }, + "6280": { + "op": "itxn_field Receiver", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "maybe_value%1#0" + ] + }, + "6282": { + "op": "itxn_field Sender", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6284": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "rekeysBack#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "1" + ] + }, + "6285": { + "op": "itxn_field TypeEnum", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6287": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "0" + ] + }, + "6288": { + "op": "itxn_field Fee", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6290": { + "op": "itxn_submit" + }, + "6291": { + "op": "bytec 17 // \"rekey_index\"", + "defined_out": [ + "\"rekey_index\"", + "rekeysBack#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "\"rekey_index\"" + ] + }, + "6293": { + "op": "txn GroupIndex", + "defined_out": [ + "\"rekey_index\"", + "rekeysBack#0", + "tmp%2#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "\"rekey_index\"", + "tmp%2#0" + ] + }, + "6295": { + "op": "app_global_put", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6296": { + "op": "bytec 4 // \"p\"", + "defined_out": [ + "\"p\"", + "rekeysBack#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "\"p\"" + ] + }, + "6298": { + "op": "frame_dig 7", + "defined_out": [ + "\"p\"", + "key#3", + "rekeysBack#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "\"p\"", + "key#3" + ] + }, + "6300": { + "op": "concat", + "defined_out": [ + "box_prefixed_key%3#0", + "key#3", + "rekeysBack#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%3#0" + ] + }, + "6301": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "box_prefixed_key%3#0", + "key#3", + "rekeysBack#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%3#0", + "8" + ] + }, + "6302": { + "op": "intc_1 // 1", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%3#0", + "8", + "1" + ] + }, + "6303": { + "op": "box_extract", + "defined_out": [ + "box%box_extract%0#0", + "key#3", + "rekeysBack#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box%box_extract%0#0" + ] + }, + "6304": { + "op": "bytec 15 // 0x01", + "defined_out": [ + "0x01", + "box%box_extract%0#0", + "key#3", + "rekeysBack#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box%box_extract%0#0", + "0x01" + ] + }, + "6306": { + "op": "==", + "defined_out": [ + "key#3", + "rekeysBack#0", + "tmp%3#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%3#0" + ] + }, + "6307": { + "op": "bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@13", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6310": { + "op": "bytec_3 // \"last_user_interaction\"", + "defined_out": [ + "\"last_user_interaction\"", + "key#3", + "rekeysBack#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "\"last_user_interaction\"" + ] + }, + "6311": { + "op": "global LatestTimestamp", + "defined_out": [ + "\"last_user_interaction\"", + "key#3", + "rekeysBack#0", + "tmp%0#4" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "\"last_user_interaction\"", + "tmp%0#4" + ] + }, + "6313": { + "op": "app_global_put", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6314": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@13", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ], + "op": "frame_dig -2", + "defined_out": [ + "methodOffsets#0 (copy)" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "methodOffsets#0 (copy)" + ] + }, + "6316": { + "op": "frame_dig -1", + "defined_out": [ + "fundsRequest#0 (copy)", + "methodOffsets#0 (copy)" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "methodOffsets#0 (copy)", + "fundsRequest#0 (copy)" + ] + }, + "6318": { + "op": "frame_bury 1" + }, + "6320": { + "op": "frame_bury 0" + }, + "6322": { + "retsub": true, + "op": "retsub" + }, + "6323": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@29", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ], + "op": "frame_dig 18", + "defined_out": [ + "i\u2081#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "i\u2081#0" + ] + }, + "6325": { + "op": "gtxns TypeEnum", + "defined_out": [ + "i\u2081#0", + "tmp%19#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%19#0" + ] + }, + "6327": { + "op": "pushint 6 // 6", + "defined_out": [ + "6", + "i\u2081#0", + "tmp%19#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%19#0", + "6" + ] + }, + "6329": { + "op": "!=", + "defined_out": [ + "i\u2081#0", + "tmp%20#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%20#0" + ] + }, + "6330": { + "op": "bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@31", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6333": { + "op": "frame_dig 7", + "defined_out": [ + "i\u2081#0", + "key%out#11" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key%out#11" + ] + }, + "6335": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_block@51", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key%out#11" + ], + "op": "frame_dig 18", + "defined_out": [ + "i\u2081#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key%out#11", + "i\u2081#0" + ] + }, + "6337": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "i\u2081#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key%out#11", + "i\u2081#0", + "1" + ] + }, + "6338": { + "op": "+", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key%out#11", + "i\u2081#0" + ] + }, + "6339": { + "op": "frame_bury 18", + "defined_out": [ + "i\u2081#0", + "key#3" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#3" + ] + }, + "6341": { + "op": "frame_bury 7", + "defined_out": [ + "i\u2081#0", + "key#3" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6343": { + "op": "b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_while_top@26" + }, + "6346": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@31", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ], + "op": "frame_dig 18", + "defined_out": [ + "i\u2081#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "i\u2081#0" + ] + }, + "6348": { + "op": "dup", + "defined_out": [ + "i\u2081#0", + "i\u2081#0 (copy)" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "i\u2081#0", + "i\u2081#0 (copy)" + ] + }, + "6349": { + "op": "gtxns ApplicationID", + "defined_out": [ + "i\u2081#0", + "tmp%21#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "i\u2081#0", + "tmp%21#0" + ] + }, + "6351": { + "op": "frame_dig 6", + "defined_out": [ + "i\u2081#0", + "key#0", + "tmp%21#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "i\u2081#0", + "tmp%21#0", + "key#0" + ] + }, + "6353": { + "op": "dup", + "defined_out": [ + "i\u2081#0", + "key#0", + "key#0 (copy)", + "tmp%21#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "i\u2081#0", + "tmp%21#0", + "key#0 (copy)", + "key#0 (copy)" + ] + }, + "6354": { + "op": "cover 3", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "i\u2081#0", + "tmp%21#0", + "key#0 (copy)" + ] + }, + "6356": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "i\u2081#0", + "key#0", + "key#0 (copy)", + "tmp%21#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "i\u2081#0", + "tmp%21#0", + "key#0 (copy)", + "0" + ] + }, + "6357": { + "op": "extract_uint64", + "defined_out": [ + "i\u2081#0", + "key#0", + "tmp%21#0", + "values%8#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "i\u2081#0", + "tmp%21#0", + "values%8#0" + ] + }, + "6358": { + "op": "==", + "defined_out": [ + "i\u2081#0", + "key#0", + "tmp%22#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "i\u2081#0", + "tmp%22#0" + ] + }, + "6359": { + "error": "cannot call other apps during rekey", + "op": "assert // cannot call other apps during rekey", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "i\u2081#0" + ] + }, + "6360": { + "op": "dup", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "i\u2081#0", + "i\u2081#0 (copy)" + ] + }, + "6361": { + "op": "gtxns OnCompletion", + "defined_out": [ + "i\u2081#0", + "key#0", + "tmp%23#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "i\u2081#0", + "tmp%23#0" + ] + }, + "6363": { + "op": "!", + "defined_out": [ + "i\u2081#0", + "key#0", + "tmp%24#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "i\u2081#0", + "tmp%24#0" + ] + }, + "6364": { + "error": "invalid oncomplete must be no op", + "op": "assert // invalid oncomplete must be no op", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "i\u2081#0" + ] + }, + "6365": { + "op": "dup", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "i\u2081#0", + "i\u2081#0 (copy)" + ] + }, + "6366": { + "op": "gtxns NumAppArgs", + "defined_out": [ + "i\u2081#0", + "key#0", + "tmp%25#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "i\u2081#0", + "tmp%25#0" + ] + }, + "6368": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "i\u2081#0", + "key#0", + "tmp%25#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "i\u2081#0", + "tmp%25#0", + "1" + ] + }, + "6369": { + "op": ">", + "defined_out": [ + "i\u2081#0", + "key#0", + "tmp%26#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "i\u2081#0", + "tmp%26#0" + ] + }, + "6370": { + "error": "invalid sender must be this app id", + "op": "assert // invalid sender must be this app id", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "i\u2081#0" + ] + }, + "6371": { + "op": "intc_1 // 1", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "i\u2081#0", + "1" + ] + }, + "6372": { + "op": "gtxnsas ApplicationArgs", + "defined_out": [ + "i\u2081#0", + "key#0", + "tmp%27#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "tmp%27#0" + ] + }, + "6374": { + "op": "btoi", + "defined_out": [ + "i\u2081#0", + "key#0", + "tmp%28#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "tmp%28#0" + ] + }, + "6375": { + "op": "global CurrentApplicationID", + "defined_out": [ + "i\u2081#0", + "key#0", + "tmp%28#0", + "tmp%29#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "tmp%28#0", + "tmp%29#0" + ] + }, + "6377": { + "op": "==", + "defined_out": [ + "i\u2081#0", + "key#0", + "tmp%30#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "tmp%30#0" + ] + }, + "6378": { + "error": "invalid sender app id", + "op": "assert // invalid sender app id", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0" + ] + }, + "6379": { + "callsub": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.pluginCheck", + "op": "callsub pluginCheck", + "defined_out": [ + "i\u2081#0", + "key#0", + "pluginCheck%2#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "pluginCheck%2#0", + "key#0" + ] + }, + "6382": { + "op": "frame_bury 6", + "defined_out": [ + "i\u2081#0", + "key#0", + "pluginCheck%2#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "pluginCheck%2#0" + ] + }, + "6384": { + "op": "dup", + "defined_out": [ + "i\u2081#0", + "key#0", + "pluginCheck%2#0", + "pluginCheck%2#0 (copy)" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "pluginCheck%2#0", + "pluginCheck%2#0 (copy)" + ] + }, + "6385": { + "op": "intc_1 // 1", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "pluginCheck%2#0", + "pluginCheck%2#0 (copy)", + "1" + ] + }, + "6386": { + "op": "getbit", + "defined_out": [ + "expired#0", + "i\u2081#0", + "key#0", + "pluginCheck%2#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "pluginCheck%2#0", + "expired#0" + ] + }, + "6387": { + "op": "dig 1", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "pluginCheck%2#0", + "expired#0", + "pluginCheck%2#0 (copy)" + ] + }, + "6389": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "expired#0", + "i\u2081#0", + "key#0", + "pluginCheck%2#0", + "pluginCheck%2#0 (copy)" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "pluginCheck%2#0", + "expired#0", + "pluginCheck%2#0 (copy)", + "2" + ] + }, + "6390": { + "op": "getbit", + "defined_out": [ + "expired#0", + "i\u2081#0", + "key#0", + "onCooldown#0", + "pluginCheck%2#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "pluginCheck%2#0", + "expired#0", + "onCooldown#0" + ] + }, + "6391": { + "op": "uncover 2", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "expired#0", + "onCooldown#0", + "pluginCheck%2#0" + ] + }, + "6393": { + "op": "pushint 3 // 3", + "defined_out": [ + "3", + "expired#0", + "i\u2081#0", + "key#0", + "onCooldown#0", + "pluginCheck%2#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "expired#0", + "onCooldown#0", + "pluginCheck%2#0", + "3" + ] + }, + "6395": { + "op": "getbit", + "defined_out": [ + "expired#0", + "hasMethodRestrictions#0", + "i\u2081#0", + "key#0", + "onCooldown#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "expired#0", + "onCooldown#0", + "hasMethodRestrictions#0" + ] + }, + "6396": { + "op": "uncover 2", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "onCooldown#0", + "hasMethodRestrictions#0", + "expired#0" + ] + }, + "6398": { + "op": "!", + "defined_out": [ + "hasMethodRestrictions#0", + "i\u2081#0", + "key#0", + "onCooldown#0", + "tmp%31#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "onCooldown#0", + "hasMethodRestrictions#0", + "tmp%31#0" + ] + }, + "6399": { + "error": "plugin expired", + "op": "assert // plugin expired", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "onCooldown#0", + "hasMethodRestrictions#0" + ] + }, + "6400": { + "op": "swap", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "hasMethodRestrictions#0", + "onCooldown#0" + ] + }, + "6401": { + "op": "!", + "defined_out": [ + "hasMethodRestrictions#0", + "i\u2081#0", + "key#0", + "tmp%32#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "hasMethodRestrictions#0", + "tmp%32#0" + ] + }, + "6402": { + "error": "plugin on cooldown", + "op": "assert // plugin on cooldown", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "hasMethodRestrictions#0" + ] + }, + "6403": { + "op": "bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@50", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6406": { + "op": "frame_dig -2", + "defined_out": [ + "i\u2081#0", + "key#0", + "methodOffsets#0 (copy)" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "methodOffsets#0 (copy)" + ] + }, + "6408": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "methodOffsets#0 (copy)", + "0" + ] + }, + "6409": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%1#0", + "i\u2081#0", + "key#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%array_length%1#0" + ] + }, + "6410": { + "op": "frame_dig 22", + "defined_out": [ + "aggregate%array_length%1#0", + "i\u2081#0", + "key#0", + "methodIndex#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%array_length%1#0", + "methodIndex#0" + ] + }, + "6412": { + "op": "dup" + }, + "6413": { + "op": "uncover 2", + "defined_out": [ + "aggregate%array_length%1#0", + "i\u2081#0", + "key#0", + "methodIndex#0", + "methodIndex#0 (copy)" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "methodIndex#0", + "methodIndex#0 (copy)", + "aggregate%array_length%1#0" + ] + }, + "6415": { + "op": "<", + "defined_out": [ + "i\u2081#0", + "key#0", + "methodIndex#0", + "tmp%34#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "methodIndex#0", + "tmp%34#0" + ] + }, + "6416": { + "error": "malformed method offsets", + "op": "assert // malformed method offsets", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "methodIndex#0" + ] + }, + "6417": { + "op": "frame_dig -2", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "methodIndex#0", + "methodOffsets#0 (copy)" + ] + }, + "6419": { + "op": "extract 2 0", + "defined_out": [ + "aggregate%array_trimmed%7#0", + "i\u2081#0", + "key#0", + "methodIndex#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "methodIndex#0", + "aggregate%array_trimmed%7#0" + ] + }, + "6422": { + "op": "swap", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%array_trimmed%7#0", + "methodIndex#0" + ] + }, + "6423": { + "op": "intc_3 // 8", + "defined_out": [ + "8", + "aggregate%array_trimmed%7#0", + "i\u2081#0", + "key#0", + "methodIndex#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%array_trimmed%7#0", + "methodIndex#0", + "8" + ] + }, + "6424": { + "op": "*", + "defined_out": [ + "aggregate%array_trimmed%7#0", + "aggregate%bytes_offset%7#0", + "i\u2081#0", + "key#0", + "methodIndex#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%array_trimmed%7#0", + "aggregate%bytes_offset%7#0" + ] + }, + "6425": { + "op": "extract_uint64", + "defined_out": [ + "i\u2081#0", + "key#0", + "methodIndex#0", + "offset#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "offset#0" + ] + }, + "6426": { + "op": "frame_dig 18", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "offset#0", + "i\u2081#0" + ] + }, + "6428": { + "op": "intc_0 // 0", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "offset#0", + "i\u2081#0", + "0" + ] + }, + "6429": { + "op": "gtxnsas ApplicationArgs", + "defined_out": [ + "i\u2081#0", + "key#0", + "methodIndex#0", + "offset#0", + "selectorArg#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "offset#0", + "selectorArg#0" + ] + }, + "6431": { + "op": "dup", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "offset#0", + "selectorArg#0", + "selectorArg#0" + ] + }, + "6432": { + "op": "frame_bury 9", + "defined_out": [ + "i\u2081#0", + "key#0", + "methodIndex#0", + "offset#0", + "selectorArg#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "offset#0", + "selectorArg#0" + ] + }, + "6434": { + "op": "len", + "defined_out": [ + "i\u2081#0", + "key#0", + "methodIndex#0", + "offset#0", + "selectorArg#0", + "tmp%1#2" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "offset#0", + "tmp%1#2" + ] + }, + "6435": { + "op": "pushint 4 // 4", + "defined_out": [ + "4", + "i\u2081#0", + "key#0", + "methodIndex#0", + "offset#0", + "selectorArg#0", + "tmp%1#2" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "offset#0", + "tmp%1#2", + "4" + ] + }, + "6437": { + "op": "==", + "defined_out": [ + "i\u2081#0", + "key#0", + "methodIndex#0", + "offset#0", + "selectorArg#0", + "tmp%2#2" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "offset#0", + "tmp%2#2" + ] + }, + "6438": { + "error": "invalid method signature length", + "op": "assert // invalid method signature length", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "offset#0" + ] + }, + "6439": { + "op": "bytec 4 // \"p\"", + "defined_out": [ + "\"p\"", + "i\u2081#0", + "key#0", + "methodIndex#0", + "offset#0", + "selectorArg#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "offset#0", + "\"p\"" + ] + }, + "6441": { + "op": "frame_dig 6", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "offset#0", + "\"p\"", + "key#0" + ] + }, + "6443": { + "op": "concat", + "defined_out": [ + "box_prefixed_key%0#0", + "i\u2081#0", + "key#0", + "methodIndex#0", + "offset#0", + "selectorArg#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "offset#0", + "box_prefixed_key%0#0" + ] + }, + "6444": { + "op": "dup", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "offset#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0" + ] + }, + "6445": { + "op": "frame_bury 2", + "defined_out": [ + "box_prefixed_key%0#0", + "i\u2081#0", + "key#0", + "methodIndex#0", + "offset#0", + "selectorArg#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "offset#0", + "box_prefixed_key%0#0" + ] + }, + "6447": { + "op": "dup", + "defined_out": [ + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "i\u2081#0", + "key#0", + "methodIndex#0", + "offset#0", + "selectorArg#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "offset#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)" + ] + }, + "6448": { + "op": "pushint 27 // 27", + "defined_out": [ + "27", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "i\u2081#0", + "key#0", + "methodIndex#0", + "offset#0", + "selectorArg#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "offset#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "27" + ] + }, + "6450": { + "op": "intc_1 // 1", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "offset#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#0 (copy)", + "27", + "1" + ] + }, + "6451": { + "op": "box_extract", + "defined_out": [ + "box%box_extract%6#0", + "box_prefixed_key%0#0", + "i\u2081#0", + "key#0", + "methodIndex#0", + "offset#0", + "selectorArg#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "offset#0", + "box_prefixed_key%0#0", + "box%box_extract%6#0" + ] + }, + "6452": { + "op": "intc_1 // 1", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "offset#0", + "box_prefixed_key%0#0", + "box%box_extract%6#0", + "1" + ] + }, + "6453": { + "op": "getbit", + "defined_out": [ + "box_prefixed_key%0#0", + "i\u2081#0", + "key#0", + "methodIndex#0", + "offset#0", + "selectorArg#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "offset#0", + "box_prefixed_key%0#0", + "useRounds#0" + ] + }, + "6454": { + "op": "dup", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "offset#0", + "box_prefixed_key%0#0", + "useRounds#0", + "useRounds#0 (copy)" + ] + }, + "6455": { + "op": "cover 2", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "offset#0", + "useRounds#0", + "box_prefixed_key%0#0", + "useRounds#0" + ] + }, + "6457": { + "op": "frame_bury 28", + "defined_out": [ + "box_prefixed_key%0#0", + "i\u2081#0", + "key#0", + "methodIndex#0", + "offset#0", + "selectorArg#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "offset#0", + "useRounds#0", + "box_prefixed_key%0#0" + ] + }, + "6459": { + "op": "uncover 2", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "useRounds#0", + "box_prefixed_key%0#0", + "offset#0" + ] + }, + "6461": { + "op": "pushint 20 // 20", + "defined_out": [ + "20", + "box_prefixed_key%0#0", + "i\u2081#0", + "key#0", + "methodIndex#0", + "offset#0", + "selectorArg#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "useRounds#0", + "box_prefixed_key%0#0", + "offset#0", + "20" + ] + }, + "6463": { + "op": "*", + "defined_out": [ + "box%element_offset%2#0", + "box_prefixed_key%0#0", + "i\u2081#0", + "key#0", + "methodIndex#0", + "selectorArg#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box%element_offset%2#0" + ] + }, + "6464": { + "op": "dup", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box%element_offset%2#0", + "box%element_offset%2#0" + ] + }, + "6465": { + "op": "frame_bury 12", + "defined_out": [ + "box%element_offset%2#0", + "box_prefixed_key%0#0", + "i\u2081#0", + "key#0", + "methodIndex#0", + "selectorArg#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box%element_offset%2#0" + ] + }, + "6467": { + "op": "pushint 46 // 46", + "defined_out": [ + "46", + "box%element_offset%2#0", + "box_prefixed_key%0#0", + "i\u2081#0", + "key#0", + "methodIndex#0", + "selectorArg#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box%element_offset%2#0", + "46" + ] + }, + "6469": { + "op": "+", + "defined_out": [ + "box%element_offset%2#0", + "box%offset%8#0", + "box_prefixed_key%0#0", + "i\u2081#0", + "key#0", + "methodIndex#0", + "selectorArg#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box%offset%8#0" + ] + }, + "6470": { + "op": "pushint 20 // 20", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "useRounds#0", + "box_prefixed_key%0#0", + "box%offset%8#0", + "20" + ] + }, + "6472": { + "op": "box_extract", + "defined_out": [ + "box%box_extract%8#0", + "box%element_offset%2#0", + "box_prefixed_key%0#0", + "i\u2081#0", + "key#0", + "methodIndex#0", + "selectorArg#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "useRounds#0", + "box%box_extract%8#0" + ] + }, + "6473": { + "op": "dup", + "defined_out": [ + "box%box_extract%8#0", + "box%box_extract%8#0 (copy)", + "box%element_offset%2#0", + "box_prefixed_key%0#0", + "i\u2081#0", + "key#0", + "methodIndex#0", + "selectorArg#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "useRounds#0", + "box%box_extract%8#0", + "box%box_extract%8#0 (copy)" + ] + }, + "6474": { + "op": "extract 0 4", + "defined_out": [ + "box%box_extract%8#0", + "box%element_offset%2#0", + "box_prefixed_key%0#0", + "i\u2081#0", + "key#0", + "methodIndex#0", + "selector#0", + "selectorArg#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "useRounds#0", + "box%box_extract%8#0", + "selector#0" + ] + }, + "6477": { + "op": "frame_bury 8", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "useRounds#0", + "box%box_extract%8#0" + ] + }, + "6479": { + "op": "dup", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "useRounds#0", + "box%box_extract%8#0", + "box%box_extract%8#0 (copy)" + ] + }, + "6480": { + "op": "pushint 4 // 4", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "useRounds#0", + "box%box_extract%8#0", + "box%box_extract%8#0 (copy)", + "4" + ] + }, + "6482": { + "op": "extract_uint64", + "defined_out": [ + "box%box_extract%8#0", + "box%element_offset%2#0", + "box_prefixed_key%0#0", + "cooldown#0", + "i\u2081#0", + "key#0", + "methodIndex#0", + "selector#0", + "selectorArg#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "useRounds#0", + "box%box_extract%8#0", + "cooldown#0" + ] + }, + "6483": { + "op": "frame_bury 13", + "defined_out": [ + "box%box_extract%8#0", + "box%element_offset%2#0", + "box_prefixed_key%0#0", + "cooldown#0", + "i\u2081#0", + "key#0", + "methodIndex#0", + "selector#0", + "selectorArg#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "useRounds#0", + "box%box_extract%8#0" + ] + }, + "6485": { + "op": "pushint 12 // 12", + "defined_out": [ + "12", + "box%box_extract%8#0", + "box%element_offset%2#0", + "box_prefixed_key%0#0", + "cooldown#0", + "i\u2081#0", + "key#0", + "methodIndex#0", + "selector#0", + "selectorArg#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "useRounds#0", + "box%box_extract%8#0", + "12" + ] + }, + "6487": { + "op": "extract_uint64", + "defined_out": [ + "box%element_offset%2#0", + "box_prefixed_key%0#0", + "cooldown#0", + "i\u2081#0", + "key#0", + "lastCalled#0", + "methodIndex#0", + "selector#0", + "selectorArg#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "useRounds#0", + "lastCalled#0" + ] + }, + "6488": { + "op": "frame_bury 20", + "defined_out": [ + "box%element_offset%2#0", + "box_prefixed_key%0#0", + "cooldown#0", + "i\u2081#0", + "key#0", + "lastCalled#0", + "methodIndex#0", + "selector#0", + "selectorArg#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "useRounds#0" + ] + }, + "6490": { + "op": "bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_false@34", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6493": { + "op": "global Round", + "defined_out": [ + "box%element_offset%2#0", + "box_prefixed_key%0#0", + "cooldown#0", + "epochRef#1", + "i\u2081#0", + "key#0", + "lastCalled#0", + "methodIndex#0", + "selector#0", + "selectorArg#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "epochRef#1" + ] + }, + "6495": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_merge@35", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "epochRef#1" + ], + "op": "frame_dig 20", + "defined_out": [ + "epochRef#1", + "lastCalled#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "epochRef#1", + "lastCalled#0" + ] + }, + "6497": { + "op": "-", + "defined_out": [ + "lastCalled#0", + "tmp%6#1" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%6#1" + ] + }, + "6498": { + "op": "frame_dig 13", + "defined_out": [ + "cooldown#0", + "lastCalled#0", + "tmp%6#1" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%6#1", + "cooldown#0" + ] + }, + "6500": { + "op": "<", + "defined_out": [ + "cooldown#0", + "lastCalled#0", + "methodOnCooldown#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "methodOnCooldown#0" + ] + }, + "6501": { + "op": "frame_bury 23", + "defined_out": [ + "cooldown#0", + "lastCalled#0", + "methodOnCooldown#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6503": { + "op": "frame_dig 8", + "defined_out": [ + "cooldown#0", + "lastCalled#0", + "methodOnCooldown#0", + "selector#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "selector#0" + ] + }, + "6505": { + "op": "frame_dig 9", + "defined_out": [ + "cooldown#0", + "lastCalled#0", + "methodOnCooldown#0", + "selector#0", + "selectorArg#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "selector#0", + "selectorArg#0" + ] + }, + "6507": { + "op": "==", + "defined_out": [ + "cooldown#0", + "lastCalled#0", + "methodOnCooldown#0", + "selector#0", + "selectorArg#0", + "tmp%8#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "tmp%8#0" + ] + }, + "6508": { + "op": "bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@44", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6511": { + "op": "frame_dig 13", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "cooldown#0" + ] + }, + "6513": { + "op": "bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_if_body@38", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6516": { + "op": "frame_dig 23", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "methodOnCooldown#0" + ] + }, + "6518": { + "op": "bnz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@44", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6521": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_if_body@38", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ], + "op": "frame_dig 13", + "defined_out": [ + "cooldown#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "cooldown#0" + ] + }, + "6523": { + "op": "bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@43", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6526": { + "op": "frame_dig 28", + "defined_out": [ + "cooldown#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "useRounds#0" + ] + }, + "6528": { + "op": "bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_false@41", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6531": { + "op": "global Round", + "defined_out": [ + "cooldown#0", + "lastCalled\u2081#0", + "useRounds#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "lastCalled\u2081#0" + ] + }, + "6533": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_merge@42", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "lastCalled\u2081#0" + ], + "op": "itob", + "defined_out": [ + "aggregate%val_as_bytes%6#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%val_as_bytes%6#0" + ] + }, + "6534": { + "op": "frame_dig 12", + "defined_out": [ + "aggregate%val_as_bytes%6#0", + "box%element_offset%2#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%val_as_bytes%6#0", + "box%element_offset%2#0" + ] + }, + "6536": { + "op": "pushint 58 // 58", + "defined_out": [ + "58", + "aggregate%val_as_bytes%6#0", + "box%element_offset%2#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%val_as_bytes%6#0", + "box%element_offset%2#0", + "58" + ] + }, + "6538": { + "op": "+", + "defined_out": [ + "aggregate%val_as_bytes%6#0", + "box%element_offset%2#0", + "box%offset%15#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%val_as_bytes%6#0", + "box%offset%15#0" + ] + }, + "6539": { + "op": "frame_dig 2", + "defined_out": [ + "aggregate%val_as_bytes%6#0", + "box%element_offset%2#0", + "box%offset%15#0", + "box_prefixed_key%0#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%val_as_bytes%6#0", + "box%offset%15#0", + "box_prefixed_key%0#0" + ] + }, + "6541": { + "op": "swap", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "aggregate%val_as_bytes%6#0", + "box_prefixed_key%0#0", + "box%offset%15#0" + ] + }, + "6542": { + "op": "uncover 2", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "box_prefixed_key%0#0", + "box%offset%15#0", + "aggregate%val_as_bytes%6#0" + ] + }, + "6544": { + "op": "box_replace", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6545": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@43", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ], + "op": "pushbytes 0x80", + "defined_out": [ + "0x80" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "0x80" + ] + }, + "6548": { + "op": "intc_1 // 1", + "defined_out": [ + "0x80", + "1" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "0x80", + "1" + ] + }, + "6549": { + "op": "frame_dig 23", + "defined_out": [ + "0x80", + "1", + "methodOnCooldown#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "0x80", + "1", + "methodOnCooldown#0" + ] + }, + "6551": { + "op": "setbit", + "defined_out": [ + "methodCheck%0#0", + "methodOnCooldown#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "methodCheck%0#0" + ] + }, + "6552": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_inlined_smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.methodCheck@45", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "methodCheck%0#0" + ], + "op": "dup", + "defined_out": [ + "methodCheck%0#0", + "methodCheck%0#0 (copy)" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "methodCheck%0#0", + "methodCheck%0#0 (copy)" + ] + }, + "6553": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "methodCheck%0#0", + "methodCheck%0#0 (copy)" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "methodCheck%0#0", + "methodCheck%0#0 (copy)", + "0" + ] + }, + "6554": { + "op": "getbit", + "defined_out": [ + "methodAllowed#0", + "methodCheck%0#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "methodCheck%0#0", + "methodAllowed#0" + ] + }, + "6555": { + "op": "swap", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "methodAllowed#0", + "methodCheck%0#0" + ] + }, + "6556": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "methodAllowed#0", + "methodCheck%0#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "methodAllowed#0", + "methodCheck%0#0", + "1" + ] + }, + "6557": { + "op": "getbit", + "defined_out": [ + "methodAllowed#0", + "methodOnCooldown#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "methodAllowed#0", + "methodOnCooldown#0" + ] + }, + "6558": { + "op": "frame_bury 23", + "defined_out": [ + "methodAllowed#0", + "methodOnCooldown#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "methodAllowed#0" + ] + }, + "6560": { + "op": "bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_bool_false@48", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6563": { + "op": "frame_dig 23", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "methodOnCooldown#0" + ] + }, + "6565": { + "op": "bnz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_bool_false@48", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6568": { + "op": "intc_1 // 1", + "defined_out": [ + "and_result%0#0", + "methodOnCooldown#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "and_result%0#0" + ] + }, + "6569": { + "error": "method on cooldown", + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_bool_merge@49", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "and_result%0#0" + ], + "op": "assert // method on cooldown", + "defined_out": [], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6570": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@50", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ], + "op": "bytec 4 // \"p\"", + "defined_out": [ + "\"p\"" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "\"p\"" + ] + }, + "6572": { + "op": "frame_dig 6", + "defined_out": [ + "\"p\"", + "key#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "\"p\"", + "key#0" + ] + }, + "6574": { + "op": "dup", + "defined_out": [ + "\"p\"", + "key#0", + "key#0 (copy)" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "\"p\"", + "key#0 (copy)", + "key#0 (copy)" + ] + }, + "6575": { + "op": "cover 2", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "\"p\"", + "key#0 (copy)" + ] + }, + "6577": { + "op": "concat", + "defined_out": [ + "box_prefixed_key%6#0", + "key#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "box_prefixed_key%6#0" + ] + }, + "6578": { + "op": "frame_dig 14", + "defined_out": [ + "box_prefixed_key%6#0", + "epochRef#0", + "key#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "box_prefixed_key%6#0", + "epochRef#0" + ] + }, + "6580": { + "op": "itob", + "defined_out": [ + "aggregate%val_as_bytes%7#0", + "box_prefixed_key%6#0", + "epochRef#0", + "key#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "box_prefixed_key%6#0", + "aggregate%val_as_bytes%7#0" + ] + }, + "6581": { + "op": "pushint 28 // 28" + }, + "6583": { + "op": "swap", + "defined_out": [ + "28", + "aggregate%val_as_bytes%7#0", + "box_prefixed_key%6#0", + "epochRef#0", + "key#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "box_prefixed_key%6#0", + "28", + "aggregate%val_as_bytes%7#0" + ] + }, + "6584": { + "op": "box_replace", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0" + ] + }, + "6585": { + "op": "frame_dig 22", + "defined_out": [ + "epochRef#0", + "key#0", + "methodIndex#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "methodIndex#0" + ] + }, + "6587": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "epochRef#0", + "key#0", + "methodIndex#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "methodIndex#0", + "1" + ] + }, + "6588": { + "op": "+", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key#0", + "methodIndex#0" + ] + }, + "6589": { + "op": "frame_bury 22", + "defined_out": [ + "epochRef#0", + "key#0", + "key%out#11", + "methodIndex#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "key%out#11" + ] + }, + "6591": { + "op": "b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_block@51" + }, + "6594": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_bool_false@48", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ], + "op": "intc_0 // 0", + "defined_out": [ + "and_result%0#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "and_result%0#0" + ] + }, + "6595": { + "op": "b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_bool_merge@49" + }, + "6598": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_false@41", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ], + "op": "global LatestTimestamp", + "defined_out": [ + "lastCalled\u2081#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "lastCalled\u2081#0" + ] + }, + "6600": { + "op": "b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_merge@42" + }, + "6603": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@44", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ], + "op": "pushbytes 0x40", + "defined_out": [ + "methodCheck%0#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "methodCheck%0#0" + ] + }, + "6606": { + "op": "b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_inlined_smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.methodCheck@45" + }, + "6609": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_false@34", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ], + "op": "global LatestTimestamp", + "defined_out": [ + "epochRef#1" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "epochRef#1" + ] + }, + "6611": { + "op": "b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_merge@35" + }, + "6614": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_false@24", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ], + "op": "global LatestTimestamp", + "defined_out": [ + "epochRef#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "epochRef#0" + ] + }, + "6616": { + "op": "frame_bury 14", + "defined_out": [ + "epochRef#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6618": { + "op": "b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_merge@25" + }, + "6621": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_else_body@7", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ], + "op": "intc_0 // 0", + "defined_out": [ + "0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "0" + ] + }, + "6622": { + "op": "bytec_0 // \"controlled_address\"", + "defined_out": [ + "\"controlled_address\"", + "0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "0", + "\"controlled_address\"" + ] + }, + "6623": { + "op": "app_global_get_ex", + "defined_out": [ + "maybe_exists%2#0", + "maybe_value%0#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "maybe_value%0#0", + "maybe_exists%2#0" + ] + }, + "6624": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "maybe_value%0#0" + ] + }, + "6625": { + "op": "bytec 11 // \"spending_address\"", + "defined_out": [ + "\"spending_address\"", + "maybe_value%0#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "maybe_value%0#0", + "\"spending_address\"" + ] + }, + "6627": { + "op": "swap", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "\"spending_address\"", + "maybe_value%0#0" + ] + }, + "6628": { + "op": "app_global_put", + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ] + }, + "6629": { + "op": "b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@8" + }, + "6632": { + "block": "smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_false@2", + "stack_in": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0" + ], + "op": "txn Sender", + "defined_out": [ + "caller#0" + ], + "stack_out": [ + "aggregate%encoded_element%0#0", + "aggregate%encoded_value%0#0", + "box_prefixed_key%0#0", + "box_prefixed_key%0#4", + "box_prefixed_key%4#0", + "escrowAddress#0", + "key#0", + "key#3", + "selector#0", + "selectorArg#0", + "type#0", + "amount#0", + "box%element_offset%2#0", + "cooldown#0", + "epochRef#0", + "foundGroup#0", + "i#0", + "interval#0", + "i\u2081#0", + "last#0", + "lastCalled#0", + "max#0", + "methodIndex#0", + "methodOnCooldown#0", + "newLast#0", + "rekeysBack#0", + "spent#0", + "start#0", + "useRounds#0", + "values%1#0", + "caller#0" + ] + }, + "6634": { + "op": "b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_merge@3" + } + } +} \ No newline at end of file diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/abstracted_account/AbstractedAccount.approval.teal b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/abstracted_account/AbstractedAccount.approval.teal new file mode 100644 index 000000000..2c31cb017 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/abstracted_account/AbstractedAccount.approval.teal @@ -0,0 +1,6840 @@ +#pragma version 11 +#pragma typetrack false + +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: + intcblock 0 1 2 8 400 21700 27700 + bytecblock "controlled_address" "" "admin" "last_user_interaction" "p" "e" "last_change" 0x151f7c75 "x" 0x00 0x0000 "spending_address" 0x002a 0x000a "a" 0x01 "n" "rekey_index" "escrow_factory" "current_plugin" 0x0002 0x000200000000000000000000000000000000000000000000000000002c00000000000000000000000000000000000000 0x6cc3f606 0x002c + txn ApplicationID + bnz main_after_if_else@2 + // smart_contracts/abstracted_account/contract.algo.ts:30 + // rekeyIndex = GlobalState({ initialValue: 0, key: AbstractAccountGlobalStateKeysRekeyIndex }) + bytec 17 // "rekey_index" + intc_0 // 0 + app_global_put + +main_after_if_else@2: + // smart_contracts/abstracted_account/contract.algo.ts:13 + // export class AbstractedAccount extends Contract { + txn OnCompletion + ! + assert // OnCompletion must be NoOp + txn ApplicationID + bz main_create_NoOp@34 + pushbytess 0xbd6099e5 0xd24b7556 0x147b6cd6 0x13bc44e4 // method "register(string)void", method "arc58_changeAdmin(address)void", method "arc58_pluginChangeAdmin(address)void", method "arc58_getAdmin()address" + bytec 22 // method "arc58_verifyAuthAddress()void" + pushbytess 0xc95a5d3d 0x4727af21 0x582ff382 0xdefd5cd2 0xb3c80df9 0xeef448fd 0x38f591ea 0xe350b9d4 0x0a8cb2c2 0x25b713ca 0xebaf14a0 0x1fda3b4f 0x9d3f8918 0xbf4d7c57 0xd5dd382b 0x5cebed43 0xd58685af 0x7c37156e 0xaffaa4e8 0xa2403ddf 0x02fe4515 0x41bdc680 0x50f3e35c // method "arc58_rekeyTo(address,bool)void", method "arc58_canCall(uint64,bool,address,string,byte[4])bool", method "arc58_rekeyToPlugin(uint64,bool,string,uint64[],(uint64,uint64)[])void", method "arc58_rekeyToNamedPlugin(string,bool,string,uint64[],(uint64,uint64)[])void", method "arc58_addPlugin(uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void", method "arc58_removePlugin(uint64,address,string)void", method "arc58_addNamedPlugin(string,uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void", method "arc58_removeNamedPlugin(string)void", method "arc58_newEscrow(string)uint64", method "arc58_toggleEscrowLock(string)(uint64,bool)", method "arc58_reclaim(string,(uint64,uint64,bool)[])void", method "arc58_optinEscrow(string,uint64[])void", method "arc58_pluginOptinEscrow(uint64,address,string,uint64[],pay)void", method "arc58_addAllowances(string,(uint64,uint8,uint64,uint64,uint64,bool)[])void", method "arc58_removeAllowances(string,uint64[])void", method "arc58_addExecutionKey(byte[32],byte[32][],uint64,uint64)void", method "arc58_removeExecutionKey(byte[32])void", method "arc58_getPlugins((uint64,address,string)[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]", method "arc58_getNamedPlugins(string[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]", method "arc58_getEscrows(string[])(uint64,bool)[]", method "arc58_getAllowances(string,uint64[])(uint8,uint64,uint64,uint64,uint64,uint64,uint64,bool)[]", method "arc58_getExecutions(byte[32][])(byte[32][],uint64,uint64)[]", method "mbr(string,uint64,string,uint64)(uint64,uint64,uint64,uint64,uint64,bool,uint64)" + txna ApplicationArgs 0 + match register arc58_changeAdmin arc58_pluginChangeAdmin arc58_getAdmin arc58_verifyAuthAddress arc58_rekeyTo arc58_canCall arc58_rekeyToPlugin arc58_rekeyToNamedPlugin arc58_addPlugin arc58_removePlugin arc58_addNamedPlugin arc58_removeNamedPlugin arc58_newEscrow arc58_toggleEscrowLock arc58_reclaim arc58_optinEscrow arc58_pluginOptinEscrow arc58_addAllowances arc58_removeAllowances arc58_addExecutionKey arc58_removeExecutionKey arc58_getPlugins arc58_getNamedPlugins arc58_getEscrows arc58_getAllowances arc58_getExecutions mbr + err + +main_create_NoOp@34: + // smart_contracts/abstracted_account/contract.algo.ts:13 + // export class AbstractedAccount extends Contract { + pushbytes 0xe18362e2 // method "createApplication(address,address,uint64)void" + txna ApplicationArgs 0 + match createApplication + err + + +// _puya_lib.arc4.dynamic_array_concat_dynamic_element(array_items_count: uint64, array_head_and_tail: bytes, new_items_count: uint64, new_head_and_tail: bytes) -> bytes: +dynamic_array_concat_dynamic_element: + proto 4 1 + bytec_1 // "" + dup + frame_dig -2 + intc_2 // 2 + * + frame_dig -4 + intc_2 // 2 + * + intc_0 // 0 + +dynamic_array_concat_dynamic_element_for_header@1: + frame_dig 4 + frame_dig 3 + < + bz dynamic_array_concat_dynamic_element_after_for@4 + frame_dig -3 + frame_dig 4 + dup + cover 2 + extract_uint16 + frame_dig 2 + + + itob + extract 6 2 + frame_dig 1 + swap + concat + frame_bury 1 + intc_2 // 2 + + + frame_bury 4 + b dynamic_array_concat_dynamic_element_for_header@1 + +dynamic_array_concat_dynamic_element_after_for@4: + frame_dig -3 + len + frame_bury 0 + intc_0 // 0 + frame_bury 4 + +dynamic_array_concat_dynamic_element_for_header@5: + frame_dig 4 + frame_dig 2 + < + bz dynamic_array_concat_dynamic_element_after_for@8 + frame_dig -1 + frame_dig 4 + dup + cover 2 + extract_uint16 + frame_dig 0 + + + itob + extract 6 2 + frame_dig 1 + swap + concat + frame_bury 1 + intc_2 // 2 + + + frame_bury 4 + b dynamic_array_concat_dynamic_element_for_header@5 + +dynamic_array_concat_dynamic_element_after_for@8: + frame_dig -4 + frame_dig -2 + + + itob + extract 6 2 + frame_dig 1 + concat + frame_dig -3 + frame_dig 3 + frame_dig 0 + substring3 + concat + frame_dig -1 + len + frame_dig -1 + frame_dig 2 + uncover 2 + substring3 + concat + frame_bury 0 + retsub + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.createApplication[routing]() -> void: +createApplication: + // smart_contracts/abstracted_account/contract.algo.ts:409 + // @abimethod({ onCreate: 'require' }) + txna ApplicationArgs 1 + dupn 2 + len + pushint 32 // 32 + == + assert // invalid number of bytes for uint8[32] + txna ApplicationArgs 2 + dup + cover 2 + len + pushint 32 // 32 + == + assert // invalid number of bytes for uint8[32] + txna ApplicationArgs 3 + dup + len + intc_3 // 8 + == + assert // invalid number of bytes for uint64 + btoi + swap + // smart_contracts/abstracted_account/contract.algo.ts:412 + // Txn.sender === controlledAddress.native + txn Sender + == + // smart_contracts/abstracted_account/contract.algo.ts:412-413 + // Txn.sender === controlledAddress.native + // || Txn.sender === admin.native, + bnz createApplication_bool_true@3 + // smart_contracts/abstracted_account/contract.algo.ts:413 + // || Txn.sender === admin.native, + txn Sender + dig 2 + == + // smart_contracts/abstracted_account/contract.algo.ts:412-413 + // Txn.sender === controlledAddress.native + // || Txn.sender === admin.native, + bz createApplication_bool_false@4 + +createApplication_bool_true@3: + intc_1 // 1 + +createApplication_bool_merge@5: + // smart_contracts/abstracted_account/contract.algo.ts:411-415 + // assert( + // Txn.sender === controlledAddress.native + // || Txn.sender === admin.native, + // ERR_SENDER_MUST_BE_ADMIN_OR_CONTROLLED_ADDRESS + // ); + assert // sender must be either controlledAddress or admin + // smart_contracts/abstracted_account/contract.algo.ts:416 + // assert(admin !== controlledAddress); + dig 1 + dup + dig 4 + dup + cover 3 + != + assert + // smart_contracts/abstracted_account/contract.algo.ts:16 + // admin = GlobalState({ key: AbstractAccountGlobalStateKeysAdmin }) + bytec_2 // "admin" + // smart_contracts/abstracted_account/contract.algo.ts:418 + // this.admin.value = admin.native; + swap + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:419 + // this.controlledAddress.value = controlledAddress.native === Global.zeroAddress ? Global.currentApplicationAddress : controlledAddress.native; + global ZeroAddress + == + bz createApplication_ternary_false@7 + global CurrentApplicationAddress + +createApplication_ternary_merge@8: + // smart_contracts/abstracted_account/contract.algo.ts:18 + // controlledAddress = GlobalState({ key: AbstractAccountGlobalStateKeysControlledAddress }); + bytec_0 // "controlled_address" + // smart_contracts/abstracted_account/contract.algo.ts:419 + // this.controlledAddress.value = controlledAddress.native === Global.zeroAddress ? Global.currentApplicationAddress : controlledAddress.native; + swap + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:24 + // escrowFactory = GlobalState({ key: AbstractAccountGlobalStateKeysEscrowFactory }) + bytec 18 // "escrow_factory" + // smart_contracts/abstracted_account/contract.algo.ts:420 + // this.escrowFactory.value = escrowFactory; + dig 1 + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:26 + // spendingAddress = GlobalState({ key: AbstractAccountGlobalStateKeysSpendingAddress }) + bytec 11 // "spending_address" + // smart_contracts/abstracted_account/contract.algo.ts:421 + // this.spendingAddress.value = Global.zeroAddress; + global ZeroAddress + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:20 + // lastUserInteraction = GlobalState({ key: AbstractAccountGlobalStateKeysLastUserInteraction }) + bytec_3 // "last_user_interaction" + // smart_contracts/abstracted_account/contract.algo.ts:44 + // this.lastUserInteraction.value = Global.latestTimestamp + global LatestTimestamp + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:22 + // lastChange = GlobalState({ key: AbstractAccountGlobalStateKeysLastChange }) + bytec 6 // "last_change" + // smart_contracts/abstracted_account/contract.algo.ts:48 + // this.lastChange.value = Global.latestTimestamp + global LatestTimestamp + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:409 + // @abimethod({ onCreate: 'require' }) + intc_1 // 1 + return + +createApplication_ternary_false@7: + dig 2 + b createApplication_ternary_merge@8 + +createApplication_bool_false@4: + intc_0 // 0 + b createApplication_bool_merge@5 + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.register[routing]() -> void: +register: + // smart_contracts/abstracted_account/contract.algo.ts:431 + // register(escrow: string): void { + txna ApplicationArgs 1 + dup + intc_0 // 0 + extract_uint16 + intc_2 // 2 + + + dig 1 + len + == + assert // invalid number of bytes for (len+utf8[]) + extract 2 0 + dup + // smart_contracts/abstracted_account/contract.algo.ts:432 + // let app: uint64 = 0 + intc_0 // 0 + swap + // smart_contracts/abstracted_account/contract.algo.ts:433 + // if (escrow !== '') { + bytec_1 // "" + != + bz register_after_if_else@3 + // smart_contracts/abstracted_account/contract.algo.ts:37 + // escrows = BoxMap({ keyPrefix: AbstractAccountBoxPrefixEscrows }) + bytec 5 // "e" + dig 2 + concat + // smart_contracts/abstracted_account/contract.algo.ts:434 + // assert(this.escrows(escrow).exists, ERR_ESCROW_DOES_NOT_EXIST) + dup + box_len + bury 1 + assert // escrow does not exist + // smart_contracts/abstracted_account/contract.algo.ts:435 + // app = this.escrows(escrow).value.id + box_get + pop + intc_0 // 0 + extract_uint64 + bury 1 + +register_after_if_else@3: + // smart_contracts/abstracted_account/contract.algo.ts:438-447 + // abiCall({ + // appId: this.escrowFactory.value, + // args: [ + // itxn.payment({ + // receiver: this.escrowFactory.value.address, + // amount: ARC58WalletIDsByAccountsMbr + // }), + // app + // ] + // }) + itxn_begin + // smart_contracts/abstracted_account/contract.algo.ts:442 + // receiver: this.escrowFactory.value.address, + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:24 + // escrowFactory = GlobalState({ key: AbstractAccountGlobalStateKeysEscrowFactory }) + bytec 18 // "escrow_factory" + // smart_contracts/abstracted_account/contract.algo.ts:442 + // receiver: this.escrowFactory.value.address, + app_global_get_ex + assert // check GlobalState exists + dup + app_params_get AppAddress + assert // application exists + // smart_contracts/abstracted_account/contract.algo.ts:443 + // amount: ARC58WalletIDsByAccountsMbr + pushint 12100 // 12100 + itxn_field Amount + itxn_field Receiver + // smart_contracts/abstracted_account/contract.algo.ts:441-444 + // itxn.payment({ + // receiver: this.escrowFactory.value.address, + // amount: ARC58WalletIDsByAccountsMbr + // }), + intc_1 // 1 + itxn_field TypeEnum + intc_0 // 0 + itxn_field Fee + // smart_contracts/abstracted_account/contract.algo.ts:438-447 + // abiCall({ + // appId: this.escrowFactory.value, + // args: [ + // itxn.payment({ + // receiver: this.escrowFactory.value.address, + // amount: ARC58WalletIDsByAccountsMbr + // }), + // app + // ] + // }) + itxn_next + // smart_contracts/abstracted_account/contract.algo.ts:445 + // app + dig 1 + itob + // smart_contracts/abstracted_account/contract.algo.ts:438-447 + // abiCall({ + // appId: this.escrowFactory.value, + // args: [ + // itxn.payment({ + // receiver: this.escrowFactory.value.address, + // amount: ARC58WalletIDsByAccountsMbr + // }), + // app + // ] + // }) + pushbytes 0x607e7046 // method "register(pay,uint64)void" + itxn_field ApplicationArgs + itxn_field ApplicationArgs + itxn_field ApplicationID + pushint 6 // appl + itxn_field TypeEnum + intc_0 // 0 + itxn_field Fee + itxn_submit + // smart_contracts/abstracted_account/contract.algo.ts:431 + // register(escrow: string): void { + intc_1 // 1 + return + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_changeAdmin[routing]() -> void: +arc58_changeAdmin: + // smart_contracts/abstracted_account/contract.algo.ts:455 + // arc58_changeAdmin(newAdmin: Address): void { + txna ApplicationArgs 1 + dup + len + pushint 32 // 32 + == + assert // invalid number of bytes for uint8[32] + // smart_contracts/abstracted_account/contract.algo.ts:456 + // assert(Txn.sender === this.admin.value, ERR_ONLY_ADMIN_CAN_CHANGE_ADMIN); + txn Sender + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:16 + // admin = GlobalState({ key: AbstractAccountGlobalStateKeysAdmin }) + bytec_2 // "admin" + // smart_contracts/abstracted_account/contract.algo.ts:456 + // assert(Txn.sender === this.admin.value, ERR_ONLY_ADMIN_CAN_CHANGE_ADMIN); + app_global_get_ex + assert // check GlobalState exists + == + assert // only admin can change the admin account + // smart_contracts/abstracted_account/contract.algo.ts:16 + // admin = GlobalState({ key: AbstractAccountGlobalStateKeysAdmin }) + bytec_2 // "admin" + // smart_contracts/abstracted_account/contract.algo.ts:457 + // this.admin.value = newAdmin.native; + swap + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:20 + // lastUserInteraction = GlobalState({ key: AbstractAccountGlobalStateKeysLastUserInteraction }) + bytec_3 // "last_user_interaction" + // smart_contracts/abstracted_account/contract.algo.ts:44 + // this.lastUserInteraction.value = Global.latestTimestamp + global LatestTimestamp + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:22 + // lastChange = GlobalState({ key: AbstractAccountGlobalStateKeysLastChange }) + bytec 6 // "last_change" + // smart_contracts/abstracted_account/contract.algo.ts:48 + // this.lastChange.value = Global.latestTimestamp + global LatestTimestamp + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:455 + // arc58_changeAdmin(newAdmin: Address): void { + intc_1 // 1 + return + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_pluginChangeAdmin[routing]() -> void: +arc58_pluginChangeAdmin: + // smart_contracts/abstracted_account/contract.algo.ts:470 + // arc58_pluginChangeAdmin(newAdmin: Address): void { + txna ApplicationArgs 1 + dup + len + pushint 32 // 32 + == + assert // invalid number of bytes for uint8[32] + // smart_contracts/abstracted_account/contract.algo.ts:471 + // const key = clone(this.currentPlugin.value) + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:28 + // currentPlugin = GlobalState({ key: AbstractAccountGlobalStateKeysCurrentPlugin }) + bytec 19 // "current_plugin" + // smart_contracts/abstracted_account/contract.algo.ts:471 + // const key = clone(this.currentPlugin.value) + app_global_get_ex + assert // check GlobalState exists + // smart_contracts/abstracted_account/contract.algo.ts:472 + // const { plugin, escrow } = key + dup + intc_0 // 0 + extract_uint64 + dig 1 + pushint 40 // 40 + extract_uint16 + dig 2 + len + dig 3 + cover 2 + substring3 + extract 2 0 + // smart_contracts/abstracted_account/contract.algo.ts:474 + // assert(escrow === '', ERR_ADMIN_PLUGINS_CANNOT_USE_ESCROWS); + bytec_1 // "" + == + assert // admin plugins cannot use escrows + // smart_contracts/abstracted_account/contract.algo.ts:475 + // assert(Txn.sender === Application(plugin).address, ERR_SENDER_MUST_BE_ADMIN_PLUGIN); + txn Sender + dig 1 + app_params_get AppAddress + assert // application exists + == + assert // sender must be admin plugin + // smart_contracts/abstracted_account/contract.algo.ts:477 + // this.controlledAddress.value.authAddress === Application(plugin).address, + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:18 + // controlledAddress = GlobalState({ key: AbstractAccountGlobalStateKeysControlledAddress }); + bytec_0 // "controlled_address" + // smart_contracts/abstracted_account/contract.algo.ts:477 + // this.controlledAddress.value.authAddress === Application(plugin).address, + app_global_get_ex + assert // check GlobalState exists + acct_params_get AcctAuthAddr + assert // account funded + swap + app_params_get AppAddress + assert // application exists + == + // smart_contracts/abstracted_account/contract.algo.ts:476-479 + // assert( + // this.controlledAddress.value.authAddress === Application(plugin).address, + // 'This plugin is not in control of the account' + // ); + assert // This plugin is not in control of the account + // smart_contracts/abstracted_account/contract.algo.ts:33 + // plugins = BoxMap({ keyPrefix: AbstractAccountBoxPrefixPlugins }); + bytec 4 // "p" + swap + concat + dup + // smart_contracts/abstracted_account/contract.algo.ts:482 + // this.plugins(key).exists && this.plugins(key).value.admin, + box_len + bury 1 + bz arc58_pluginChangeAdmin_bool_false@4 + dup + pushint 27 // 27 + intc_1 // 1 + box_extract + intc_0 // 0 + getbit + bz arc58_pluginChangeAdmin_bool_false@4 + intc_1 // 1 + +arc58_pluginChangeAdmin_bool_merge@5: + // smart_contracts/abstracted_account/contract.algo.ts:481-484 + // assert( + // this.plugins(key).exists && this.plugins(key).value.admin, + // 'This plugin does not have admin privileges' + // ); + assert // This plugin does not have admin privileges + // smart_contracts/abstracted_account/contract.algo.ts:16 + // admin = GlobalState({ key: AbstractAccountGlobalStateKeysAdmin }) + bytec_2 // "admin" + // smart_contracts/abstracted_account/contract.algo.ts:486 + // this.admin.value = newAdmin.native; + dig 2 + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:487 + // if (this.plugins(key).value.delegationType === DelegationTypeSelf) { + dup + intc_3 // 8 + intc_1 // 1 + box_extract + bytec 15 // 0x01 + == + bz arc58_pluginChangeAdmin_after_if_else@7 + // smart_contracts/abstracted_account/contract.algo.ts:20 + // lastUserInteraction = GlobalState({ key: AbstractAccountGlobalStateKeysLastUserInteraction }) + bytec_3 // "last_user_interaction" + // smart_contracts/abstracted_account/contract.algo.ts:44 + // this.lastUserInteraction.value = Global.latestTimestamp + global LatestTimestamp + app_global_put + +arc58_pluginChangeAdmin_after_if_else@7: + // smart_contracts/abstracted_account/contract.algo.ts:22 + // lastChange = GlobalState({ key: AbstractAccountGlobalStateKeysLastChange }) + bytec 6 // "last_change" + // smart_contracts/abstracted_account/contract.algo.ts:48 + // this.lastChange.value = Global.latestTimestamp + global LatestTimestamp + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:470 + // arc58_pluginChangeAdmin(newAdmin: Address): void { + intc_1 // 1 + return + +arc58_pluginChangeAdmin_bool_false@4: + intc_0 // 0 + b arc58_pluginChangeAdmin_bool_merge@5 + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_getAdmin[routing]() -> void: +arc58_getAdmin: + // smart_contracts/abstracted_account/contract.algo.ts:499 + // return new Address(this.admin.value); + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:16 + // admin = GlobalState({ key: AbstractAccountGlobalStateKeysAdmin }) + bytec_2 // "admin" + // smart_contracts/abstracted_account/contract.algo.ts:499 + // return new Address(this.admin.value); + app_global_get_ex + assert // check GlobalState exists + // smart_contracts/abstracted_account/contract.algo.ts:497 + // @abimethod({ readonly: true }) + bytec 7 // 0x151f7c75 + swap + concat + log + intc_1 // 1 + return + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_verifyAuthAddress[routing]() -> void: +arc58_verifyAuthAddress: + // smart_contracts/abstracted_account/contract.algo.ts:506 + // assert(this.spendingAddress.value.authAddress === this.getAuthAddress()); + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:26 + // spendingAddress = GlobalState({ key: AbstractAccountGlobalStateKeysSpendingAddress }) + bytec 11 // "spending_address" + // smart_contracts/abstracted_account/contract.algo.ts:506 + // assert(this.spendingAddress.value.authAddress === this.getAuthAddress()); + app_global_get_ex + assert // check GlobalState exists + dup + acct_params_get AcctAuthAddr + swap + cover 2 + assert // account funded + // smart_contracts/abstracted_account/contract.algo.ts:397 + // this.spendingAddress.value === this.controlledAddress.value + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:18 + // controlledAddress = GlobalState({ key: AbstractAccountGlobalStateKeysControlledAddress }); + bytec_0 // "controlled_address" + // smart_contracts/abstracted_account/contract.algo.ts:397 + // this.spendingAddress.value === this.controlledAddress.value + app_global_get_ex + assert // check GlobalState exists + == + // smart_contracts/abstracted_account/contract.algo.ts:397-398 + // this.spendingAddress.value === this.controlledAddress.value + // && this.controlledAddress.value === Global.currentApplicationAddress + bz arc58_verifyAuthAddress_ternary_false@4 + // smart_contracts/abstracted_account/contract.algo.ts:398 + // && this.controlledAddress.value === Global.currentApplicationAddress + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:18 + // controlledAddress = GlobalState({ key: AbstractAccountGlobalStateKeysControlledAddress }); + bytec_0 // "controlled_address" + // smart_contracts/abstracted_account/contract.algo.ts:398 + // && this.controlledAddress.value === Global.currentApplicationAddress + app_global_get_ex + assert // check GlobalState exists + global CurrentApplicationAddress + == + // smart_contracts/abstracted_account/contract.algo.ts:397-398 + // this.spendingAddress.value === this.controlledAddress.value + // && this.controlledAddress.value === Global.currentApplicationAddress + bz arc58_verifyAuthAddress_ternary_false@4 + // smart_contracts/abstracted_account/contract.algo.ts:399 + // ) ? Global.zeroAddress : Global.currentApplicationAddress + global ZeroAddress + +arc58_verifyAuthAddress_ternary_merge@5: + // smart_contracts/abstracted_account/contract.algo.ts:506 + // assert(this.spendingAddress.value.authAddress === this.getAuthAddress()); + dig 1 + == + assert + // smart_contracts/abstracted_account/contract.algo.ts:26 + // spendingAddress = GlobalState({ key: AbstractAccountGlobalStateKeysSpendingAddress }) + bytec 11 // "spending_address" + // smart_contracts/abstracted_account/contract.algo.ts:507 + // this.spendingAddress.value = Global.zeroAddress + global ZeroAddress + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:508 + // this.currentPlugin.value = { plugin: 0, caller: Global.currentApplicationAddress, escrow: '' } + global CurrentApplicationAddress + intc_0 // 0 + itob + swap + concat + pushbytes 0x002a0000 + concat + // smart_contracts/abstracted_account/contract.algo.ts:28 + // currentPlugin = GlobalState({ key: AbstractAccountGlobalStateKeysCurrentPlugin }) + bytec 19 // "current_plugin" + // smart_contracts/abstracted_account/contract.algo.ts:508 + // this.currentPlugin.value = { plugin: 0, caller: Global.currentApplicationAddress, escrow: '' } + swap + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:30 + // rekeyIndex = GlobalState({ initialValue: 0, key: AbstractAccountGlobalStateKeysRekeyIndex }) + bytec 17 // "rekey_index" + // smart_contracts/abstracted_account/contract.algo.ts:509 + // this.rekeyIndex.value = 0 + intc_0 // 0 + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:505 + // arc58_verifyAuthAddress(): void { + intc_1 // 1 + return + +arc58_verifyAuthAddress_ternary_false@4: + // smart_contracts/abstracted_account/contract.algo.ts:399 + // ) ? Global.zeroAddress : Global.currentApplicationAddress + global CurrentApplicationAddress + b arc58_verifyAuthAddress_ternary_merge@5 + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyTo[routing]() -> void: +arc58_rekeyTo: + bytec_1 // "" + dup + // smart_contracts/abstracted_account/contract.algo.ts:518 + // arc58_rekeyTo(address: Address, flash: boolean): void { + txna ApplicationArgs 1 + dup + len + pushint 32 // 32 + == + assert // invalid number of bytes for uint8[32] + txna ApplicationArgs 2 + dup + len + intc_1 // 1 + == + assert // invalid number of bytes for bool8 + intc_0 // 0 + getbit + // smart_contracts/abstracted_account/contract.algo.ts:519 + // assert(Txn.sender === this.admin.value, ERR_ADMIN_ONLY); + txn Sender + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:16 + // admin = GlobalState({ key: AbstractAccountGlobalStateKeysAdmin }) + bytec_2 // "admin" + // smart_contracts/abstracted_account/contract.algo.ts:519 + // assert(Txn.sender === this.admin.value, ERR_ADMIN_ONLY); + app_global_get_ex + assert // check GlobalState exists + == + assert // admin only + // smart_contracts/abstracted_account/contract.algo.ts:521-528 + // itxn + // .payment({ + // sender: this.controlledAddress.value, + // receiver: address.native, + // rekeyTo: address.native, + // note: 'rekeying abstracted account' + // }) + // .submit(); + itxn_begin + // smart_contracts/abstracted_account/contract.algo.ts:523 + // sender: this.controlledAddress.value, + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:18 + // controlledAddress = GlobalState({ key: AbstractAccountGlobalStateKeysControlledAddress }); + bytec_0 // "controlled_address" + // smart_contracts/abstracted_account/contract.algo.ts:523 + // sender: this.controlledAddress.value, + app_global_get_ex + assert // check GlobalState exists + // smart_contracts/abstracted_account/contract.algo.ts:526 + // note: 'rekeying abstracted account' + pushbytes "rekeying abstracted account" + itxn_field Note + dig 2 + itxn_field RekeyTo + uncover 2 + itxn_field Receiver + itxn_field Sender + // smart_contracts/abstracted_account/contract.algo.ts:521-527 + // itxn + // .payment({ + // sender: this.controlledAddress.value, + // receiver: address.native, + // rekeyTo: address.native, + // note: 'rekeying abstracted account' + // }) + intc_1 // 1 + itxn_field TypeEnum + intc_0 // 0 + itxn_field Fee + // smart_contracts/abstracted_account/contract.algo.ts:521-528 + // itxn + // .payment({ + // sender: this.controlledAddress.value, + // receiver: address.native, + // rekeyTo: address.native, + // note: 'rekeying abstracted account' + // }) + // .submit(); + itxn_submit + // smart_contracts/abstracted_account/contract.algo.ts:530 + // if (flash) this.assertRekeysBack(); + bz arc58_rekeyTo_after_if_else@4 + // smart_contracts/abstracted_account/contract.algo.ts:160 + // let rekeysBack = false; + intc_0 // 0 + bury 1 + // smart_contracts/abstracted_account/contract.algo.ts:161 + // for (let i: uint64 = (Txn.groupIndex + 1); i < Global.groupSize; i += 1) { + txn GroupIndex + intc_1 // 1 + + + bury 2 + +arc58_rekeyTo_while_top@6: + // smart_contracts/abstracted_account/contract.algo.ts:161 + // for (let i: uint64 = (Txn.groupIndex + 1); i < Global.groupSize; i += 1) { + dig 1 + global GroupSize + < + bz arc58_rekeyTo_block@11 + // smart_contracts/abstracted_account/contract.algo.ts:164 + // if (this.txnRekeysBack(txn)) { + dig 1 + callsub txnRekeysBack + bz arc58_rekeyTo_after_if_else@9 + // smart_contracts/abstracted_account/contract.algo.ts:165 + // rekeysBack = true; + intc_1 // 1 + bury 1 + +arc58_rekeyTo_block@11: + // smart_contracts/abstracted_account/contract.algo.ts:170 + // assert(rekeysBack, ERR_MISSING_REKEY_BACK); + dup + assert // missing rekey back + +arc58_rekeyTo_after_if_else@4: + // smart_contracts/abstracted_account/contract.algo.ts:20 + // lastUserInteraction = GlobalState({ key: AbstractAccountGlobalStateKeysLastUserInteraction }) + bytec_3 // "last_user_interaction" + // smart_contracts/abstracted_account/contract.algo.ts:44 + // this.lastUserInteraction.value = Global.latestTimestamp + global LatestTimestamp + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:518 + // arc58_rekeyTo(address: Address, flash: boolean): void { + intc_1 // 1 + return + +arc58_rekeyTo_after_if_else@9: + // smart_contracts/abstracted_account/contract.algo.ts:161 + // for (let i: uint64 = (Txn.groupIndex + 1); i < Global.groupSize; i += 1) { + dig 1 + intc_1 // 1 + + + bury 2 + b arc58_rekeyTo_while_top@6 + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_canCall[routing]() -> void: +arc58_canCall: + // smart_contracts/abstracted_account/contract.algo.ts:544 + // @abimethod({ readonly: true }) + txna ApplicationArgs 1 + dup + len + intc_3 // 8 + == + assert // invalid number of bytes for uint64 + btoi + txna ApplicationArgs 2 + dup + len + intc_1 // 1 + == + assert // invalid number of bytes for bool8 + intc_0 // 0 + getbit + txna ApplicationArgs 3 + dup + cover 2 + len + pushint 32 // 32 + == + assert // invalid number of bytes for uint8[32] + txna ApplicationArgs 4 + dup + intc_0 // 0 + extract_uint16 + intc_2 // 2 + + + dig 1 + len + == + assert // invalid number of bytes for (len+utf8[]) + extract 2 0 + swap + txna ApplicationArgs 5 + dup + cover 2 + len + pushint 4 // 4 + == + assert // invalid number of bytes for uint8[4] + // smart_contracts/abstracted_account/contract.algo.ts:552 + // if (global) { + bz arc58_canCall_after_if_else@3 + // smart_contracts/abstracted_account/contract.algo.ts:553 + // this.pluginCallAllowed(plugin, Global.zeroAddress, escrow, method); + dig 3 + global ZeroAddress + dig 3 + dig 3 + callsub pluginCallAllowed + pop + +arc58_canCall_after_if_else@3: + // smart_contracts/abstracted_account/contract.algo.ts:555 + // return this.pluginCallAllowed(plugin, address.native, escrow, method); + dig 3 + dig 3 + dig 3 + dig 3 + callsub pluginCallAllowed + // smart_contracts/abstracted_account/contract.algo.ts:544 + // @abimethod({ readonly: true }) + bytec 9 // 0x00 + intc_0 // 0 + uncover 2 + setbit + bytec 7 // 0x151f7c75 + swap + concat + log + intc_1 // 1 + return + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin[routing]() -> void: +arc58_rekeyToPlugin: + // smart_contracts/abstracted_account/contract.algo.ts:567-573 + // arc58_rekeyToPlugin( + // plugin: uint64, + // global: boolean, + // escrow: string, + // methodOffsets: uint64[], + // fundsRequest: FundsRequest[] + // ): void { + txna ApplicationArgs 1 + dup + len + intc_3 // 8 + == + assert // invalid number of bytes for uint64 + btoi + txna ApplicationArgs 2 + dup + len + intc_1 // 1 + == + assert // invalid number of bytes for bool8 + intc_0 // 0 + getbit + txna ApplicationArgs 3 + dup + intc_0 // 0 + extract_uint16 + intc_2 // 2 + + + dig 1 + len + == + assert // invalid number of bytes for (len+utf8[]) + extract 2 0 + txna ApplicationArgs 4 + dup + intc_0 // 0 + extract_uint16 + intc_3 // 8 + * + intc_2 // 2 + + + dig 1 + len + == + assert // invalid number of bytes for (len+uint64[]) + txna ApplicationArgs 5 + dup + intc_0 // 0 + extract_uint16 + pushint 16 // 16 + * + intc_2 // 2 + + + dig 1 + len + == + assert // invalid number of bytes for (len+(uint64,uint64)[]) + callsub smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin + popn 2 + intc_1 // 1 + return + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToNamedPlugin[routing]() -> void: +arc58_rekeyToNamedPlugin: + // smart_contracts/abstracted_account/contract.algo.ts:619-624 + // arc58_rekeyToNamedPlugin( + // name: string, + // global: boolean, + // escrow: string, + // methodOffsets: uint64[], + // fundsRequest: FundsRequest[]): void { + txna ApplicationArgs 1 + dup + intc_0 // 0 + extract_uint16 + intc_2 // 2 + + + dig 1 + len + == + assert // invalid number of bytes for (len+utf8[]) + extract 2 0 + txna ApplicationArgs 2 + dup + len + intc_1 // 1 + == + assert // invalid number of bytes for bool8 + intc_0 // 0 + getbit + txna ApplicationArgs 3 + dup + intc_0 // 0 + extract_uint16 + intc_2 // 2 + + + dig 1 + len + == + assert // invalid number of bytes for (len+utf8[]) + extract 2 0 + txna ApplicationArgs 4 + dup + intc_0 // 0 + extract_uint16 + intc_3 // 8 + * + intc_2 // 2 + + + dig 1 + len + == + assert // invalid number of bytes for (len+uint64[]) + txna ApplicationArgs 5 + dup + intc_0 // 0 + extract_uint16 + pushint 16 // 16 + * + intc_2 // 2 + + + dig 1 + len + == + assert // invalid number of bytes for (len+(uint64,uint64)[]) + // smart_contracts/abstracted_account/contract.algo.ts:35 + // namedPlugins = BoxMap({ keyPrefix: AbstractAccountBoxPrefixNamedPlugins }); + bytec 16 // "n" + uncover 5 + concat + // smart_contracts/abstracted_account/contract.algo.ts:626 + // this.namedPlugins(name).value.plugin, + intc_0 // 0 + intc_3 // 8 + box_extract + btoi + // smart_contracts/abstracted_account/contract.algo.ts:625-631 + // this.arc58_rekeyToPlugin( + // this.namedPlugins(name).value.plugin, + // global, + // escrow, + // methodOffsets, + // fundsRequest + // ); + cover 4 + callsub smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin + popn 2 + // smart_contracts/abstracted_account/contract.algo.ts:619-624 + // arc58_rekeyToNamedPlugin( + // name: string, + // global: boolean, + // escrow: string, + // methodOffsets: uint64[], + // fundsRequest: FundsRequest[]): void { + intc_1 // 1 + return + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_addPlugin[routing]() -> void: +arc58_addPlugin: + intc_0 // 0 + dupn 3 + bytec_1 // "" + dup + // smart_contracts/abstracted_account/contract.algo.ts:648-660 + // arc58_addPlugin( + // plugin: uint64, + // caller: Address, + // escrow: string, + // admin: boolean, + // delegationType: Uint8, + // lastValid: uint64, + // cooldown: uint64, + // methods: MethodRestriction[], + // useRounds: boolean, + // useExecutionKey: boolean, + // defaultToEscrow: boolean + // ): void { + txna ApplicationArgs 1 + dup + len + intc_3 // 8 + == + assert // invalid number of bytes for uint64 + btoi + txna ApplicationArgs 2 + dup + len + pushint 32 // 32 + == + assert // invalid number of bytes for uint8[32] + txna ApplicationArgs 3 + dup + intc_0 // 0 + extract_uint16 + intc_2 // 2 + + + dig 1 + len + == + assert // invalid number of bytes for (len+utf8[]) + extract 2 0 + txna ApplicationArgs 4 + dup + len + intc_1 // 1 + == + assert // invalid number of bytes for bool8 + intc_0 // 0 + getbit + txna ApplicationArgs 5 + dupn 2 + len + intc_1 // 1 + == + assert // invalid number of bytes for uint8 + txna ApplicationArgs 6 + dup + len + intc_3 // 8 + == + assert // invalid number of bytes for uint64 + btoi + swap + txna ApplicationArgs 7 + dup + len + intc_3 // 8 + == + assert // invalid number of bytes for uint64 + btoi + swap + txna ApplicationArgs 8 + dup + cover 2 + dup + intc_0 // 0 + extract_uint16 + dup + cover 3 + pushint 12 // 12 + * + intc_2 // 2 + + + swap + len + == + assert // invalid number of bytes for (len+(uint8[4],uint64)[]) + txna ApplicationArgs 9 + dup + len + intc_1 // 1 + == + assert // invalid number of bytes for bool8 + intc_0 // 0 + getbit + swap + txna ApplicationArgs 10 + dup + len + intc_1 // 1 + == + assert // invalid number of bytes for bool8 + intc_0 // 0 + getbit + swap + txna ApplicationArgs 11 + dup + len + intc_1 // 1 + == + assert // invalid number of bytes for bool8 + intc_0 // 0 + getbit + swap + // smart_contracts/abstracted_account/contract.algo.ts:661 + // assert(Txn.sender === this.admin.value, ERR_ADMIN_ONLY); + txn Sender + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:16 + // admin = GlobalState({ key: AbstractAccountGlobalStateKeysAdmin }) + bytec_2 // "admin" + // smart_contracts/abstracted_account/contract.algo.ts:661 + // assert(Txn.sender === this.admin.value, ERR_ADMIN_ONLY); + app_global_get_ex + assert // check GlobalState exists + == + assert // admin only + // smart_contracts/abstracted_account/contract.algo.ts:664 + // delegationType === DelegationTypeSelf && + bytec 15 // 0x01 + == + // smart_contracts/abstracted_account/contract.algo.ts:664-665 + // delegationType === DelegationTypeSelf && + // caller.native === Global.zeroAddress + bz arc58_addPlugin_bool_false@4 + // smart_contracts/abstracted_account/contract.algo.ts:665 + // caller.native === Global.zeroAddress + dig 10 + global ZeroAddress + == + // smart_contracts/abstracted_account/contract.algo.ts:664-665 + // delegationType === DelegationTypeSelf && + // caller.native === Global.zeroAddress + bz arc58_addPlugin_bool_false@4 + intc_1 // 1 + +arc58_addPlugin_bool_merge@5: + // smart_contracts/abstracted_account/contract.algo.ts:663-666 + // !( + // delegationType === DelegationTypeSelf && + // caller.native === Global.zeroAddress + // ), + ! + // smart_contracts/abstracted_account/contract.algo.ts:662-668 + // assert( + // !( + // delegationType === DelegationTypeSelf && + // caller.native === Global.zeroAddress + // ), + // ERR_ZERO_ADDRESS_DELEGATION_TYPE + // ) + assert // delegation type must not be self for global plugins + // smart_contracts/abstracted_account/contract.algo.ts:671-672 + // useExecutionKey && + // caller.native !== Global.zeroAddress + dig 1 + bz arc58_addPlugin_bool_false@8 + // smart_contracts/abstracted_account/contract.algo.ts:672 + // caller.native !== Global.zeroAddress + dig 10 + global ZeroAddress + != + // smart_contracts/abstracted_account/contract.algo.ts:671-672 + // useExecutionKey && + // caller.native !== Global.zeroAddress + bz arc58_addPlugin_bool_false@8 + intc_1 // 1 + +arc58_addPlugin_bool_merge@9: + // smart_contracts/abstracted_account/contract.algo.ts:670-673 + // !( + // useExecutionKey && + // caller.native !== Global.zeroAddress + // ), + ! + // smart_contracts/abstracted_account/contract.algo.ts:669-675 + // assert( + // !( + // useExecutionKey && + // caller.native !== Global.zeroAddress + // ), + // ERR_USING_EXECUTION_KEY_REQUIRES_GLOBAL + // ) + assert // using execution key requires global plugin + // smart_contracts/abstracted_account/contract.algo.ts:678 + // if (defaultToEscrow) { + dup + bnz arc58_addPlugin_if_body@10 + dig 9 + bury 17 + +arc58_addPlugin_after_if_else@11: + // smart_contracts/abstracted_account/contract.algo.ts:683 + // const key: PluginKey = { plugin, caller: caller.native, escrow: escrowKey } + dig 11 + itob + dig 11 + concat + dig 17 + dup + len + itob + extract 6 2 + swap + concat + swap + bytec 12 // 0x002a + concat + swap + concat + bury 16 + // smart_contracts/abstracted_account/contract.algo.ts:685 + // let methodInfos: MethodInfo[] = [] + intc_0 // 0 + itob + bury 18 + bytec 10 // 0x0000 + bury 15 + // smart_contracts/abstracted_account/contract.algo.ts:686 + // for (let i: uint64 = 0; i < methods.length; i += 1) { + intc_0 // 0 + bury 13 + +arc58_addPlugin_while_top@12: + // smart_contracts/abstracted_account/contract.algo.ts:686 + // for (let i: uint64 = 0; i < methods.length; i += 1) { + dig 12 + dig 4 + < + bz arc58_addPlugin_after_while@14 + // smart_contracts/abstracted_account/contract.algo.ts:687 + // methodInfos.push({ ...methods[i], lastCalled: 0 }) + dig 4 + extract 2 0 + dig 13 + dup + cover 2 + pushint 12 // 12 + * + pushint 12 // 12 + extract3 // on error: index access is out of bounds + dup + extract 0 4 + swap + extract 4 8 + dig 1 + len + pushint 4 // 4 + == + assert // invalid size + concat + dig 19 + concat + dig 16 + dup + uncover 2 + concat // on error: max array length exceeded + swap + intc_0 // 0 + extract_uint16 + intc_1 // 1 + + + itob + extract 6 2 + replace2 0 + bury 16 + // smart_contracts/abstracted_account/contract.algo.ts:686 + // for (let i: uint64 = 0; i < methods.length; i += 1) { + intc_1 // 1 + + + bury 13 + b arc58_addPlugin_while_top@12 + +arc58_addPlugin_after_while@14: + // smart_contracts/abstracted_account/contract.algo.ts:690 + // const epochRef = useRounds ? Global.round : Global.latestTimestamp; + dig 2 + bz arc58_addPlugin_ternary_false@16 + global Round + bury 14 + +arc58_addPlugin_ternary_merge@17: + // smart_contracts/abstracted_account/contract.algo.ts:692 + // if (this.controlledAddress.value !== Global.currentApplicationAddress) { + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:18 + // controlledAddress = GlobalState({ key: AbstractAccountGlobalStateKeysControlledAddress }); + bytec_0 // "controlled_address" + // smart_contracts/abstracted_account/contract.algo.ts:692 + // if (this.controlledAddress.value !== Global.currentApplicationAddress) { + app_global_get_ex + assert // check GlobalState exists + global CurrentApplicationAddress + != + bz arc58_addPlugin_after_if_else@20 + // smart_contracts/abstracted_account/contract.algo.ts:693-699 + // itxn + // .payment({ + // sender: this.controlledAddress.value, + // receiver: Global.currentApplicationAddress, + // amount: this.pluginsMbr(escrowKey, methodInfos.length) + // }) + // .submit() + itxn_begin + // smart_contracts/abstracted_account/contract.algo.ts:695 + // sender: this.controlledAddress.value, + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:18 + // controlledAddress = GlobalState({ key: AbstractAccountGlobalStateKeysControlledAddress }); + bytec_0 // "controlled_address" + // smart_contracts/abstracted_account/contract.algo.ts:695 + // sender: this.controlledAddress.value, + app_global_get_ex + assert // check GlobalState exists + // smart_contracts/abstracted_account/contract.algo.ts:696 + // receiver: Global.currentApplicationAddress, + global CurrentApplicationAddress + // smart_contracts/abstracted_account/contract.algo.ts:697 + // amount: this.pluginsMbr(escrowKey, methodInfos.length) + dig 16 + intc_0 // 0 + extract_uint16 + dig 19 + swap + callsub pluginsMbr + itxn_field Amount + itxn_field Receiver + itxn_field Sender + // smart_contracts/abstracted_account/contract.algo.ts:693-698 + // itxn + // .payment({ + // sender: this.controlledAddress.value, + // receiver: Global.currentApplicationAddress, + // amount: this.pluginsMbr(escrowKey, methodInfos.length) + // }) + intc_1 // 1 + itxn_field TypeEnum + intc_0 // 0 + itxn_field Fee + // smart_contracts/abstracted_account/contract.algo.ts:693-699 + // itxn + // .payment({ + // sender: this.controlledAddress.value, + // receiver: Global.currentApplicationAddress, + // amount: this.pluginsMbr(escrowKey, methodInfos.length) + // }) + // .submit() + itxn_submit + +arc58_addPlugin_after_if_else@20: + // smart_contracts/abstracted_account/contract.algo.ts:702 + // const escrowID = this.maybeNewEscrow(escrow); + dig 9 + callsub maybeNewEscrow + // smart_contracts/abstracted_account/contract.algo.ts:704-715 + // this.plugins(key).value = { + // escrow: escrowID, + // admin, + // delegationType, + // lastValid, + // cooldown, + // methods: clone(methodInfos), + // useRounds, + // useExecutionKey, + // lastCalled: 0, + // start: epochRef, + // } + itob + dig 8 + concat + dig 7 + itob + concat + dig 6 + itob + concat + bytec 23 // 0x002c + concat + bytec 9 // 0x00 + intc_0 // 0 + dig 11 + setbit + intc_1 // 1 + dig 5 + setbit + intc_2 // 2 + dig 4 + setbit + concat + dig 18 + concat + dig 14 + itob + concat + dig 15 + concat + // smart_contracts/abstracted_account/contract.algo.ts:33 + // plugins = BoxMap({ keyPrefix: AbstractAccountBoxPrefixPlugins }); + bytec 4 // "p" + dig 17 + concat + // smart_contracts/abstracted_account/contract.algo.ts:704-715 + // this.plugins(key).value = { + // escrow: escrowID, + // admin, + // delegationType, + // lastValid, + // cooldown, + // methods: clone(methodInfos), + // useRounds, + // useExecutionKey, + // lastCalled: 0, + // start: epochRef, + // } + dup + box_del + pop + swap + box_put + // smart_contracts/abstracted_account/contract.algo.ts:20 + // lastUserInteraction = GlobalState({ key: AbstractAccountGlobalStateKeysLastUserInteraction }) + bytec_3 // "last_user_interaction" + // smart_contracts/abstracted_account/contract.algo.ts:44 + // this.lastUserInteraction.value = Global.latestTimestamp + global LatestTimestamp + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:22 + // lastChange = GlobalState({ key: AbstractAccountGlobalStateKeysLastChange }) + bytec 6 // "last_change" + // smart_contracts/abstracted_account/contract.algo.ts:48 + // this.lastChange.value = Global.latestTimestamp + global LatestTimestamp + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:648-660 + // arc58_addPlugin( + // plugin: uint64, + // caller: Address, + // escrow: string, + // admin: boolean, + // delegationType: Uint8, + // lastValid: uint64, + // cooldown: uint64, + // methods: MethodRestriction[], + // useRounds: boolean, + // useExecutionKey: boolean, + // defaultToEscrow: boolean + // ): void { + intc_1 // 1 + return + +arc58_addPlugin_ternary_false@16: + // smart_contracts/abstracted_account/contract.algo.ts:690 + // const epochRef = useRounds ? Global.round : Global.latestTimestamp; + global LatestTimestamp + bury 14 + b arc58_addPlugin_ternary_merge@17 + +arc58_addPlugin_if_body@10: + // smart_contracts/abstracted_account/contract.algo.ts:679 + // assert(escrow !== '', ERR_ESCROW_REQUIRED_TO_BE_SET_AS_DEFAULT) + dig 9 + bytec_1 // "" + != + assert // escrow must be set if defaultToEscrow is true + // smart_contracts/abstracted_account/contract.algo.ts:680 + // escrowKey = '' + bytec_1 // "" + bury 17 + b arc58_addPlugin_after_if_else@11 + +arc58_addPlugin_bool_false@8: + intc_0 // 0 + b arc58_addPlugin_bool_merge@9 + +arc58_addPlugin_bool_false@4: + intc_0 // 0 + b arc58_addPlugin_bool_merge@5 + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_removePlugin[routing]() -> void: +arc58_removePlugin: + // smart_contracts/abstracted_account/contract.algo.ts:727 + // arc58_removePlugin(plugin: uint64, caller: Address, escrow: string): void { + txna ApplicationArgs 1 + dup + len + intc_3 // 8 + == + assert // invalid number of bytes for uint64 + btoi + txna ApplicationArgs 2 + dup + len + pushint 32 // 32 + == + assert // invalid number of bytes for uint8[32] + txna ApplicationArgs 3 + dup + intc_0 // 0 + extract_uint16 + intc_2 // 2 + + + dig 1 + len + == + assert // invalid number of bytes for (len+utf8[]) + extract 2 0 + dup + cover 3 + // smart_contracts/abstracted_account/contract.algo.ts:728 + // assert(Txn.sender === this.admin.value, ERR_ADMIN_ONLY); + txn Sender + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:16 + // admin = GlobalState({ key: AbstractAccountGlobalStateKeysAdmin }) + bytec_2 // "admin" + // smart_contracts/abstracted_account/contract.algo.ts:728 + // assert(Txn.sender === this.admin.value, ERR_ADMIN_ONLY); + app_global_get_ex + assert // check GlobalState exists + == + assert // admin only + // smart_contracts/abstracted_account/contract.algo.ts:730 + // const key: PluginKey = { plugin, caller: caller.native, escrow } + uncover 2 + itob + uncover 2 + concat + dig 1 + len + itob + extract 6 2 + uncover 2 + concat + swap + bytec 12 // 0x002a + concat + swap + concat + // smart_contracts/abstracted_account/contract.algo.ts:33 + // plugins = BoxMap({ keyPrefix: AbstractAccountBoxPrefixPlugins }); + bytec 4 // "p" + swap + concat + // smart_contracts/abstracted_account/contract.algo.ts:731 + // assert(this.plugins(key).exists, ERR_PLUGIN_DOES_NOT_EXIST) + dup + box_len + bury 1 + assert // plugin does not exist + // smart_contracts/abstracted_account/contract.algo.ts:733 + // const methodsLength: uint64 = this.plugins(key).value.methods.length + dup + pushint 44 // 44 + intc_2 // 2 + box_extract + btoi + swap + // smart_contracts/abstracted_account/contract.algo.ts:735 + // this.plugins(key).delete(); + box_del + pop + // smart_contracts/abstracted_account/contract.algo.ts:737 + // if (this.controlledAddress.value !== Global.currentApplicationAddress) { + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:18 + // controlledAddress = GlobalState({ key: AbstractAccountGlobalStateKeysControlledAddress }); + bytec_0 // "controlled_address" + // smart_contracts/abstracted_account/contract.algo.ts:737 + // if (this.controlledAddress.value !== Global.currentApplicationAddress) { + app_global_get_ex + assert // check GlobalState exists + global CurrentApplicationAddress + != + bz arc58_removePlugin_after_if_else@4 + // smart_contracts/abstracted_account/contract.algo.ts:738-743 + // itxn + // .payment({ + // receiver: this.controlledAddress.value, + // amount: this.pluginsMbr(escrow, methodsLength) + // }) + // .submit() + itxn_begin + // smart_contracts/abstracted_account/contract.algo.ts:740 + // receiver: this.controlledAddress.value, + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:18 + // controlledAddress = GlobalState({ key: AbstractAccountGlobalStateKeysControlledAddress }); + bytec_0 // "controlled_address" + // smart_contracts/abstracted_account/contract.algo.ts:740 + // receiver: this.controlledAddress.value, + app_global_get_ex + assert // check GlobalState exists + // smart_contracts/abstracted_account/contract.algo.ts:741 + // amount: this.pluginsMbr(escrow, methodsLength) + dig 2 + dig 2 + callsub pluginsMbr + itxn_field Amount + itxn_field Receiver + // smart_contracts/abstracted_account/contract.algo.ts:738-742 + // itxn + // .payment({ + // receiver: this.controlledAddress.value, + // amount: this.pluginsMbr(escrow, methodsLength) + // }) + intc_1 // 1 + itxn_field TypeEnum + intc_0 // 0 + itxn_field Fee + // smart_contracts/abstracted_account/contract.algo.ts:738-743 + // itxn + // .payment({ + // receiver: this.controlledAddress.value, + // amount: this.pluginsMbr(escrow, methodsLength) + // }) + // .submit() + itxn_submit + +arc58_removePlugin_after_if_else@4: + // smart_contracts/abstracted_account/contract.algo.ts:20 + // lastUserInteraction = GlobalState({ key: AbstractAccountGlobalStateKeysLastUserInteraction }) + bytec_3 // "last_user_interaction" + // smart_contracts/abstracted_account/contract.algo.ts:44 + // this.lastUserInteraction.value = Global.latestTimestamp + global LatestTimestamp + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:22 + // lastChange = GlobalState({ key: AbstractAccountGlobalStateKeysLastChange }) + bytec 6 // "last_change" + // smart_contracts/abstracted_account/contract.algo.ts:48 + // this.lastChange.value = Global.latestTimestamp + global LatestTimestamp + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:727 + // arc58_removePlugin(plugin: uint64, caller: Address, escrow: string): void { + intc_1 // 1 + return + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_addNamedPlugin[routing]() -> void: +arc58_addNamedPlugin: + intc_0 // 0 + dupn 3 + bytec_1 // "" + dup + // smart_contracts/abstracted_account/contract.algo.ts:765-778 + // arc58_addNamedPlugin( + // name: string, + // plugin: uint64, + // caller: Address, + // escrow: string, + // admin: boolean, + // delegationType: Uint8, + // lastValid: uint64, + // cooldown: uint64, + // methods: MethodRestriction[], + // useRounds: boolean, + // useExecutionKey: boolean, + // defaultToEscrow: boolean + // ): void { + txna ApplicationArgs 1 + dup + intc_0 // 0 + extract_uint16 + intc_2 // 2 + + + dig 1 + len + == + assert // invalid number of bytes for (len+utf8[]) + extract 2 0 + dup + txna ApplicationArgs 2 + dup + len + intc_3 // 8 + == + assert // invalid number of bytes for uint64 + btoi + swap + txna ApplicationArgs 3 + dup + cover 2 + len + pushint 32 // 32 + == + assert // invalid number of bytes for uint8[32] + txna ApplicationArgs 4 + dup + intc_0 // 0 + extract_uint16 + intc_2 // 2 + + + dig 1 + len + == + assert // invalid number of bytes for (len+utf8[]) + extract 2 0 + swap + txna ApplicationArgs 5 + dup + len + intc_1 // 1 + == + assert // invalid number of bytes for bool8 + intc_0 // 0 + getbit + swap + txna ApplicationArgs 6 + dup + cover 2 + dup + len + intc_1 // 1 + == + assert // invalid number of bytes for uint8 + txna ApplicationArgs 7 + dup + len + intc_3 // 8 + == + assert // invalid number of bytes for uint64 + btoi + cover 2 + txna ApplicationArgs 8 + dup + len + intc_3 // 8 + == + assert // invalid number of bytes for uint64 + btoi + cover 2 + txna ApplicationArgs 9 + dup + cover 3 + dup + intc_0 // 0 + extract_uint16 + dup + cover 4 + pushint 12 // 12 + * + intc_2 // 2 + + + swap + len + == + assert // invalid number of bytes for (len+(uint8[4],uint64)[]) + txna ApplicationArgs 10 + dup + len + intc_1 // 1 + == + assert // invalid number of bytes for bool8 + intc_0 // 0 + getbit + cover 2 + txna ApplicationArgs 11 + dup + len + intc_1 // 1 + == + assert // invalid number of bytes for bool8 + intc_0 // 0 + getbit + cover 2 + txna ApplicationArgs 12 + dup + len + intc_1 // 1 + == + assert // invalid number of bytes for bool8 + intc_0 // 0 + getbit + cover 2 + // smart_contracts/abstracted_account/contract.algo.ts:779 + // assert(Txn.sender === this.admin.value, ERR_ADMIN_ONLY); + txn Sender + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:16 + // admin = GlobalState({ key: AbstractAccountGlobalStateKeysAdmin }) + bytec_2 // "admin" + // smart_contracts/abstracted_account/contract.algo.ts:779 + // assert(Txn.sender === this.admin.value, ERR_ADMIN_ONLY); + app_global_get_ex + assert // check GlobalState exists + == + assert // admin only + // smart_contracts/abstracted_account/contract.algo.ts:35 + // namedPlugins = BoxMap({ keyPrefix: AbstractAccountBoxPrefixNamedPlugins }); + bytec 16 // "n" + uncover 2 + concat + dup + cover 2 + // smart_contracts/abstracted_account/contract.algo.ts:780 + // assert(!this.namedPlugins(name).exists); + box_len + bury 1 + ! + assert + // smart_contracts/abstracted_account/contract.algo.ts:783 + // delegationType === DelegationTypeSelf && + bytec 15 // 0x01 + == + // smart_contracts/abstracted_account/contract.algo.ts:783-784 + // delegationType === DelegationTypeSelf && + // caller.native === Global.zeroAddress + bz arc58_addNamedPlugin_bool_false@4 + // smart_contracts/abstracted_account/contract.algo.ts:784 + // caller.native === Global.zeroAddress + dig 11 + global ZeroAddress + == + // smart_contracts/abstracted_account/contract.algo.ts:783-784 + // delegationType === DelegationTypeSelf && + // caller.native === Global.zeroAddress + bz arc58_addNamedPlugin_bool_false@4 + intc_1 // 1 + +arc58_addNamedPlugin_bool_merge@5: + // smart_contracts/abstracted_account/contract.algo.ts:782-785 + // !( + // delegationType === DelegationTypeSelf && + // caller.native === Global.zeroAddress + // ), + ! + // smart_contracts/abstracted_account/contract.algo.ts:781-787 + // assert( + // !( + // delegationType === DelegationTypeSelf && + // caller.native === Global.zeroAddress + // ), + // ERR_ZERO_ADDRESS_DELEGATION_TYPE + // ) + assert // delegation type must not be self for global plugins + // smart_contracts/abstracted_account/contract.algo.ts:790-791 + // useExecutionKey && + // caller.native !== Global.zeroAddress + dig 2 + bz arc58_addNamedPlugin_bool_false@8 + // smart_contracts/abstracted_account/contract.algo.ts:791 + // caller.native !== Global.zeroAddress + dig 11 + global ZeroAddress + != + // smart_contracts/abstracted_account/contract.algo.ts:790-791 + // useExecutionKey && + // caller.native !== Global.zeroAddress + bz arc58_addNamedPlugin_bool_false@8 + intc_1 // 1 + +arc58_addNamedPlugin_bool_merge@9: + // smart_contracts/abstracted_account/contract.algo.ts:789-792 + // !( + // useExecutionKey && + // caller.native !== Global.zeroAddress + // ), + ! + // smart_contracts/abstracted_account/contract.algo.ts:788-794 + // assert( + // !( + // useExecutionKey && + // caller.native !== Global.zeroAddress + // ), + // ERR_USING_EXECUTION_KEY_REQUIRES_GLOBAL + // ) + assert // using execution key requires global plugin + // smart_contracts/abstracted_account/contract.algo.ts:797 + // if (defaultToEscrow) { + dig 1 + bnz arc58_addNamedPlugin_if_body@10 + dig 10 + bury 19 + +arc58_addNamedPlugin_after_if_else@11: + // smart_contracts/abstracted_account/contract.algo.ts:802 + // const key: PluginKey = { plugin, caller: caller.native, escrow: escrowKey } + dig 12 + itob + dig 12 + concat + dig 19 + dup + len + itob + extract 6 2 + swap + concat + swap + bytec 12 // 0x002a + concat + swap + concat + dup + bury 19 + // smart_contracts/abstracted_account/contract.algo.ts:803 + // this.namedPlugins(name).value = clone(key) + dig 1 + dup + box_del + pop + swap + box_put + // smart_contracts/abstracted_account/contract.algo.ts:805 + // let methodInfos: MethodInfo[] = [] + intc_0 // 0 + itob + bury 20 + bytec 10 // 0x0000 + bury 17 + // smart_contracts/abstracted_account/contract.algo.ts:806 + // for (let i: uint64 = 0; i < methods.length; i += 1) { + intc_0 // 0 + bury 15 + +arc58_addNamedPlugin_while_top@12: + // smart_contracts/abstracted_account/contract.algo.ts:806 + // for (let i: uint64 = 0; i < methods.length; i += 1) { + dig 14 + dig 5 + < + bz arc58_addNamedPlugin_after_while@14 + // smart_contracts/abstracted_account/contract.algo.ts:807 + // methodInfos.push({ ...methods[i], lastCalled: 0 }) + dig 5 + extract 2 0 + dig 15 + dup + cover 2 + pushint 12 // 12 + * + pushint 12 // 12 + extract3 // on error: index access is out of bounds + dup + extract 0 4 + swap + extract 4 8 + dig 1 + len + pushint 4 // 4 + == + assert // invalid size + concat + dig 21 + concat + dig 18 + dup + uncover 2 + concat // on error: max array length exceeded + swap + intc_0 // 0 + extract_uint16 + intc_1 // 1 + + + itob + extract 6 2 + replace2 0 + bury 18 + // smart_contracts/abstracted_account/contract.algo.ts:806 + // for (let i: uint64 = 0; i < methods.length; i += 1) { + intc_1 // 1 + + + bury 15 + b arc58_addNamedPlugin_while_top@12 + +arc58_addNamedPlugin_after_while@14: + // smart_contracts/abstracted_account/contract.algo.ts:810 + // if (this.controlledAddress.value !== Global.currentApplicationAddress) { + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:18 + // controlledAddress = GlobalState({ key: AbstractAccountGlobalStateKeysControlledAddress }); + bytec_0 // "controlled_address" + // smart_contracts/abstracted_account/contract.algo.ts:810 + // if (this.controlledAddress.value !== Global.currentApplicationAddress) { + app_global_get_ex + assert // check GlobalState exists + global CurrentApplicationAddress + != + bz arc58_addNamedPlugin_after_if_else@17 + // smart_contracts/abstracted_account/contract.algo.ts:811-817 + // itxn + // .payment({ + // sender: this.controlledAddress.value, + // receiver: Global.currentApplicationAddress, + // amount: this.pluginsMbr(escrowKey, methodInfos.length) + this.namedPluginsMbr(name) + // }) + // .submit() + itxn_begin + // smart_contracts/abstracted_account/contract.algo.ts:813 + // sender: this.controlledAddress.value, + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:18 + // controlledAddress = GlobalState({ key: AbstractAccountGlobalStateKeysControlledAddress }); + bytec_0 // "controlled_address" + // smart_contracts/abstracted_account/contract.algo.ts:813 + // sender: this.controlledAddress.value, + app_global_get_ex + assert // check GlobalState exists + // smart_contracts/abstracted_account/contract.algo.ts:814 + // receiver: Global.currentApplicationAddress, + global CurrentApplicationAddress + // smart_contracts/abstracted_account/contract.algo.ts:815 + // amount: this.pluginsMbr(escrowKey, methodInfos.length) + this.namedPluginsMbr(name) + dig 18 + intc_0 // 0 + extract_uint16 + dig 21 + swap + callsub pluginsMbr + // smart_contracts/abstracted_account/contract.algo.ts:58 + // return MinNamedPluginMBR + (BoxCostPerByte * Bytes(name).length); + dig 16 + len + intc 4 // 400 + * + intc 5 // 21700 + + + // smart_contracts/abstracted_account/contract.algo.ts:815 + // amount: this.pluginsMbr(escrowKey, methodInfos.length) + this.namedPluginsMbr(name) + + + itxn_field Amount + itxn_field Receiver + itxn_field Sender + // smart_contracts/abstracted_account/contract.algo.ts:811-816 + // itxn + // .payment({ + // sender: this.controlledAddress.value, + // receiver: Global.currentApplicationAddress, + // amount: this.pluginsMbr(escrowKey, methodInfos.length) + this.namedPluginsMbr(name) + // }) + intc_1 // 1 + itxn_field TypeEnum + intc_0 // 0 + itxn_field Fee + // smart_contracts/abstracted_account/contract.algo.ts:811-817 + // itxn + // .payment({ + // sender: this.controlledAddress.value, + // receiver: Global.currentApplicationAddress, + // amount: this.pluginsMbr(escrowKey, methodInfos.length) + this.namedPluginsMbr(name) + // }) + // .submit() + itxn_submit + +arc58_addNamedPlugin_after_if_else@17: + // smart_contracts/abstracted_account/contract.algo.ts:820 + // const escrowID = this.maybeNewEscrow(escrow); + dig 10 + callsub maybeNewEscrow + bury 16 + // smart_contracts/abstracted_account/contract.algo.ts:822 + // const epochRef = useRounds ? Global.round : Global.latestTimestamp; + dig 3 + bz arc58_addNamedPlugin_ternary_false@19 + global Round + +arc58_addNamedPlugin_ternary_merge@20: + // smart_contracts/abstracted_account/contract.algo.ts:824-835 + // this.plugins(key).value = { + // escrow: escrowID, + // admin, + // delegationType, + // lastValid, + // cooldown, + // methods: clone(methodInfos), + // useRounds, + // useExecutionKey, + // lastCalled: 0, + // start: epochRef + // } + dig 16 + itob + dig 10 + concat + dig 9 + itob + concat + dig 8 + itob + concat + bytec 23 // 0x002c + concat + bytec 9 // 0x00 + intc_0 // 0 + dig 13 + setbit + intc_1 // 1 + dig 7 + setbit + intc_2 // 2 + dig 6 + setbit + concat + dig 21 + concat + swap + itob + concat + dig 17 + concat + // smart_contracts/abstracted_account/contract.algo.ts:33 + // plugins = BoxMap({ keyPrefix: AbstractAccountBoxPrefixPlugins }); + bytec 4 // "p" + dig 19 + concat + // smart_contracts/abstracted_account/contract.algo.ts:824-835 + // this.plugins(key).value = { + // escrow: escrowID, + // admin, + // delegationType, + // lastValid, + // cooldown, + // methods: clone(methodInfos), + // useRounds, + // useExecutionKey, + // lastCalled: 0, + // start: epochRef + // } + dup + box_del + pop + swap + box_put + // smart_contracts/abstracted_account/contract.algo.ts:20 + // lastUserInteraction = GlobalState({ key: AbstractAccountGlobalStateKeysLastUserInteraction }) + bytec_3 // "last_user_interaction" + // smart_contracts/abstracted_account/contract.algo.ts:44 + // this.lastUserInteraction.value = Global.latestTimestamp + global LatestTimestamp + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:22 + // lastChange = GlobalState({ key: AbstractAccountGlobalStateKeysLastChange }) + bytec 6 // "last_change" + // smart_contracts/abstracted_account/contract.algo.ts:48 + // this.lastChange.value = Global.latestTimestamp + global LatestTimestamp + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:765-778 + // arc58_addNamedPlugin( + // name: string, + // plugin: uint64, + // caller: Address, + // escrow: string, + // admin: boolean, + // delegationType: Uint8, + // lastValid: uint64, + // cooldown: uint64, + // methods: MethodRestriction[], + // useRounds: boolean, + // useExecutionKey: boolean, + // defaultToEscrow: boolean + // ): void { + intc_1 // 1 + return + +arc58_addNamedPlugin_ternary_false@19: + // smart_contracts/abstracted_account/contract.algo.ts:822 + // const epochRef = useRounds ? Global.round : Global.latestTimestamp; + global LatestTimestamp + b arc58_addNamedPlugin_ternary_merge@20 + +arc58_addNamedPlugin_if_body@10: + // smart_contracts/abstracted_account/contract.algo.ts:798 + // assert(escrow !== '', ERR_ESCROW_REQUIRED_TO_BE_SET_AS_DEFAULT) + dig 10 + bytec_1 // "" + != + assert // escrow must be set if defaultToEscrow is true + // smart_contracts/abstracted_account/contract.algo.ts:799 + // escrowKey = '' + bytec_1 // "" + bury 19 + b arc58_addNamedPlugin_after_if_else@11 + +arc58_addNamedPlugin_bool_false@8: + intc_0 // 0 + b arc58_addNamedPlugin_bool_merge@9 + +arc58_addNamedPlugin_bool_false@4: + intc_0 // 0 + b arc58_addNamedPlugin_bool_merge@5 + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_removeNamedPlugin[routing]() -> void: +arc58_removeNamedPlugin: + // smart_contracts/abstracted_account/contract.algo.ts:846 + // arc58_removeNamedPlugin(name: string): void { + txna ApplicationArgs 1 + dup + intc_0 // 0 + extract_uint16 + intc_2 // 2 + + + dig 1 + len + == + assert // invalid number of bytes for (len+utf8[]) + extract 2 0 + dup + // smart_contracts/abstracted_account/contract.algo.ts:847 + // assert(Txn.sender === this.admin.value, ERR_ADMIN_ONLY); + txn Sender + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:16 + // admin = GlobalState({ key: AbstractAccountGlobalStateKeysAdmin }) + bytec_2 // "admin" + // smart_contracts/abstracted_account/contract.algo.ts:847 + // assert(Txn.sender === this.admin.value, ERR_ADMIN_ONLY); + app_global_get_ex + assert // check GlobalState exists + == + assert // admin only + // smart_contracts/abstracted_account/contract.algo.ts:35 + // namedPlugins = BoxMap({ keyPrefix: AbstractAccountBoxPrefixNamedPlugins }); + bytec 16 // "n" + swap + concat + // smart_contracts/abstracted_account/contract.algo.ts:848 + // assert(this.namedPlugins(name).exists, ERR_PLUGIN_DOES_NOT_EXIST); + dup + box_len + bury 1 + assert // plugin does not exist + // smart_contracts/abstracted_account/contract.algo.ts:849 + // const app = clone(this.namedPlugins(name).value) + dup + box_get + pop + dup + cover 2 + // smart_contracts/abstracted_account/contract.algo.ts:33 + // plugins = BoxMap({ keyPrefix: AbstractAccountBoxPrefixPlugins }); + bytec 4 // "p" + swap + concat + // smart_contracts/abstracted_account/contract.algo.ts:850 + // assert(this.plugins(app).exists, ERR_PLUGIN_DOES_NOT_EXIST); + dup + box_len + bury 1 + assert // plugin does not exist + // smart_contracts/abstracted_account/contract.algo.ts:852 + // const methodsLength: uint64 = this.plugins(app).value.methods.length + dup + pushint 44 // 44 + intc_2 // 2 + box_extract + btoi + cover 2 + // smart_contracts/abstracted_account/contract.algo.ts:854 + // this.namedPlugins(name).delete(); + swap + box_del + pop + // smart_contracts/abstracted_account/contract.algo.ts:855 + // this.plugins(app).delete(); + box_del + pop + // smart_contracts/abstracted_account/contract.algo.ts:857 + // if (this.controlledAddress.value !== Global.currentApplicationAddress) { + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:18 + // controlledAddress = GlobalState({ key: AbstractAccountGlobalStateKeysControlledAddress }); + bytec_0 // "controlled_address" + // smart_contracts/abstracted_account/contract.algo.ts:857 + // if (this.controlledAddress.value !== Global.currentApplicationAddress) { + app_global_get_ex + assert // check GlobalState exists + global CurrentApplicationAddress + != + bz arc58_removeNamedPlugin_after_if_else@4 + // smart_contracts/abstracted_account/contract.algo.ts:858-863 + // itxn + // .payment({ + // receiver: this.controlledAddress.value, + // amount: this.namedPluginsMbr(name) + this.pluginsMbr(app.escrow, methodsLength) + // }) + // .submit() + itxn_begin + // smart_contracts/abstracted_account/contract.algo.ts:860 + // receiver: this.controlledAddress.value, + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:18 + // controlledAddress = GlobalState({ key: AbstractAccountGlobalStateKeysControlledAddress }); + bytec_0 // "controlled_address" + // smart_contracts/abstracted_account/contract.algo.ts:860 + // receiver: this.controlledAddress.value, + app_global_get_ex + assert // check GlobalState exists + // smart_contracts/abstracted_account/contract.algo.ts:58 + // return MinNamedPluginMBR + (BoxCostPerByte * Bytes(name).length); + dig 3 + len + intc 4 // 400 + * + intc 5 // 21700 + + + // smart_contracts/abstracted_account/contract.algo.ts:861 + // amount: this.namedPluginsMbr(name) + this.pluginsMbr(app.escrow, methodsLength) + dig 3 + dup + pushint 40 // 40 + extract_uint16 + dig 1 + len + substring3 + extract 2 0 + dig 3 + callsub pluginsMbr + + + itxn_field Amount + itxn_field Receiver + // smart_contracts/abstracted_account/contract.algo.ts:858-862 + // itxn + // .payment({ + // receiver: this.controlledAddress.value, + // amount: this.namedPluginsMbr(name) + this.pluginsMbr(app.escrow, methodsLength) + // }) + intc_1 // 1 + itxn_field TypeEnum + intc_0 // 0 + itxn_field Fee + // smart_contracts/abstracted_account/contract.algo.ts:858-863 + // itxn + // .payment({ + // receiver: this.controlledAddress.value, + // amount: this.namedPluginsMbr(name) + this.pluginsMbr(app.escrow, methodsLength) + // }) + // .submit() + itxn_submit + +arc58_removeNamedPlugin_after_if_else@4: + // smart_contracts/abstracted_account/contract.algo.ts:20 + // lastUserInteraction = GlobalState({ key: AbstractAccountGlobalStateKeysLastUserInteraction }) + bytec_3 // "last_user_interaction" + // smart_contracts/abstracted_account/contract.algo.ts:44 + // this.lastUserInteraction.value = Global.latestTimestamp + global LatestTimestamp + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:22 + // lastChange = GlobalState({ key: AbstractAccountGlobalStateKeysLastChange }) + bytec 6 // "last_change" + // smart_contracts/abstracted_account/contract.algo.ts:48 + // this.lastChange.value = Global.latestTimestamp + global LatestTimestamp + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:846 + // arc58_removeNamedPlugin(name: string): void { + intc_1 // 1 + return + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_newEscrow[routing]() -> void: +arc58_newEscrow: + // smart_contracts/abstracted_account/contract.algo.ts:875 + // arc58_newEscrow(escrow: string): uint64 { + txna ApplicationArgs 1 + dup + intc_0 // 0 + extract_uint16 + intc_2 // 2 + + + dig 1 + len + == + assert // invalid number of bytes for (len+utf8[]) + extract 2 0 + // smart_contracts/abstracted_account/contract.algo.ts:876 + // assert(Txn.sender === this.admin.value, ERR_ADMIN_ONLY); + txn Sender + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:16 + // admin = GlobalState({ key: AbstractAccountGlobalStateKeysAdmin }) + bytec_2 // "admin" + // smart_contracts/abstracted_account/contract.algo.ts:876 + // assert(Txn.sender === this.admin.value, ERR_ADMIN_ONLY); + app_global_get_ex + assert // check GlobalState exists + == + assert // admin only + // smart_contracts/abstracted_account/contract.algo.ts:37 + // escrows = BoxMap({ keyPrefix: AbstractAccountBoxPrefixEscrows }) + bytec 5 // "e" + dig 1 + concat + // smart_contracts/abstracted_account/contract.algo.ts:877 + // assert(!this.escrows(escrow).exists, ERR_ESCROW_ALREADY_EXISTS); + box_len + bury 1 + ! + assert // escrow already exists + // smart_contracts/abstracted_account/contract.algo.ts:878 + // assert(escrow !== '', ERR_ESCROW_NAME_REQUIRED); + dup + bytec_1 // "" + != + assert // Escrow name is required + // smart_contracts/abstracted_account/contract.algo.ts:879 + // return this.newEscrow(escrow); + callsub newEscrow + // smart_contracts/abstracted_account/contract.algo.ts:875 + // arc58_newEscrow(escrow: string): uint64 { + itob + bytec 7 // 0x151f7c75 + swap + concat + log + intc_1 // 1 + return + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_toggleEscrowLock[routing]() -> void: +arc58_toggleEscrowLock: + // smart_contracts/abstracted_account/contract.algo.ts:887 + // arc58_toggleEscrowLock(escrow: string): EscrowInfo { + txna ApplicationArgs 1 + dup + intc_0 // 0 + extract_uint16 + intc_2 // 2 + + + dig 1 + len + == + assert // invalid number of bytes for (len+utf8[]) + extract 2 0 + // smart_contracts/abstracted_account/contract.algo.ts:888 + // assert(Txn.sender === this.admin.value, ERR_ADMIN_ONLY); + txn Sender + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:16 + // admin = GlobalState({ key: AbstractAccountGlobalStateKeysAdmin }) + bytec_2 // "admin" + // smart_contracts/abstracted_account/contract.algo.ts:888 + // assert(Txn.sender === this.admin.value, ERR_ADMIN_ONLY); + app_global_get_ex + assert // check GlobalState exists + == + assert // admin only + // smart_contracts/abstracted_account/contract.algo.ts:37 + // escrows = BoxMap({ keyPrefix: AbstractAccountBoxPrefixEscrows }) + bytec 5 // "e" + swap + concat + // smart_contracts/abstracted_account/contract.algo.ts:889 + // assert(this.escrows(escrow).exists, ERR_ESCROW_DOES_NOT_EXIST); + dup + box_len + bury 1 + assert // escrow does not exist + // smart_contracts/abstracted_account/contract.algo.ts:891 + // this.escrows(escrow).value.locked = !this.escrows(escrow).value.locked; + dup + box_get + pop + pushint 64 // 64 + getbit + ! + dig 1 + intc_3 // 8 + intc_1 // 1 + box_extract + intc_0 // 0 + uncover 2 + setbit + dig 1 + intc_3 // 8 + uncover 2 + box_replace + // smart_contracts/abstracted_account/contract.algo.ts:20 + // lastUserInteraction = GlobalState({ key: AbstractAccountGlobalStateKeysLastUserInteraction }) + bytec_3 // "last_user_interaction" + // smart_contracts/abstracted_account/contract.algo.ts:44 + // this.lastUserInteraction.value = Global.latestTimestamp + global LatestTimestamp + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:22 + // lastChange = GlobalState({ key: AbstractAccountGlobalStateKeysLastChange }) + bytec 6 // "last_change" + // smart_contracts/abstracted_account/contract.algo.ts:48 + // this.lastChange.value = Global.latestTimestamp + global LatestTimestamp + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:896 + // return this.escrows(escrow).value; + box_get + pop + // smart_contracts/abstracted_account/contract.algo.ts:887 + // arc58_toggleEscrowLock(escrow: string): EscrowInfo { + bytec 7 // 0x151f7c75 + swap + concat + log + intc_1 // 1 + return + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_reclaim[routing]() -> void: +arc58_reclaim: + intc_0 // 0 + dup + bytec_1 // "" + dupn 4 + // smart_contracts/abstracted_account/contract.algo.ts:905 + // arc58_reclaim(escrow: string, reclaims: EscrowReclaim[]): void { + txna ApplicationArgs 1 + dup + intc_0 // 0 + extract_uint16 + intc_2 // 2 + + + dig 1 + len + == + assert // invalid number of bytes for (len+utf8[]) + extract 2 0 + txna ApplicationArgs 2 + dup + cover 2 + dup + intc_0 // 0 + extract_uint16 + dup + cover 3 + pushint 17 // 17 + * + intc_2 // 2 + + + swap + len + == + assert // invalid number of bytes for (len+(uint64,uint64,bool1)[]) + intc_0 // 0 + swap + intc_0 // 0 + swap + // smart_contracts/abstracted_account/contract.algo.ts:906 + // assert(Txn.sender === this.admin.value, ERR_FORBIDDEN); + txn Sender + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:16 + // admin = GlobalState({ key: AbstractAccountGlobalStateKeysAdmin }) + bytec_2 // "admin" + // smart_contracts/abstracted_account/contract.algo.ts:906 + // assert(Txn.sender === this.admin.value, ERR_FORBIDDEN); + app_global_get_ex + assert // check GlobalState exists + == + assert // forbidden + // smart_contracts/abstracted_account/contract.algo.ts:37 + // escrows = BoxMap({ keyPrefix: AbstractAccountBoxPrefixEscrows }) + bytec 5 // "e" + swap + concat + // smart_contracts/abstracted_account/contract.algo.ts:907 + // assert(this.escrows(escrow).exists, ERR_ESCROW_DOES_NOT_EXIST); + dup + box_len + bury 1 + assert // escrow does not exist + // smart_contracts/abstracted_account/contract.algo.ts:908 + // const sender = Application(this.escrows(escrow).value.id).address + box_get + pop + intc_0 // 0 + extract_uint64 + app_params_get AppAddress + assert // application exists + // smart_contracts/abstracted_account/contract.algo.ts:910 + // for (let i: uint64 = 0; i < reclaims.length; i += 1) { + intc_0 // 0 + +arc58_reclaim_while_top@2: + // smart_contracts/abstracted_account/contract.algo.ts:910 + // for (let i: uint64 = 0; i < reclaims.length; i += 1) { + dup + dig 5 + < + bz arc58_reclaim_after_while@17 + // smart_contracts/abstracted_account/contract.algo.ts:911 + // if (reclaims[i].asset === 0) { + dig 5 + extract 2 0 + dig 1 + pushint 17 // 17 + * + pushint 17 // 17 + extract3 // on error: index access is out of bounds + dup + intc_0 // 0 + extract_uint64 + dup + bury 12 + bnz arc58_reclaim_else_body@10 + // smart_contracts/abstracted_account/contract.algo.ts:914 + // receiver: this.controlledAddress.value, + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:18 + // controlledAddress = GlobalState({ key: AbstractAccountGlobalStateKeysControlledAddress }); + bytec_0 // "controlled_address" + // smart_contracts/abstracted_account/contract.algo.ts:914 + // receiver: this.controlledAddress.value, + app_global_get_ex + swap + bury 15 + assert // check GlobalState exists + // smart_contracts/abstracted_account/contract.algo.ts:915 + // amount: reclaims[i].amount + dup + intc_3 // 8 + extract_uint64 + bury 10 + // smart_contracts/abstracted_account/contract.algo.ts:912 + // const pmt = itxn.payment({ + intc_0 // 0 + bury 12 + // smart_contracts/abstracted_account/contract.algo.ts:918 + // if (reclaims[i].closeOut) { + pushint 128 // 128 + getbit + bz arc58_reclaim_after_if_else@6 + // smart_contracts/abstracted_account/contract.algo.ts:919 + // pmt.set({ closeRemainderTo: this.controlledAddress.value }); + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:18 + // controlledAddress = GlobalState({ key: AbstractAccountGlobalStateKeysControlledAddress }); + bytec_0 // "controlled_address" + // smart_contracts/abstracted_account/contract.algo.ts:919 + // pmt.set({ closeRemainderTo: this.controlledAddress.value }); + app_global_get_ex + assert // check GlobalState exists + intc_1 // 1 + bury 12 + bury 3 + +arc58_reclaim_after_if_else@6: + // smart_contracts/abstracted_account/contract.algo.ts:922 + // pmt.submit(); + itxn_begin + dig 10 + bz arc58_reclaim_next_field@8 + dig 2 + itxn_field CloseRemainderTo + +arc58_reclaim_next_field@8: + dig 8 + itxn_field Amount + dig 12 + itxn_field Receiver + dig 1 + itxn_field Sender + // smart_contracts/abstracted_account/contract.algo.ts:912-916 + // const pmt = itxn.payment({ + // sender, + // receiver: this.controlledAddress.value, + // amount: reclaims[i].amount + // }) + intc_1 // 1 + itxn_field TypeEnum + intc_0 // 0 + itxn_field Fee + // smart_contracts/abstracted_account/contract.algo.ts:922 + // pmt.submit(); + itxn_submit + +arc58_reclaim_after_if_else@16: + // smart_contracts/abstracted_account/contract.algo.ts:910 + // for (let i: uint64 = 0; i < reclaims.length; i += 1) { + dup + intc_1 // 1 + + + bury 1 + b arc58_reclaim_while_top@2 + +arc58_reclaim_else_body@10: + // smart_contracts/abstracted_account/contract.algo.ts:926 + // assetReceiver: this.controlledAddress.value, + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:18 + // controlledAddress = GlobalState({ key: AbstractAccountGlobalStateKeysControlledAddress }); + bytec_0 // "controlled_address" + // smart_contracts/abstracted_account/contract.algo.ts:926 + // assetReceiver: this.controlledAddress.value, + app_global_get_ex + swap + bury 14 + assert // check GlobalState exists + // smart_contracts/abstracted_account/contract.algo.ts:927 + // assetAmount: reclaims[i].amount, + dup + intc_3 // 8 + extract_uint64 + bury 9 + // smart_contracts/abstracted_account/contract.algo.ts:924 + // const xfer = itxn.assetTransfer({ + intc_0 // 0 + bury 8 + // smart_contracts/abstracted_account/contract.algo.ts:931 + // if (reclaims[i].closeOut) { + pushint 128 // 128 + getbit + bz arc58_reclaim_after_if_else@12 + // smart_contracts/abstracted_account/contract.algo.ts:932 + // xfer.set({ assetCloseTo: this.controlledAddress.value }); + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:18 + // controlledAddress = GlobalState({ key: AbstractAccountGlobalStateKeysControlledAddress }); + bytec_0 // "controlled_address" + // smart_contracts/abstracted_account/contract.algo.ts:932 + // xfer.set({ assetCloseTo: this.controlledAddress.value }); + app_global_get_ex + assert // check GlobalState exists + intc_1 // 1 + bury 8 + bury 4 + +arc58_reclaim_after_if_else@12: + // smart_contracts/abstracted_account/contract.algo.ts:935 + // xfer.submit(); + itxn_begin + dig 6 + bz arc58_reclaim_next_field@14 + dig 3 + itxn_field AssetCloseTo + +arc58_reclaim_next_field@14: + dig 9 + itxn_field XferAsset + dig 7 + itxn_field AssetAmount + dig 11 + itxn_field AssetReceiver + dig 1 + itxn_field Sender + // smart_contracts/abstracted_account/contract.algo.ts:924-929 + // const xfer = itxn.assetTransfer({ + // sender, + // assetReceiver: this.controlledAddress.value, + // assetAmount: reclaims[i].amount, + // xferAsset: reclaims[i].asset + // }) + pushint 4 // 4 + itxn_field TypeEnum + intc_0 // 0 + itxn_field Fee + // smart_contracts/abstracted_account/contract.algo.ts:935 + // xfer.submit(); + itxn_submit + b arc58_reclaim_after_if_else@16 + +arc58_reclaim_after_while@17: + // smart_contracts/abstracted_account/contract.algo.ts:905 + // arc58_reclaim(escrow: string, reclaims: EscrowReclaim[]): void { + intc_1 // 1 + return + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_optinEscrow[routing]() -> void: +arc58_optinEscrow: + // smart_contracts/abstracted_account/contract.algo.ts:946 + // arc58_optinEscrow(escrow: string, assets: uint64[]): void { + txna ApplicationArgs 1 + dup + intc_0 // 0 + extract_uint16 + intc_2 // 2 + + + dig 1 + len + == + assert // invalid number of bytes for (len+utf8[]) + extract 2 0 + dup + txna ApplicationArgs 2 + dup + cover 2 + dup + intc_0 // 0 + extract_uint16 + dup + cover 3 + dup + intc_3 // 8 + * + intc_2 // 2 + + + uncover 2 + len + == + assert // invalid number of bytes for (len+uint64[]) + // smart_contracts/abstracted_account/contract.algo.ts:947 + // assert(Txn.sender === this.admin.value, ERR_FORBIDDEN); + txn Sender + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:16 + // admin = GlobalState({ key: AbstractAccountGlobalStateKeysAdmin }) + bytec_2 // "admin" + // smart_contracts/abstracted_account/contract.algo.ts:947 + // assert(Txn.sender === this.admin.value, ERR_FORBIDDEN); + app_global_get_ex + assert // check GlobalState exists + == + assert // forbidden + // smart_contracts/abstracted_account/contract.algo.ts:37 + // escrows = BoxMap({ keyPrefix: AbstractAccountBoxPrefixEscrows }) + bytec 5 // "e" + uncover 2 + concat + // smart_contracts/abstracted_account/contract.algo.ts:948 + // assert(this.escrows(escrow).exists, ERR_ESCROW_DOES_NOT_EXIST) + dup + box_len + bury 1 + assert // escrow does not exist + // smart_contracts/abstracted_account/contract.algo.ts:949 + // const escrowID = this.escrows(escrow).value.id + box_get + pop + dup + intc_0 // 0 + extract_uint64 + // smart_contracts/abstracted_account/contract.algo.ts:950 + // const escrowAddress = Application(escrowID).address + app_params_get AppAddress + swap + dup + cover 3 + cover 4 + assert // application exists + // smart_contracts/abstracted_account/contract.algo.ts:951 + // assert(!this.escrows(escrow).value.locked, ERR_ESCROW_LOCKED) + pushint 64 // 64 + getbit + ! + assert // Escrow is locked + // smart_contracts/abstracted_account/contract.algo.ts:953-959 + // itxn + // .payment({ + // sender: this.controlledAddress.value, + // receiver: escrowAddress, + // amount: Global.assetOptInMinBalance * assets.length + // }) + // .submit(); + itxn_begin + // smart_contracts/abstracted_account/contract.algo.ts:955 + // sender: this.controlledAddress.value, + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:18 + // controlledAddress = GlobalState({ key: AbstractAccountGlobalStateKeysControlledAddress }); + bytec_0 // "controlled_address" + // smart_contracts/abstracted_account/contract.algo.ts:955 + // sender: this.controlledAddress.value, + app_global_get_ex + assert // check GlobalState exists + // smart_contracts/abstracted_account/contract.algo.ts:957 + // amount: Global.assetOptInMinBalance * assets.length + global AssetOptInMinBalance + uncover 3 + * + itxn_field Amount + itxn_field Sender + itxn_field Receiver + // smart_contracts/abstracted_account/contract.algo.ts:953-958 + // itxn + // .payment({ + // sender: this.controlledAddress.value, + // receiver: escrowAddress, + // amount: Global.assetOptInMinBalance * assets.length + // }) + intc_1 // 1 + itxn_field TypeEnum + intc_0 // 0 + itxn_field Fee + // smart_contracts/abstracted_account/contract.algo.ts:953-959 + // itxn + // .payment({ + // sender: this.controlledAddress.value, + // receiver: escrowAddress, + // amount: Global.assetOptInMinBalance * assets.length + // }) + // .submit(); + itxn_submit + // smart_contracts/abstracted_account/contract.algo.ts:961 + // for (let i: uint64 = 0; i < assets.length; i += 1) { + intc_0 // 0 + +arc58_optinEscrow_while_top@3: + // smart_contracts/abstracted_account/contract.algo.ts:961 + // for (let i: uint64 = 0; i < assets.length; i += 1) { + dup + dig 3 + < + bz arc58_optinEscrow_after_while@6 + // smart_contracts/abstracted_account/contract.algo.ts:963 + // this.allowances({ escrow, asset: assets[i] }).exists, + dig 3 + extract 2 0 + dig 1 + dup + cover 2 + intc_3 // 8 + * + extract_uint64 + dig 6 + dup + len + itob + extract 6 2 + swap + concat + dig 1 + itob + bytec 13 // 0x000a + swap + concat + swap + concat + // smart_contracts/abstracted_account/contract.algo.ts:39 + // allowances = BoxMap({ keyPrefix: AbstractAccountBoxPrefixAllowances }) // 38_500 + bytec 14 // "a" + swap + concat + // smart_contracts/abstracted_account/contract.algo.ts:963 + // this.allowances({ escrow, asset: assets[i] }).exists, + box_len + bury 1 + // smart_contracts/abstracted_account/contract.algo.ts:962-965 + // assert( + // this.allowances({ escrow, asset: assets[i] }).exists, + // ERR_ALLOWANCE_DOES_NOT_EXIST + // ); + assert // allowance does not exist + // smart_contracts/abstracted_account/contract.algo.ts:967-974 + // itxn + // .assetTransfer({ + // sender: escrowAddress, + // assetReceiver: escrowAddress, + // assetAmount: 0, + // xferAsset: assets[i] + // }) + // .submit(); + itxn_begin + itxn_field XferAsset + // smart_contracts/abstracted_account/contract.algo.ts:971 + // assetAmount: 0, + intc_0 // 0 + itxn_field AssetAmount + dig 2 + dup + itxn_field AssetReceiver + itxn_field Sender + // smart_contracts/abstracted_account/contract.algo.ts:967-973 + // itxn + // .assetTransfer({ + // sender: escrowAddress, + // assetReceiver: escrowAddress, + // assetAmount: 0, + // xferAsset: assets[i] + // }) + pushint 4 // 4 + itxn_field TypeEnum + intc_0 // 0 + itxn_field Fee + // smart_contracts/abstracted_account/contract.algo.ts:967-974 + // itxn + // .assetTransfer({ + // sender: escrowAddress, + // assetReceiver: escrowAddress, + // assetAmount: 0, + // xferAsset: assets[i] + // }) + // .submit(); + itxn_submit + // smart_contracts/abstracted_account/contract.algo.ts:961 + // for (let i: uint64 = 0; i < assets.length; i += 1) { + intc_1 // 1 + + + bury 1 + b arc58_optinEscrow_while_top@3 + +arc58_optinEscrow_after_while@6: + // smart_contracts/abstracted_account/contract.algo.ts:946 + // arc58_optinEscrow(escrow: string, assets: uint64[]): void { + intc_1 // 1 + return + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_pluginOptinEscrow[routing]() -> void: +arc58_pluginOptinEscrow: + intc_0 // 0 + bytec_1 // "" + // smart_contracts/abstracted_account/contract.algo.ts:986-992 + // arc58_pluginOptinEscrow( + // plugin: uint64, + // caller: Address, + // escrow: string, + // assets: uint64[], + // mbrPayment: gtxn.PaymentTxn + // ): void { + txna ApplicationArgs 1 + dup + len + intc_3 // 8 + == + assert // invalid number of bytes for uint64 + btoi + txna ApplicationArgs 2 + dup + cover 2 + dup + len + pushint 32 // 32 + == + assert // invalid number of bytes for uint8[32] + txna ApplicationArgs 3 + dup + intc_0 // 0 + extract_uint16 + intc_2 // 2 + + + dig 1 + len + == + assert // invalid number of bytes for (len+utf8[]) + extract 2 0 + txna ApplicationArgs 4 + dup + cover 4 + dup + intc_0 // 0 + extract_uint16 + dup + cover 5 + intc_3 // 8 + * + intc_2 // 2 + + + swap + len + == + assert // invalid number of bytes for (len+uint64[]) + txn GroupIndex + intc_1 // 1 + - + dup + cover 4 + gtxns TypeEnum + intc_1 // pay + == + assert // transaction type is pay + // smart_contracts/abstracted_account/contract.algo.ts:993 + // const key: PluginKey = { plugin, caller: caller.native, escrow } + dig 2 + itob + uncover 2 + concat + dig 1 + len + itob + extract 6 2 + dig 2 + concat + dup + cover 4 + swap + bytec 12 // 0x002a + concat + swap + concat + // smart_contracts/abstracted_account/contract.algo.ts:33 + // plugins = BoxMap({ keyPrefix: AbstractAccountBoxPrefixPlugins }); + bytec 4 // "p" + swap + concat + // smart_contracts/abstracted_account/contract.algo.ts:995 + // assert(this.plugins(key).exists, ERR_PLUGIN_DOES_NOT_EXIST) + box_len + bury 1 + assert // plugin does not exist + // smart_contracts/abstracted_account/contract.algo.ts:37 + // escrows = BoxMap({ keyPrefix: AbstractAccountBoxPrefixEscrows }) + bytec 5 // "e" + swap + concat + // smart_contracts/abstracted_account/contract.algo.ts:996 + // assert(this.escrows(escrow).exists, ERR_ESCROW_DOES_NOT_EXIST) + dup + box_len + bury 1 + assert // escrow does not exist + // smart_contracts/abstracted_account/contract.algo.ts:997 + // assert(!this.escrows(escrow).value.locked, ERR_ESCROW_LOCKED) + box_get + pop + dup + pushint 64 // 64 + getbit + ! + assert // Escrow is locked + // smart_contracts/abstracted_account/contract.algo.ts:999 + // const escrowID = this.escrows(escrow).value.id + intc_0 // 0 + extract_uint64 + swap + // smart_contracts/abstracted_account/contract.algo.ts:1002 + // Txn.sender === Application(plugin).address || + txn Sender + swap + app_params_get AppAddress + assert // application exists + == + // smart_contracts/abstracted_account/contract.algo.ts:1002-1003 + // Txn.sender === Application(plugin).address || + // Txn.sender === caller.native || + bnz arc58_pluginOptinEscrow_bool_true@4 + // smart_contracts/abstracted_account/contract.algo.ts:1003 + // Txn.sender === caller.native || + txn Sender + dig 6 + == + // smart_contracts/abstracted_account/contract.algo.ts:1002-1003 + // Txn.sender === Application(plugin).address || + // Txn.sender === caller.native || + bnz arc58_pluginOptinEscrow_bool_true@4 + // smart_contracts/abstracted_account/contract.algo.ts:1004 + // caller.native === Global.zeroAddress, + dig 5 + global ZeroAddress + == + // smart_contracts/abstracted_account/contract.algo.ts:1002-1004 + // Txn.sender === Application(plugin).address || + // Txn.sender === caller.native || + // caller.native === Global.zeroAddress, + bz arc58_pluginOptinEscrow_bool_false@5 + +arc58_pluginOptinEscrow_bool_true@4: + intc_1 // 1 + +arc58_pluginOptinEscrow_bool_merge@6: + // smart_contracts/abstracted_account/contract.algo.ts:1001-1006 + // assert( + // Txn.sender === Application(plugin).address || + // Txn.sender === caller.native || + // caller.native === Global.zeroAddress, + // ERR_FORBIDDEN + // ) + assert // forbidden + // smart_contracts/abstracted_account/contract.algo.ts:1008 + // const escrowAddress = Application(escrowID).address + dup + app_params_get AppAddress + swap + dup + cover 2 + bury 10 + assert // application exists + // smart_contracts/abstracted_account/contract.algo.ts:1010-1017 + // assertMatch( + // mbrPayment, + // { + // receiver: this.controlledAddress.value, + // amount: Global.assetOptInMinBalance * assets.length + // }, + // ERR_INVALID_PAYMENT + // ) + dig 3 + dup + gtxns Receiver + // smart_contracts/abstracted_account/contract.algo.ts:1013 + // receiver: this.controlledAddress.value, + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:18 + // controlledAddress = GlobalState({ key: AbstractAccountGlobalStateKeysControlledAddress }); + bytec_0 // "controlled_address" + // smart_contracts/abstracted_account/contract.algo.ts:1013 + // receiver: this.controlledAddress.value, + app_global_get_ex + assert // check GlobalState exists + // smart_contracts/abstracted_account/contract.algo.ts:1010-1017 + // assertMatch( + // mbrPayment, + // { + // receiver: this.controlledAddress.value, + // amount: Global.assetOptInMinBalance * assets.length + // }, + // ERR_INVALID_PAYMENT + // ) + swap + dig 1 + == + uncover 2 + gtxns Amount + // smart_contracts/abstracted_account/contract.algo.ts:1014 + // amount: Global.assetOptInMinBalance * assets.length + global AssetOptInMinBalance + dig 8 + dup + cover 4 + * + // smart_contracts/abstracted_account/contract.algo.ts:1010-1017 + // assertMatch( + // mbrPayment, + // { + // receiver: this.controlledAddress.value, + // amount: Global.assetOptInMinBalance * assets.length + // }, + // ERR_INVALID_PAYMENT + // ) + == + && + assert // invalid payment + // smart_contracts/abstracted_account/contract.algo.ts:1019-1025 + // itxn + // .payment({ + // sender: this.controlledAddress.value, + // receiver: escrowAddress, + // amount: Global.assetOptInMinBalance * assets.length + // }) + // .submit(); + itxn_begin + // smart_contracts/abstracted_account/contract.algo.ts:1023 + // amount: Global.assetOptInMinBalance * assets.length + global AssetOptInMinBalance + * + itxn_field Amount + itxn_field Sender + itxn_field Receiver + // smart_contracts/abstracted_account/contract.algo.ts:1019-1024 + // itxn + // .payment({ + // sender: this.controlledAddress.value, + // receiver: escrowAddress, + // amount: Global.assetOptInMinBalance * assets.length + // }) + intc_1 // 1 + itxn_field TypeEnum + intc_0 // 0 + itxn_field Fee + // smart_contracts/abstracted_account/contract.algo.ts:1019-1025 + // itxn + // .payment({ + // sender: this.controlledAddress.value, + // receiver: escrowAddress, + // amount: Global.assetOptInMinBalance * assets.length + // }) + // .submit(); + itxn_submit + // smart_contracts/abstracted_account/contract.algo.ts:1027 + // for (let i: uint64 = 0; i < assets.length; i += 1) { + intc_0 // 0 + bury 7 + +arc58_pluginOptinEscrow_while_top@8: + // smart_contracts/abstracted_account/contract.algo.ts:1027 + // for (let i: uint64 = 0; i < assets.length; i += 1) { + dig 6 + dig 4 + < + bz arc58_pluginOptinEscrow_after_while@11 + // smart_contracts/abstracted_account/contract.algo.ts:1029 + // this.allowances({ escrow, asset: assets[i] }).exists, + dig 4 + extract 2 0 + dig 7 + dup + cover 2 + intc_3 // 8 + * + extract_uint64 + dup + itob + bytec 13 // 0x000a + swap + concat + dig 4 + concat + // smart_contracts/abstracted_account/contract.algo.ts:39 + // allowances = BoxMap({ keyPrefix: AbstractAccountBoxPrefixAllowances }) // 38_500 + bytec 14 // "a" + swap + concat + // smart_contracts/abstracted_account/contract.algo.ts:1029 + // this.allowances({ escrow, asset: assets[i] }).exists, + box_len + bury 1 + // smart_contracts/abstracted_account/contract.algo.ts:1028-1031 + // assert( + // this.allowances({ escrow, asset: assets[i] }).exists, + // ERR_ALLOWANCE_DOES_NOT_EXIST + // ); + assert // allowance does not exist + // smart_contracts/abstracted_account/contract.algo.ts:1033-1040 + // itxn + // .assetTransfer({ + // sender: escrowAddress, + // assetReceiver: escrowAddress, + // assetAmount: 0, + // xferAsset: assets[i] + // }) + // .submit(); + itxn_begin + itxn_field XferAsset + // smart_contracts/abstracted_account/contract.algo.ts:1037 + // assetAmount: 0, + intc_0 // 0 + itxn_field AssetAmount + dig 8 + dup + itxn_field AssetReceiver + itxn_field Sender + // smart_contracts/abstracted_account/contract.algo.ts:1033-1039 + // itxn + // .assetTransfer({ + // sender: escrowAddress, + // assetReceiver: escrowAddress, + // assetAmount: 0, + // xferAsset: assets[i] + // }) + pushint 4 // 4 + itxn_field TypeEnum + intc_0 // 0 + itxn_field Fee + // smart_contracts/abstracted_account/contract.algo.ts:1033-1040 + // itxn + // .assetTransfer({ + // sender: escrowAddress, + // assetReceiver: escrowAddress, + // assetAmount: 0, + // xferAsset: assets[i] + // }) + // .submit(); + itxn_submit + // smart_contracts/abstracted_account/contract.algo.ts:1027 + // for (let i: uint64 = 0; i < assets.length; i += 1) { + intc_1 // 1 + + + bury 7 + b arc58_pluginOptinEscrow_while_top@8 + +arc58_pluginOptinEscrow_after_while@11: + // smart_contracts/abstracted_account/contract.algo.ts:986-992 + // arc58_pluginOptinEscrow( + // plugin: uint64, + // caller: Address, + // escrow: string, + // assets: uint64[], + // mbrPayment: gtxn.PaymentTxn + // ): void { + intc_1 // 1 + return + +arc58_pluginOptinEscrow_bool_false@5: + intc_0 // 0 + b arc58_pluginOptinEscrow_bool_merge@6 + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_addAllowances[routing]() -> void: +arc58_addAllowances: + intc_0 // 0 + dupn 4 + bytec_1 // "" + dup + // smart_contracts/abstracted_account/contract.algo.ts:1050 + // arc58_addAllowances(escrow: string, allowances: AddAllowanceInfo[]): void { + txna ApplicationArgs 1 + dup + intc_0 // 0 + extract_uint16 + intc_2 // 2 + + + dig 1 + len + == + assert // invalid number of bytes for (len+utf8[]) + extract 2 0 + dup + txna ApplicationArgs 2 + dup + cover 2 + dup + intc_0 // 0 + extract_uint16 + dup + cover 3 + pushint 34 // 34 + * + intc_2 // 2 + + + swap + len + == + assert // invalid number of bytes for (len+(uint64,uint8,uint64,uint64,uint64,bool1)[]) + // smart_contracts/abstracted_account/contract.algo.ts:1051 + // assert(Txn.sender === this.admin.value, ERR_ADMIN_ONLY); + txn Sender + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:16 + // admin = GlobalState({ key: AbstractAccountGlobalStateKeysAdmin }) + bytec_2 // "admin" + // smart_contracts/abstracted_account/contract.algo.ts:1051 + // assert(Txn.sender === this.admin.value, ERR_ADMIN_ONLY); + app_global_get_ex + assert // check GlobalState exists + == + assert // admin only + // smart_contracts/abstracted_account/contract.algo.ts:37 + // escrows = BoxMap({ keyPrefix: AbstractAccountBoxPrefixEscrows }) + bytec 5 // "e" + swap + concat + // smart_contracts/abstracted_account/contract.algo.ts:1052 + // assert(this.escrows(escrow).exists, ERR_ESCROW_DOES_NOT_EXIST); + dup + box_len + bury 1 + assert // escrow does not exist + // smart_contracts/abstracted_account/contract.algo.ts:1053 + // assert(!this.escrows(escrow).value.locked, ERR_ESCROW_LOCKED); + box_get + pop + pushint 64 // 64 + getbit + ! + assert // Escrow is locked + // smart_contracts/abstracted_account/contract.algo.ts:1055 + // if (this.controlledAddress.value !== Global.currentApplicationAddress) { + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:18 + // controlledAddress = GlobalState({ key: AbstractAccountGlobalStateKeysControlledAddress }); + bytec_0 // "controlled_address" + // smart_contracts/abstracted_account/contract.algo.ts:1055 + // if (this.controlledAddress.value !== Global.currentApplicationAddress) { + app_global_get_ex + assert // check GlobalState exists + global CurrentApplicationAddress + != + bz arc58_addAllowances_after_if_else@4 + // smart_contracts/abstracted_account/contract.algo.ts:1056-1062 + // itxn + // .payment({ + // sender: this.controlledAddress.value, + // receiver: Global.currentApplicationAddress, + // amount: this.allowancesMbr(escrow) * allowances.length + // }) + // .submit() + itxn_begin + // smart_contracts/abstracted_account/contract.algo.ts:1058 + // sender: this.controlledAddress.value, + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:18 + // controlledAddress = GlobalState({ key: AbstractAccountGlobalStateKeysControlledAddress }); + bytec_0 // "controlled_address" + // smart_contracts/abstracted_account/contract.algo.ts:1058 + // sender: this.controlledAddress.value, + app_global_get_ex + assert // check GlobalState exists + // smart_contracts/abstracted_account/contract.algo.ts:1059 + // receiver: Global.currentApplicationAddress, + global CurrentApplicationAddress + // smart_contracts/abstracted_account/contract.algo.ts:66 + // return MinAllowanceMBR + (BoxCostPerByte * Bytes(escrow).length); + dig 4 + len + intc 4 // 400 + * + intc 6 // 27700 + + + // smart_contracts/abstracted_account/contract.algo.ts:1060 + // amount: this.allowancesMbr(escrow) * allowances.length + dig 3 + * + itxn_field Amount + itxn_field Receiver + itxn_field Sender + // smart_contracts/abstracted_account/contract.algo.ts:1056-1061 + // itxn + // .payment({ + // sender: this.controlledAddress.value, + // receiver: Global.currentApplicationAddress, + // amount: this.allowancesMbr(escrow) * allowances.length + // }) + intc_1 // 1 + itxn_field TypeEnum + intc_0 // 0 + itxn_field Fee + // smart_contracts/abstracted_account/contract.algo.ts:1056-1062 + // itxn + // .payment({ + // sender: this.controlledAddress.value, + // receiver: Global.currentApplicationAddress, + // amount: this.allowancesMbr(escrow) * allowances.length + // }) + // .submit() + itxn_submit + +arc58_addAllowances_after_if_else@4: + // smart_contracts/abstracted_account/contract.algo.ts:1065 + // for (let i: uint64 = 0; i < allowances.length; i += 1) { + intc_0 // 0 + bury 5 + +arc58_addAllowances_while_top@5: + // smart_contracts/abstracted_account/contract.algo.ts:1065 + // for (let i: uint64 = 0; i < allowances.length; i += 1) { + dig 4 + dig 1 + < + bz arc58_addAllowances_after_while@10 + // smart_contracts/abstracted_account/contract.algo.ts:1066 + // const { asset, type, amount, max, interval, useRounds } = allowances[i]; + dig 1 + extract 2 0 + dig 5 + pushint 34 // 34 + * + pushint 34 // 34 + extract3 // on error: index access is out of bounds + dup + extract 0 8 + dig 1 + extract 8 1 + bury 8 + dig 1 + extract 9 8 + bury 12 + dig 1 + extract 17 8 + bury 11 + dig 1 + extract 25 8 + bury 10 + swap + pushint 264 // 264 + getbit + dup + cover 2 + bury 6 + // smart_contracts/abstracted_account/contract.algo.ts:1067 + // const key: AllowanceKey = { escrow, asset } + dig 4 + dup + len + itob + extract 6 2 + swap + concat + bytec 13 // 0x000a + uncover 2 + concat + swap + concat + // smart_contracts/abstracted_account/contract.algo.ts:39 + // allowances = BoxMap({ keyPrefix: AbstractAccountBoxPrefixAllowances }) // 38_500 + bytec 14 // "a" + swap + concat + dup + bury 9 + // smart_contracts/abstracted_account/contract.algo.ts:1068 + // assert(!this.allowances(key).exists, ERR_ALLOWANCE_ALREADY_EXISTS); + box_len + bury 1 + ! + assert // allowance already exists + // smart_contracts/abstracted_account/contract.algo.ts:1069 + // const start = useRounds ? Global.round : Global.latestTimestamp; + bz arc58_addAllowances_ternary_false@8 + global Round + +arc58_addAllowances_ternary_merge@9: + // smart_contracts/abstracted_account/contract.algo.ts:1071-1080 + // this.allowances(key).value = { + // type, + // spent: 0, + // amount, + // last: 0, + // max, + // interval, + // start, + // useRounds + // } + dig 6 + dig 10 + concat + dig 11 + concat + // smart_contracts/abstracted_account/contract.algo.ts:1073 + // spent: 0, + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:1071-1080 + // this.allowances(key).value = { + // type, + // spent: 0, + // amount, + // last: 0, + // max, + // interval, + // start, + // useRounds + // } + itob + swap + dig 1 + concat + dig 10 + concat + swap + concat + swap + itob + concat + bytec 9 // 0x00 + intc_0 // 0 + dig 6 + setbit + concat + dig 7 + swap + box_put + // smart_contracts/abstracted_account/contract.algo.ts:1065 + // for (let i: uint64 = 0; i < allowances.length; i += 1) { + dig 4 + intc_1 // 1 + + + bury 5 + b arc58_addAllowances_while_top@5 + +arc58_addAllowances_ternary_false@8: + // smart_contracts/abstracted_account/contract.algo.ts:1069 + // const start = useRounds ? Global.round : Global.latestTimestamp; + global LatestTimestamp + b arc58_addAllowances_ternary_merge@9 + +arc58_addAllowances_after_while@10: + // smart_contracts/abstracted_account/contract.algo.ts:20 + // lastUserInteraction = GlobalState({ key: AbstractAccountGlobalStateKeysLastUserInteraction }) + bytec_3 // "last_user_interaction" + // smart_contracts/abstracted_account/contract.algo.ts:44 + // this.lastUserInteraction.value = Global.latestTimestamp + global LatestTimestamp + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:22 + // lastChange = GlobalState({ key: AbstractAccountGlobalStateKeysLastChange }) + bytec 6 // "last_change" + // smart_contracts/abstracted_account/contract.algo.ts:48 + // this.lastChange.value = Global.latestTimestamp + global LatestTimestamp + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:1050 + // arc58_addAllowances(escrow: string, allowances: AddAllowanceInfo[]): void { + intc_1 // 1 + return + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_removeAllowances[routing]() -> void: +arc58_removeAllowances: + bytec_1 // "" + // smart_contracts/abstracted_account/contract.algo.ts:1093 + // arc58_removeAllowances(escrow: string, assets: uint64[]): void { + txna ApplicationArgs 1 + dup + intc_0 // 0 + extract_uint16 + intc_2 // 2 + + + dig 1 + len + == + assert // invalid number of bytes for (len+utf8[]) + extract 2 0 + dup + txna ApplicationArgs 2 + dup + cover 2 + dup + intc_0 // 0 + extract_uint16 + dup + cover 3 + intc_3 // 8 + * + intc_2 // 2 + + + swap + len + == + assert // invalid number of bytes for (len+uint64[]) + // smart_contracts/abstracted_account/contract.algo.ts:1094 + // assert(Txn.sender === this.admin.value, ERR_ADMIN_ONLY); + txn Sender + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:16 + // admin = GlobalState({ key: AbstractAccountGlobalStateKeysAdmin }) + bytec_2 // "admin" + // smart_contracts/abstracted_account/contract.algo.ts:1094 + // assert(Txn.sender === this.admin.value, ERR_ADMIN_ONLY); + app_global_get_ex + assert // check GlobalState exists + == + assert // admin only + // smart_contracts/abstracted_account/contract.algo.ts:37 + // escrows = BoxMap({ keyPrefix: AbstractAccountBoxPrefixEscrows }) + bytec 5 // "e" + swap + concat + // smart_contracts/abstracted_account/contract.algo.ts:1095 + // assert(this.escrows(escrow).exists, ERR_ESCROW_DOES_NOT_EXIST); + dup + box_len + bury 1 + assert // escrow does not exist + // smart_contracts/abstracted_account/contract.algo.ts:1096 + // assert(!this.escrows(escrow).value.locked, ERR_ESCROW_LOCKED); + box_get + pop + pushint 64 // 64 + getbit + ! + assert // Escrow is locked + // smart_contracts/abstracted_account/contract.algo.ts:1098 + // if (this.controlledAddress.value !== Global.currentApplicationAddress) { + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:18 + // controlledAddress = GlobalState({ key: AbstractAccountGlobalStateKeysControlledAddress }); + bytec_0 // "controlled_address" + // smart_contracts/abstracted_account/contract.algo.ts:1098 + // if (this.controlledAddress.value !== Global.currentApplicationAddress) { + app_global_get_ex + assert // check GlobalState exists + global CurrentApplicationAddress + != + bz arc58_removeAllowances_after_if_else@4 + // smart_contracts/abstracted_account/contract.algo.ts:1099-1104 + // itxn + // .payment({ + // receiver: this.controlledAddress.value, + // amount: this.allowancesMbr(escrow) * assets.length + // }) + // .submit() + itxn_begin + // smart_contracts/abstracted_account/contract.algo.ts:1101 + // receiver: this.controlledAddress.value, + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:18 + // controlledAddress = GlobalState({ key: AbstractAccountGlobalStateKeysControlledAddress }); + bytec_0 // "controlled_address" + // smart_contracts/abstracted_account/contract.algo.ts:1101 + // receiver: this.controlledAddress.value, + app_global_get_ex + assert // check GlobalState exists + // smart_contracts/abstracted_account/contract.algo.ts:66 + // return MinAllowanceMBR + (BoxCostPerByte * Bytes(escrow).length); + dig 3 + len + intc 4 // 400 + * + intc 6 // 27700 + + + // smart_contracts/abstracted_account/contract.algo.ts:1102 + // amount: this.allowancesMbr(escrow) * assets.length + dig 2 + * + itxn_field Amount + itxn_field Receiver + // smart_contracts/abstracted_account/contract.algo.ts:1099-1103 + // itxn + // .payment({ + // receiver: this.controlledAddress.value, + // amount: this.allowancesMbr(escrow) * assets.length + // }) + intc_1 // 1 + itxn_field TypeEnum + intc_0 // 0 + itxn_field Fee + // smart_contracts/abstracted_account/contract.algo.ts:1099-1104 + // itxn + // .payment({ + // receiver: this.controlledAddress.value, + // amount: this.allowancesMbr(escrow) * assets.length + // }) + // .submit() + itxn_submit + +arc58_removeAllowances_after_if_else@4: + // smart_contracts/abstracted_account/contract.algo.ts:1107 + // for (let i: uint64 = 0; i < assets.length; i += 1) { + intc_0 // 0 + bury 4 + +arc58_removeAllowances_while_top@5: + // smart_contracts/abstracted_account/contract.algo.ts:1107 + // for (let i: uint64 = 0; i < assets.length; i += 1) { + dig 3 + dig 1 + < + bz arc58_removeAllowances_after_while@7 + // smart_contracts/abstracted_account/contract.algo.ts:1110 + // asset: assets[i] + dig 1 + extract 2 0 + dig 4 + dup + cover 2 + intc_3 // 8 + * + intc_3 // 8 + extract3 // on error: index access is out of bounds + // smart_contracts/abstracted_account/contract.algo.ts:1108-1111 + // const key: AllowanceKey = { + // escrow, + // asset: assets[i] + // } + dig 4 + dup + len + itob + extract 6 2 + swap + concat + bytec 13 // 0x000a + uncover 2 + concat + swap + concat + // smart_contracts/abstracted_account/contract.algo.ts:39 + // allowances = BoxMap({ keyPrefix: AbstractAccountBoxPrefixAllowances }) // 38_500 + bytec 14 // "a" + swap + concat + // smart_contracts/abstracted_account/contract.algo.ts:1112 + // assert(this.allowances(key).exists, ERR_ALLOWANCE_DOES_NOT_EXIST) + dup + box_len + bury 1 + assert // allowance does not exist + // smart_contracts/abstracted_account/contract.algo.ts:1113 + // this.allowances(key).delete() + box_del + pop + // smart_contracts/abstracted_account/contract.algo.ts:1107 + // for (let i: uint64 = 0; i < assets.length; i += 1) { + intc_1 // 1 + + + bury 4 + b arc58_removeAllowances_while_top@5 + +arc58_removeAllowances_after_while@7: + // smart_contracts/abstracted_account/contract.algo.ts:20 + // lastUserInteraction = GlobalState({ key: AbstractAccountGlobalStateKeysLastUserInteraction }) + bytec_3 // "last_user_interaction" + // smart_contracts/abstracted_account/contract.algo.ts:44 + // this.lastUserInteraction.value = Global.latestTimestamp + global LatestTimestamp + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:22 + // lastChange = GlobalState({ key: AbstractAccountGlobalStateKeysLastChange }) + bytec 6 // "last_change" + // smart_contracts/abstracted_account/contract.algo.ts:48 + // this.lastChange.value = Global.latestTimestamp + global LatestTimestamp + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:1093 + // arc58_removeAllowances(escrow: string, assets: uint64[]): void { + intc_1 // 1 + return + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_addExecutionKey[routing]() -> void: +arc58_addExecutionKey: + // smart_contracts/abstracted_account/contract.algo.ts:1120 + // arc58_addExecutionKey(lease: bytes<32>, groups: bytes<32>[], firstValid: uint64, lastValid: uint64): void { + txna ApplicationArgs 1 + dup + len + pushint 32 // 32 + == + assert // invalid number of bytes for uint8[32] + txna ApplicationArgs 2 + dup + cover 2 + dup + intc_0 // 0 + extract_uint16 + pushint 32 // 32 + * + intc_2 // 2 + + + swap + len + == + assert // invalid number of bytes for (len+uint8[32][]) + txna ApplicationArgs 3 + dup + len + intc_3 // 8 + == + assert // invalid number of bytes for uint64 + btoi + cover 2 + txna ApplicationArgs 4 + dup + len + intc_3 // 8 + == + assert // invalid number of bytes for uint64 + btoi + cover 2 + // smart_contracts/abstracted_account/contract.algo.ts:1121 + // assert(Txn.sender === this.admin.value, ERR_ADMIN_ONLY) + txn Sender + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:16 + // admin = GlobalState({ key: AbstractAccountGlobalStateKeysAdmin }) + bytec_2 // "admin" + // smart_contracts/abstracted_account/contract.algo.ts:1121 + // assert(Txn.sender === this.admin.value, ERR_ADMIN_ONLY) + app_global_get_ex + assert // check GlobalState exists + == + assert // admin only + // smart_contracts/abstracted_account/contract.algo.ts:41 + // executions = BoxMap, ExecutionInfo>({ keyPrefix: AbstractAccountBoxPrefixExecutions }) + bytec 8 // "x" + swap + concat + dup + cover 3 + // smart_contracts/abstracted_account/contract.algo.ts:1122 + // if (!this.executions(lease).exists) { + box_len + bury 1 + bnz arc58_addExecutionKey_else_body@3 + // smart_contracts/abstracted_account/contract.algo.ts:1123-1127 + // this.executions(lease).value = { + // groups: clone(groups), + // firstValid, + // lastValid + // } + dig 3 + itob + pushbytes 0x0012 + swap + concat + uncover 2 + itob + concat + swap + concat + dig 1 + dup + box_del + pop + swap + box_put + +arc58_addExecutionKey_after_if_else@4: + // smart_contracts/abstracted_account/contract.algo.ts:20 + // lastUserInteraction = GlobalState({ key: AbstractAccountGlobalStateKeysLastUserInteraction }) + bytec_3 // "last_user_interaction" + // smart_contracts/abstracted_account/contract.algo.ts:44 + // this.lastUserInteraction.value = Global.latestTimestamp + global LatestTimestamp + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:22 + // lastChange = GlobalState({ key: AbstractAccountGlobalStateKeysLastChange }) + bytec 6 // "last_change" + // smart_contracts/abstracted_account/contract.algo.ts:48 + // this.lastChange.value = Global.latestTimestamp + global LatestTimestamp + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:1120 + // arc58_addExecutionKey(lease: bytes<32>, groups: bytes<32>[], firstValid: uint64, lastValid: uint64): void { + intc_1 // 1 + return + +arc58_addExecutionKey_else_body@3: + // smart_contracts/abstracted_account/contract.algo.ts:1129 + // assert(this.executions(lease).value.firstValid === firstValid, ERR_EXECUTION_KEY_UPDATE_MUST_MATCH_FIRST_VALID) + dig 2 + dup + intc_2 // 2 + intc_3 // 8 + box_extract + btoi + dig 5 + == + assert // execution key update must match first valid + // smart_contracts/abstracted_account/contract.algo.ts:1130 + // assert(this.executions(lease).value.lastValid === lastValid, ERR_EXECUTION_KEY_UPDATE_MUST_MATCH_LAST_VALID) + dup + pushint 10 // 10 + intc_3 // 8 + box_extract + btoi + uncover 3 + == + assert // execution key update must match last valid + // smart_contracts/abstracted_account/contract.algo.ts:1132 + // this.executions(lease).value.groups = [...clone(this.executions(lease).value.groups), ...clone(groups)] + dup + box_get + pop + dup + intc_0 // 0 + extract_uint16 + dig 1 + len + dig 2 + dig 2 + uncover 2 + substring3 + uncover 4 + extract 2 0 + concat // on error: max array length exceeded + dup + extract 2 0 + len + pushint 32 // 32 + / + itob + extract 6 2 + replace2 0 + uncover 2 + intc_0 // 0 + uncover 3 + extract3 + swap + concat + dig 1 + box_del + pop + box_put + b arc58_addExecutionKey_after_if_else@4 + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_removeExecutionKey[routing]() -> void: +arc58_removeExecutionKey: + // smart_contracts/abstracted_account/contract.algo.ts:1139 + // arc58_removeExecutionKey(lease: bytes<32>): void { + txna ApplicationArgs 1 + dup + len + pushint 32 // 32 + == + assert // invalid number of bytes for uint8[32] + // smart_contracts/abstracted_account/contract.algo.ts:41 + // executions = BoxMap, ExecutionInfo>({ keyPrefix: AbstractAccountBoxPrefixExecutions }) + bytec 8 // "x" + swap + concat + dup + // smart_contracts/abstracted_account/contract.algo.ts:1140 + // assert(this.executions(lease).exists, ERR_EXECUTION_KEY_DOES_NOT_EXIST) + box_len + bury 1 + assert // execution key does not exist + // smart_contracts/abstracted_account/contract.algo.ts:1141 + // assert(Txn.sender === this.admin.value || this.executions(lease).value.lastValid < Global.round, ERR_ADMIN_ONLY) + txn Sender + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:16 + // admin = GlobalState({ key: AbstractAccountGlobalStateKeysAdmin }) + bytec_2 // "admin" + // smart_contracts/abstracted_account/contract.algo.ts:1141 + // assert(Txn.sender === this.admin.value || this.executions(lease).value.lastValid < Global.round, ERR_ADMIN_ONLY) + app_global_get_ex + assert // check GlobalState exists + == + bnz arc58_removeExecutionKey_bool_true@3 + dup + pushint 10 // 10 + intc_3 // 8 + box_extract + btoi + global Round + < + bz arc58_removeExecutionKey_bool_false@4 + +arc58_removeExecutionKey_bool_true@3: + intc_1 // 1 + +arc58_removeExecutionKey_bool_merge@5: + // smart_contracts/abstracted_account/contract.algo.ts:1141 + // assert(Txn.sender === this.admin.value || this.executions(lease).value.lastValid < Global.round, ERR_ADMIN_ONLY) + assert // admin only + // smart_contracts/abstracted_account/contract.algo.ts:1143 + // this.executions(lease).delete() + dup + box_del + pop + // smart_contracts/abstracted_account/contract.algo.ts:20 + // lastUserInteraction = GlobalState({ key: AbstractAccountGlobalStateKeysLastUserInteraction }) + bytec_3 // "last_user_interaction" + // smart_contracts/abstracted_account/contract.algo.ts:44 + // this.lastUserInteraction.value = Global.latestTimestamp + global LatestTimestamp + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:22 + // lastChange = GlobalState({ key: AbstractAccountGlobalStateKeysLastChange }) + bytec 6 // "last_change" + // smart_contracts/abstracted_account/contract.algo.ts:48 + // this.lastChange.value = Global.latestTimestamp + global LatestTimestamp + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:1139 + // arc58_removeExecutionKey(lease: bytes<32>): void { + intc_1 // 1 + return + +arc58_removeExecutionKey_bool_false@4: + intc_0 // 0 + b arc58_removeExecutionKey_bool_merge@5 + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_getPlugins[routing]() -> void: +arc58_getPlugins: + intc_0 // 0 + bytec_1 // "" + // smart_contracts/abstracted_account/contract.algo.ts:1149 + // @abimethod({ readonly: true }) + txna ApplicationArgs 1 + // smart_contracts/abstracted_account/contract.algo.ts:1151 + // let plugins: PluginInfo[] = [] + bytec 10 // 0x0000 + // smart_contracts/abstracted_account/contract.algo.ts:1152 + // for (let i: uint64 = 0; i < keys.length; i += 1) { + intc_0 // 0 + +arc58_getPlugins_while_top@2: + // smart_contracts/abstracted_account/contract.algo.ts:1152 + // for (let i: uint64 = 0; i < keys.length; i += 1) { + dig 2 + intc_0 // 0 + extract_uint16 + dup + bury 5 + dig 1 + > + bz arc58_getPlugins_after_while@7 + // smart_contracts/abstracted_account/contract.algo.ts:1153 + // if (this.plugins(keys[i]).exists) { + dig 2 + extract 2 0 + dig 1 + dup + cover 2 + intc_2 // 2 + * + dig 1 + swap + extract_uint16 + uncover 2 + intc_1 // 1 + + + dup + bury 4 + dig 6 + dig 1 + - // on error: index access is out of bounds + dig 3 + len + uncover 2 + intc_2 // 2 + * + dig 4 + swap + extract_uint16 + uncover 2 + select + substring3 + // smart_contracts/abstracted_account/contract.algo.ts:33 + // plugins = BoxMap({ keyPrefix: AbstractAccountBoxPrefixPlugins }); + bytec 4 // "p" + swap + concat + dup + bury 6 + // smart_contracts/abstracted_account/contract.algo.ts:1153 + // if (this.plugins(keys[i]).exists) { + box_len + bury 1 + bz arc58_getPlugins_after_if_else@5 + // smart_contracts/abstracted_account/contract.algo.ts:1154 + // plugins.push(this.plugins(keys[i]).value) + dig 4 + box_get + assert // Box must have value + dig 2 + dup + intc_0 // 0 + extract_uint16 + swap + extract 2 0 + bytec 20 // 0x0002 + uncover 3 + concat + cover 2 + intc_1 // 1 + uncover 3 + callsub dynamic_array_concat_dynamic_element + bury 2 + // smart_contracts/abstracted_account/contract.algo.ts:1155 + // continue + b arc58_getPlugins_while_top@2 + +arc58_getPlugins_after_if_else@5: + // smart_contracts/abstracted_account/contract.algo.ts:1157 + // plugins.push(emptyPluginInfo()) + dig 1 + dup + intc_0 // 0 + extract_uint16 + swap + extract 2 0 + intc_1 // 1 + bytec 21 // 0x000200000000000000000000000000000000000000000000000000002c00000000000000000000000000000000000000 + callsub dynamic_array_concat_dynamic_element + bury 2 + b arc58_getPlugins_while_top@2 + +arc58_getPlugins_after_while@7: + // smart_contracts/abstracted_account/contract.algo.ts:1149 + // @abimethod({ readonly: true }) + bytec 7 // 0x151f7c75 + dig 2 + concat + log + intc_1 // 1 + return + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_getNamedPlugins[routing]() -> void: +arc58_getNamedPlugins: + intc_0 // 0 + dup + bytec_1 // "" + // smart_contracts/abstracted_account/contract.algo.ts:1162 + // @abimethod({ readonly: true }) + txna ApplicationArgs 1 + // smart_contracts/abstracted_account/contract.algo.ts:1164 + // let plugins: PluginInfo[] = [] + bytec 10 // 0x0000 + // smart_contracts/abstracted_account/contract.algo.ts:1165 + // for (let i: uint64 = 0; i < names.length; i += 1) { + intc_0 // 0 + +arc58_getNamedPlugins_while_top@2: + // smart_contracts/abstracted_account/contract.algo.ts:1165 + // for (let i: uint64 = 0; i < names.length; i += 1) { + dig 2 + intc_0 // 0 + extract_uint16 + dig 1 + > + dup + bury 5 + bz arc58_getNamedPlugins_after_while@9 + // smart_contracts/abstracted_account/contract.algo.ts:1166 + // if (this.namedPlugins(names[i]).exists) { + dig 2 + extract 2 0 + dig 4 + assert // index access is out of bounds + dig 1 + intc_2 // 2 + * + dig 1 + swap + extract_uint16 + dup2 + extract_uint16 + intc_2 // 2 + + + extract3 + extract 2 0 + // smart_contracts/abstracted_account/contract.algo.ts:35 + // namedPlugins = BoxMap({ keyPrefix: AbstractAccountBoxPrefixNamedPlugins }); + bytec 16 // "n" + swap + concat + dup + bury 7 + // smart_contracts/abstracted_account/contract.algo.ts:1166 + // if (this.namedPlugins(names[i]).exists) { + box_len + bury 1 + bz arc58_getNamedPlugins_after_if_else@7 + // smart_contracts/abstracted_account/contract.algo.ts:1167 + // const nameKey = clone(this.namedPlugins(names[i]).value) + dig 5 + box_get + assert // Box must have value + // smart_contracts/abstracted_account/contract.algo.ts:33 + // plugins = BoxMap({ keyPrefix: AbstractAccountBoxPrefixPlugins }); + bytec 4 // "p" + swap + concat + dup + bury 6 + // smart_contracts/abstracted_account/contract.algo.ts:1168 + // if (this.plugins(nameKey).exists) { + box_len + bury 1 + bz arc58_getNamedPlugins_after_if_else@6 + // smart_contracts/abstracted_account/contract.algo.ts:1169 + // plugins.push(this.plugins(nameKey).value) + dig 4 + box_get + assert // Box must have value + dig 2 + dup + intc_0 // 0 + extract_uint16 + swap + extract 2 0 + bytec 20 // 0x0002 + uncover 3 + concat + cover 2 + intc_1 // 1 + uncover 3 + callsub dynamic_array_concat_dynamic_element + bury 2 + +arc58_getNamedPlugins_block@8: + // smart_contracts/abstracted_account/contract.algo.ts:1165 + // for (let i: uint64 = 0; i < names.length; i += 1) { + dup + intc_1 // 1 + + + bury 1 + b arc58_getNamedPlugins_while_top@2 + +arc58_getNamedPlugins_after_if_else@6: + // smart_contracts/abstracted_account/contract.algo.ts:1172 + // plugins.push(emptyPluginInfo()) + dig 1 + dup + intc_0 // 0 + extract_uint16 + swap + extract 2 0 + intc_1 // 1 + bytec 21 // 0x000200000000000000000000000000000000000000000000000000002c00000000000000000000000000000000000000 + callsub dynamic_array_concat_dynamic_element + bury 2 + // smart_contracts/abstracted_account/contract.algo.ts:1173 + // continue + b arc58_getNamedPlugins_block@8 + +arc58_getNamedPlugins_after_if_else@7: + // smart_contracts/abstracted_account/contract.algo.ts:1175 + // plugins.push(emptyPluginInfo()) + dig 1 + dup + intc_0 // 0 + extract_uint16 + swap + extract 2 0 + intc_1 // 1 + bytec 21 // 0x000200000000000000000000000000000000000000000000000000002c00000000000000000000000000000000000000 + callsub dynamic_array_concat_dynamic_element + bury 2 + b arc58_getNamedPlugins_block@8 + +arc58_getNamedPlugins_after_while@9: + // smart_contracts/abstracted_account/contract.algo.ts:1162 + // @abimethod({ readonly: true }) + bytec 7 // 0x151f7c75 + dig 2 + concat + log + intc_1 // 1 + return + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_getEscrows[routing]() -> void: +arc58_getEscrows: + intc_0 // 0 + bytec_1 // "" + // smart_contracts/abstracted_account/contract.algo.ts:1180 + // @abimethod({ readonly: true }) + txna ApplicationArgs 1 + // smart_contracts/abstracted_account/contract.algo.ts:1182 + // let result: EscrowInfo[] = [] + bytec 10 // 0x0000 + // smart_contracts/abstracted_account/contract.algo.ts:1183 + // for (let i: uint64 = 0; i < escrows.length; i += 1) { + intc_0 // 0 + +arc58_getEscrows_while_top@2: + // smart_contracts/abstracted_account/contract.algo.ts:1183 + // for (let i: uint64 = 0; i < escrows.length; i += 1) { + dig 2 + intc_0 // 0 + extract_uint16 + dig 1 + > + dup + bury 5 + bz arc58_getEscrows_after_while@7 + // smart_contracts/abstracted_account/contract.algo.ts:1184 + // if (this.escrows(escrows[i]).exists) { + dig 2 + extract 2 0 + dig 4 + assert // index access is out of bounds + dig 1 + intc_2 // 2 + * + dig 1 + swap + extract_uint16 + dup2 + extract_uint16 + intc_2 // 2 + + + extract3 + extract 2 0 + // smart_contracts/abstracted_account/contract.algo.ts:37 + // escrows = BoxMap({ keyPrefix: AbstractAccountBoxPrefixEscrows }) + bytec 5 // "e" + swap + concat + dup + bury 6 + // smart_contracts/abstracted_account/contract.algo.ts:1184 + // if (this.escrows(escrows[i]).exists) { + box_len + bury 1 + bz arc58_getEscrows_after_if_else@5 + // smart_contracts/abstracted_account/contract.algo.ts:1185 + // result.push(this.escrows(escrows[i]).value) + dig 4 + box_get + assert // Box must have value + dig 2 + dup + uncover 2 + concat // on error: max array length exceeded + swap + intc_0 // 0 + extract_uint16 + intc_1 // 1 + + + itob + extract 6 2 + replace2 0 + bury 2 + +arc58_getEscrows_block@6: + // smart_contracts/abstracted_account/contract.algo.ts:1183 + // for (let i: uint64 = 0; i < escrows.length; i += 1) { + dup + intc_1 // 1 + + + bury 1 + b arc58_getEscrows_while_top@2 + +arc58_getEscrows_after_if_else@5: + // smart_contracts/abstracted_account/contract.algo.ts:1188 + // result.push(emptyEscrowInfo()) + dig 1 + dup + // smart_contracts/abstracted_account/utils.ts:20-23 + // return { + // id: 0, + // locked: false + // }; + pushbytes 0x000000000000000000 + // smart_contracts/abstracted_account/contract.algo.ts:1188 + // result.push(emptyEscrowInfo()) + concat // on error: max array length exceeded + swap + intc_0 // 0 + extract_uint16 + intc_1 // 1 + + + itob + extract 6 2 + replace2 0 + bury 2 + b arc58_getEscrows_block@6 + +arc58_getEscrows_after_while@7: + // smart_contracts/abstracted_account/contract.algo.ts:1180 + // @abimethod({ readonly: true }) + bytec 7 // 0x151f7c75 + dig 2 + concat + log + intc_1 // 1 + return + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_getAllowances[routing]() -> void: +arc58_getAllowances: + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:1193 + // @abimethod({ readonly: true }) + txna ApplicationArgs 1 + dup + intc_0 // 0 + extract_uint16 + intc_2 // 2 + + + dig 1 + len + == + assert // invalid number of bytes for (len+utf8[]) + extract 2 0 + txna ApplicationArgs 2 + dupn 2 + intc_0 // 0 + extract_uint16 + dup + cover 2 + intc_3 // 8 + * + intc_2 // 2 + + + swap + len + == + assert // invalid number of bytes for (len+uint64[]) + // smart_contracts/abstracted_account/contract.algo.ts:1195 + // let result: AllowanceInfo[] = [] + bytec 10 // 0x0000 + // smart_contracts/abstracted_account/contract.algo.ts:1196 + // for (let i: uint64 = 0; i < assets.length; i += 1) { + intc_0 // 0 + +arc58_getAllowances_while_top@2: + // smart_contracts/abstracted_account/contract.algo.ts:1196 + // for (let i: uint64 = 0; i < assets.length; i += 1) { + dup + dig 3 + < + bz arc58_getAllowances_after_while@7 + // smart_contracts/abstracted_account/contract.algo.ts:1197 + // const key: AllowanceKey = { escrow, asset: assets[i] } + dig 3 + extract 2 0 + dig 1 + intc_3 // 8 + * + intc_3 // 8 + extract3 // on error: index access is out of bounds + dig 5 + dup + len + itob + extract 6 2 + swap + concat + bytec 13 // 0x000a + uncover 2 + concat + swap + concat + // smart_contracts/abstracted_account/contract.algo.ts:39 + // allowances = BoxMap({ keyPrefix: AbstractAccountBoxPrefixAllowances }) // 38_500 + bytec 14 // "a" + swap + concat + dup + bury 7 + // smart_contracts/abstracted_account/contract.algo.ts:1198 + // if (this.allowances(key).exists) { + box_len + bury 1 + bz arc58_getAllowances_after_if_else@5 + // smart_contracts/abstracted_account/contract.algo.ts:1199 + // result.push(this.allowances(key).value) + dig 5 + box_get + assert // Box must have value + dig 2 + dup + uncover 2 + concat // on error: max array length exceeded + swap + intc_0 // 0 + extract_uint16 + intc_1 // 1 + + + itob + extract 6 2 + replace2 0 + bury 2 + +arc58_getAllowances_block@6: + // smart_contracts/abstracted_account/contract.algo.ts:1196 + // for (let i: uint64 = 0; i < assets.length; i += 1) { + dup + intc_1 // 1 + + + bury 1 + b arc58_getAllowances_while_top@2 + +arc58_getAllowances_after_if_else@5: + // smart_contracts/abstracted_account/contract.algo.ts:1202 + // result.push(emptyAllowanceInfo()) + dig 1 + dup + // smart_contracts/abstracted_account/utils.ts:27-36 + // return { + // type: new Uint8(0), + // max: 0, + // amount: 0, + // spent: 0, + // interval: 0, + // last: 0, + // start: 0, + // useRounds: false + // }; + pushbytes 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + // smart_contracts/abstracted_account/contract.algo.ts:1202 + // result.push(emptyAllowanceInfo()) + concat // on error: max array length exceeded + swap + intc_0 // 0 + extract_uint16 + intc_1 // 1 + + + itob + extract 6 2 + replace2 0 + bury 2 + b arc58_getAllowances_block@6 + +arc58_getAllowances_after_while@7: + // smart_contracts/abstracted_account/contract.algo.ts:1193 + // @abimethod({ readonly: true }) + bytec 7 // 0x151f7c75 + dig 2 + concat + log + intc_1 // 1 + return + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_getExecutions[routing]() -> void: +arc58_getExecutions: + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:1207 + // @abimethod({ readonly: true }) + txna ApplicationArgs 1 + dupn 2 + intc_0 // 0 + extract_uint16 + dup + cover 2 + pushint 32 // 32 + * + intc_2 // 2 + + + swap + len + == + assert // invalid number of bytes for (len+uint8[32][]) + // smart_contracts/abstracted_account/contract.algo.ts:1209 + // let result: ExecutionInfo[] = [] + bytec 10 // 0x0000 + // smart_contracts/abstracted_account/contract.algo.ts:1210 + // for (let i: uint64 = 0; i < leases.length; i += 1) { + intc_0 // 0 + +arc58_getExecutions_while_top@2: + // smart_contracts/abstracted_account/contract.algo.ts:1210 + // for (let i: uint64 = 0; i < leases.length; i += 1) { + dup + dig 3 + < + bz arc58_getExecutions_after_while@7 + // smart_contracts/abstracted_account/contract.algo.ts:1211 + // if (this.executions(leases[i]).exists) { + dig 3 + extract 2 0 + dig 1 + pushint 32 // 32 + * + pushint 32 // 32 + extract3 // on error: index access is out of bounds + // smart_contracts/abstracted_account/contract.algo.ts:41 + // executions = BoxMap, ExecutionInfo>({ keyPrefix: AbstractAccountBoxPrefixExecutions }) + bytec 8 // "x" + swap + concat + dup + bury 6 + // smart_contracts/abstracted_account/contract.algo.ts:1211 + // if (this.executions(leases[i]).exists) { + box_len + bury 1 + bz arc58_getExecutions_after_if_else@5 + // smart_contracts/abstracted_account/contract.algo.ts:1212 + // result.push(this.executions(leases[i]).value) + dig 4 + box_get + assert // Box must have value + dig 2 + dup + intc_0 // 0 + extract_uint16 + swap + extract 2 0 + bytec 20 // 0x0002 + uncover 3 + concat + cover 2 + intc_1 // 1 + uncover 3 + callsub dynamic_array_concat_dynamic_element + bury 2 + +arc58_getExecutions_block@6: + // smart_contracts/abstracted_account/contract.algo.ts:1210 + // for (let i: uint64 = 0; i < leases.length; i += 1) { + dup + intc_1 // 1 + + + bury 1 + b arc58_getExecutions_while_top@2 + +arc58_getExecutions_after_if_else@5: + // smart_contracts/abstracted_account/contract.algo.ts:1215 + // result.push(emptyExecutionInfo()) + dig 1 + dup + intc_0 // 0 + extract_uint16 + swap + extract 2 0 + intc_1 // 1 + pushbytes 0x00020012000000000000000000000000000000000000 + callsub dynamic_array_concat_dynamic_element + bury 2 + b arc58_getExecutions_block@6 + +arc58_getExecutions_after_while@7: + // smart_contracts/abstracted_account/contract.algo.ts:1207 + // @abimethod({ readonly: true }) + bytec 7 // 0x151f7c75 + dig 2 + concat + log + intc_1 // 1 + return + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.mbr[routing]() -> void: +mbr: + // smart_contracts/abstracted_account/contract.algo.ts:1220 + // @abimethod({ readonly: true }) + txna ApplicationArgs 1 + dup + intc_0 // 0 + extract_uint16 + intc_2 // 2 + + + dig 1 + len + == + assert // invalid number of bytes for (len+utf8[]) + extract 2 0 + txna ApplicationArgs 2 + dup + len + intc_3 // 8 + == + assert // invalid number of bytes for uint64 + btoi + txna ApplicationArgs 3 + dup + intc_0 // 0 + extract_uint16 + intc_2 // 2 + + + dig 1 + len + == + assert // invalid number of bytes for (len+utf8[]) + extract 2 0 + txna ApplicationArgs 4 + dup + len + intc_3 // 8 + == + assert // invalid number of bytes for uint64 + btoi + // smart_contracts/abstracted_account/contract.algo.ts:62 + // return MinEscrowsMBR + (BoxCostPerByte * Bytes(escrow).length); + dig 3 + len + intc 4 // 400 + * + pushint 6500 // 6500 + dig 1 + + + // smart_contracts/abstracted_account/contract.algo.ts:1230 + // plugins: this.pluginsMbr(escrow, methodCount), + dig 5 + uncover 5 + callsub pluginsMbr + // smart_contracts/abstracted_account/contract.algo.ts:58 + // return MinNamedPluginMBR + (BoxCostPerByte * Bytes(name).length); + uncover 4 + len + intc 4 // 400 + * + intc 5 // 21700 + + + // smart_contracts/abstracted_account/contract.algo.ts:66 + // return MinAllowanceMBR + (BoxCostPerByte * Bytes(escrow).length); + intc 6 // 27700 + uncover 4 + + + // smart_contracts/abstracted_account/contract.algo.ts:70 + // return MinExecutionsMBR + (BoxCostPerByte * (groups * 32)); + uncover 4 + pushint 12800 // 12800 + * + pushint 20500 // 20500 + + + // smart_contracts/abstracted_account/contract.algo.ts:37 + // escrows = BoxMap({ keyPrefix: AbstractAccountBoxPrefixEscrows }) + bytec 5 // "e" + uncover 6 + concat + // smart_contracts/abstracted_account/contract.algo.ts:1235 + // escrowExists: this.escrows(escrow).exists, + box_len + cover 6 + pop + // smart_contracts/abstracted_account/contract.algo.ts:1238 + // Global.minBalance + + global MinBalance + // smart_contracts/abstracted_account/contract.algo.ts:1237-1239 + // NewCostForARC58 + + // Global.minBalance + + // ARC58WalletIDsByAccountsMbr + + pushint 162100 // 162100 + + + // smart_contracts/abstracted_account/contract.algo.ts:1237-1240 + // NewCostForARC58 + + // Global.minBalance + + // ARC58WalletIDsByAccountsMbr + + // escrows + dig 5 + + + // smart_contracts/abstracted_account/contract.algo.ts:1229-1242 + // return { + // plugins: this.pluginsMbr(escrow, methodCount), + // namedPlugins: this.namedPluginsMbr(plugin), + // escrows, + // allowances: this.allowancesMbr(escrow), + // executions: this.executionsMbr(groups), + // escrowExists: this.escrows(escrow).exists, + // newEscrowMintCost: ( + // NewCostForARC58 + + // Global.minBalance + + // ARC58WalletIDsByAccountsMbr + + // escrows + // ) + // } + uncover 4 + itob + uncover 4 + itob + concat + uncover 4 + itob + concat + uncover 3 + itob + concat + uncover 2 + itob + concat + bytec 9 // 0x00 + intc_0 // 0 + uncover 4 + setbit + concat + swap + itob + concat + // smart_contracts/abstracted_account/contract.algo.ts:1220 + // @abimethod({ readonly: true }) + bytec 7 // 0x151f7c75 + swap + concat + log + intc_1 // 1 + return + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.pluginsMbr(escrow: bytes, methodCount: uint64) -> uint64: +pluginsMbr: + // smart_contracts/abstracted_account/contract.algo.ts:51 + // private pluginsMbr(escrow: string, methodCount: uint64): uint64 { + proto 2 1 + // smart_contracts/abstracted_account/contract.algo.ts:53 + // BoxCostPerByte * ((MethodRestrictionByteLength * methodCount) + Bytes(escrow).length) + pushint 20 // 20 + frame_dig -1 + * + frame_dig -2 + len + + + intc 4 // 400 + * + // smart_contracts/abstracted_account/contract.algo.ts:52 + // return MinPluginMBR + ( + pushint 38900 // 38900 + // smart_contracts/abstracted_account/contract.algo.ts:52-54 + // return MinPluginMBR + ( + // BoxCostPerByte * ((MethodRestrictionByteLength * methodCount) + Bytes(escrow).length) + // ); + + + retsub + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.maybeNewEscrow(escrow: bytes) -> uint64: +maybeNewEscrow: + // smart_contracts/abstracted_account/contract.algo.ts:73 + // private maybeNewEscrow(escrow: string): uint64 { + proto 1 1 + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:74 + // if (escrow === '') { + frame_dig -1 + bytec_1 // "" + == + bz maybeNewEscrow_after_if_else@2 + // smart_contracts/abstracted_account/contract.algo.ts:75 + // return 0; + intc_0 // 0 + swap + retsub + +maybeNewEscrow_after_if_else@2: + // smart_contracts/abstracted_account/contract.algo.ts:37 + // escrows = BoxMap({ keyPrefix: AbstractAccountBoxPrefixEscrows }) + bytec 5 // "e" + frame_dig -1 + concat + dup + frame_bury 0 + // smart_contracts/abstracted_account/contract.algo.ts:78 + // return this.escrows(escrow).exists + box_len + bury 1 + // smart_contracts/abstracted_account/contract.algo.ts:78-80 + // return this.escrows(escrow).exists + // ? this.escrows(escrow).value.id + // : this.newEscrow(escrow); + bz maybeNewEscrow_ternary_false@4 + // smart_contracts/abstracted_account/contract.algo.ts:79 + // ? this.escrows(escrow).value.id + frame_dig 0 + box_get + assert // Box must have value + intc_0 // 0 + extract_uint64 + +maybeNewEscrow_ternary_merge@5: + // smart_contracts/abstracted_account/contract.algo.ts:78-80 + // return this.escrows(escrow).exists + // ? this.escrows(escrow).value.id + // : this.newEscrow(escrow); + swap + retsub + +maybeNewEscrow_ternary_false@4: + // smart_contracts/abstracted_account/contract.algo.ts:80 + // : this.newEscrow(escrow); + frame_dig -1 + callsub newEscrow + b maybeNewEscrow_ternary_merge@5 + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.newEscrow(escrow: bytes) -> uint64: +newEscrow: + // smart_contracts/abstracted_account/contract.algo.ts:83 + // private newEscrow(escrow: string): uint64 { + proto 1 1 + // smart_contracts/abstracted_account/contract.algo.ts:84 + // if (this.controlledAddress.value !== Global.currentApplicationAddress) { + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:18 + // controlledAddress = GlobalState({ key: AbstractAccountGlobalStateKeysControlledAddress }); + bytec_0 // "controlled_address" + // smart_contracts/abstracted_account/contract.algo.ts:84 + // if (this.controlledAddress.value !== Global.currentApplicationAddress) { + app_global_get_ex + assert // check GlobalState exists + global CurrentApplicationAddress + != + bz newEscrow_after_if_else@3 + // smart_contracts/abstracted_account/contract.algo.ts:85-91 + // itxn + // .payment({ + // sender: this.controlledAddress.value, + // receiver: Global.currentApplicationAddress, + // amount: this.escrowsMbr(escrow) + // }) + // .submit() + itxn_begin + // smart_contracts/abstracted_account/contract.algo.ts:87 + // sender: this.controlledAddress.value, + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:18 + // controlledAddress = GlobalState({ key: AbstractAccountGlobalStateKeysControlledAddress }); + bytec_0 // "controlled_address" + // smart_contracts/abstracted_account/contract.algo.ts:87 + // sender: this.controlledAddress.value, + app_global_get_ex + assert // check GlobalState exists + // smart_contracts/abstracted_account/contract.algo.ts:88 + // receiver: Global.currentApplicationAddress, + global CurrentApplicationAddress + // smart_contracts/abstracted_account/contract.algo.ts:62 + // return MinEscrowsMBR + (BoxCostPerByte * Bytes(escrow).length); + frame_dig -1 + len + intc 4 // 400 + * + pushint 6500 // 6500 + + + itxn_field Amount + itxn_field Receiver + itxn_field Sender + // smart_contracts/abstracted_account/contract.algo.ts:85-90 + // itxn + // .payment({ + // sender: this.controlledAddress.value, + // receiver: Global.currentApplicationAddress, + // amount: this.escrowsMbr(escrow) + // }) + intc_1 // 1 + itxn_field TypeEnum + intc_0 // 0 + itxn_field Fee + // smart_contracts/abstracted_account/contract.algo.ts:85-91 + // itxn + // .payment({ + // sender: this.controlledAddress.value, + // receiver: Global.currentApplicationAddress, + // amount: this.escrowsMbr(escrow) + // }) + // .submit() + itxn_submit + +newEscrow_after_if_else@3: + // smart_contracts/abstracted_account/contract.algo.ts:94-104 + // const id = abiCall({ + // sender: this.controlledAddress.value, + // appId: this.escrowFactory.value, + // args: [ + // itxn.payment({ + // sender: this.controlledAddress.value, + // amount: NewCostForARC58 + Global.minBalance, + // receiver: this.escrowFactory.value.address + // }), + // ] + // }).returnValue + itxn_begin + // smart_contracts/abstracted_account/contract.algo.ts:99 + // sender: this.controlledAddress.value, + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:18 + // controlledAddress = GlobalState({ key: AbstractAccountGlobalStateKeysControlledAddress }); + bytec_0 // "controlled_address" + // smart_contracts/abstracted_account/contract.algo.ts:99 + // sender: this.controlledAddress.value, + app_global_get_ex + assert // check GlobalState exists + // smart_contracts/abstracted_account/contract.algo.ts:100 + // amount: NewCostForARC58 + Global.minBalance, + pushint 150000 // 150000 + global MinBalance + + + // smart_contracts/abstracted_account/contract.algo.ts:101 + // receiver: this.escrowFactory.value.address + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:24 + // escrowFactory = GlobalState({ key: AbstractAccountGlobalStateKeysEscrowFactory }) + bytec 18 // "escrow_factory" + // smart_contracts/abstracted_account/contract.algo.ts:101 + // receiver: this.escrowFactory.value.address + app_global_get_ex + assert // check GlobalState exists + dup + app_params_get AppAddress + assert // application exists + itxn_field Receiver + swap + itxn_field Amount + dig 1 + itxn_field Sender + // smart_contracts/abstracted_account/contract.algo.ts:98-102 + // itxn.payment({ + // sender: this.controlledAddress.value, + // amount: NewCostForARC58 + Global.minBalance, + // receiver: this.escrowFactory.value.address + // }), + intc_1 // 1 + itxn_field TypeEnum + intc_0 // 0 + itxn_field Fee + // smart_contracts/abstracted_account/contract.algo.ts:94-104 + // const id = abiCall({ + // sender: this.controlledAddress.value, + // appId: this.escrowFactory.value, + // args: [ + // itxn.payment({ + // sender: this.controlledAddress.value, + // amount: NewCostForARC58 + Global.minBalance, + // receiver: this.escrowFactory.value.address + // }), + // ] + // }).returnValue + itxn_next + pushbytes 0xd85cf184 // method "new(pay)uint64" + itxn_field ApplicationArgs + itxn_field ApplicationID + itxn_field Sender + pushint 6 // appl + itxn_field TypeEnum + intc_0 // 0 + itxn_field Fee + itxn_submit + gitxn 1 LastLog + dup + extract 4 0 + swap + extract 0 4 + bytec 7 // 0x151f7c75 + == + assert // Bytes has valid prefix + dup + len + intc_3 // 8 + == + assert // invalid number of bytes for uint64 + btoi + // smart_contracts/abstracted_account/contract.algo.ts:106 + // this.escrows(escrow).value = { id, locked: false } + dup + itob + bytec 9 // 0x00 + concat + // smart_contracts/abstracted_account/contract.algo.ts:37 + // escrows = BoxMap({ keyPrefix: AbstractAccountBoxPrefixEscrows }) + bytec 5 // "e" + frame_dig -1 + concat + // smart_contracts/abstracted_account/contract.algo.ts:106 + // this.escrows(escrow).value = { id, locked: false } + swap + box_put + // smart_contracts/abstracted_account/contract.algo.ts:108 + // return id; + retsub + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.pluginCallAllowed(plugin: uint64, caller: bytes, escrow: bytes, method: bytes) -> uint64: +pluginCallAllowed: + // smart_contracts/abstracted_account/contract.algo.ts:111 + // private pluginCallAllowed(plugin: uint64, caller: Account, escrow: string, method: bytes<4>): boolean { + proto 4 1 + bytec_1 // "" + dupn 5 + // smart_contracts/abstracted_account/contract.algo.ts:112 + // const key: PluginKey = { plugin, caller, escrow } + frame_dig -4 + itob + frame_dig -3 + concat + frame_dig -2 + len + itob + extract 6 2 + frame_dig -2 + concat + swap + bytec 12 // 0x002a + concat + swap + concat + // smart_contracts/abstracted_account/contract.algo.ts:33 + // plugins = BoxMap({ keyPrefix: AbstractAccountBoxPrefixPlugins }); + bytec 4 // "p" + swap + concat + dup + // smart_contracts/abstracted_account/contract.algo.ts:114 + // if (!this.plugins(key).exists) { + box_len + bury 1 + bnz pluginCallAllowed_after_if_else@2 + // smart_contracts/abstracted_account/contract.algo.ts:115 + // return false; + intc_0 // 0 + frame_bury 0 + retsub + +pluginCallAllowed_after_if_else@2: + // smart_contracts/abstracted_account/contract.algo.ts:118 + // const { methods, useRounds, lastCalled, cooldown, useExecutionKey } = this.plugins(key).value as Readonly + frame_dig 6 + dup + pushint 17 // 17 + intc_3 // 8 + box_extract + btoi + frame_bury 0 + dup + pushint 27 // 27 + intc_1 // 1 + box_extract + dup + intc_1 // 1 + getbit + frame_bury 5 + intc_2 // 2 + getbit + swap + pushint 28 // 28 + intc_3 // 8 + box_extract + btoi + frame_bury 3 + // smart_contracts/abstracted_account/contract.algo.ts:120 + // if (useExecutionKey) { + bz pluginCallAllowed_after_if_else@4 + // smart_contracts/abstracted_account/contract.algo.ts:121 + // return false + intc_0 // 0 + frame_bury 0 + retsub + +pluginCallAllowed_after_if_else@4: + // smart_contracts/abstracted_account/contract.algo.ts:124 + // let methodAllowed = methods.length > 0 ? false : true; + frame_dig 6 + pushint 44 // 44 + intc_2 // 2 + box_extract + btoi + ! + frame_bury 4 + // smart_contracts/abstracted_account/contract.algo.ts:125 + // for (let i: uint64 = 0; i < methods.length; i += 1) { + intc_0 // 0 + frame_bury 2 + +pluginCallAllowed_while_top@5: + // smart_contracts/abstracted_account/contract.algo.ts:125 + // for (let i: uint64 = 0; i < methods.length; i += 1) { + frame_dig 6 + pushint 44 // 44 + intc_2 // 2 + box_extract + btoi + frame_dig 2 + > + bz pluginCallAllowed_block@10 + // smart_contracts/abstracted_account/contract.algo.ts:126 + // if (methods[i].selector === method) { + frame_dig 2 + pushint 20 // 20 + * + pushint 46 // 46 + + + frame_dig 6 + swap + pushint 20 // 20 + box_extract + extract 0 4 + frame_dig -1 + == + bz pluginCallAllowed_after_if_else@8 + // smart_contracts/abstracted_account/contract.algo.ts:127 + // methodAllowed = true; + intc_1 // 1 + frame_bury 4 + +pluginCallAllowed_block@10: + // smart_contracts/abstracted_account/contract.algo.ts:132 + // const epochRef = useRounds ? Global.round : Global.latestTimestamp; + frame_dig 5 + bz pluginCallAllowed_ternary_false@12 + global Round + frame_bury 1 + +pluginCallAllowed_ternary_merge@13: + // smart_contracts/abstracted_account/contract.algo.ts:135 + // lastCalled >= epochRef && + frame_dig 3 + frame_dig 1 + >= + // smart_contracts/abstracted_account/contract.algo.ts:135-136 + // lastCalled >= epochRef && + // (epochRef - lastCalled) >= cooldown && + bz pluginCallAllowed_bool_false@16 + // smart_contracts/abstracted_account/contract.algo.ts:136 + // (epochRef - lastCalled) >= cooldown && + frame_dig 1 + frame_dig 3 + - + frame_dig 0 + >= + // smart_contracts/abstracted_account/contract.algo.ts:135-136 + // lastCalled >= epochRef && + // (epochRef - lastCalled) >= cooldown && + bz pluginCallAllowed_bool_false@16 + intc_1 // 1 + +pluginCallAllowed_bool_merge@17: + // smart_contracts/abstracted_account/contract.algo.ts:135-137 + // lastCalled >= epochRef && + // (epochRef - lastCalled) >= cooldown && + // methodAllowed + frame_dig 4 + && + // smart_contracts/abstracted_account/contract.algo.ts:134-138 + // return ( + // lastCalled >= epochRef && + // (epochRef - lastCalled) >= cooldown && + // methodAllowed + // ) + frame_bury 0 + retsub + +pluginCallAllowed_bool_false@16: + intc_0 // 0 + b pluginCallAllowed_bool_merge@17 + +pluginCallAllowed_ternary_false@12: + // smart_contracts/abstracted_account/contract.algo.ts:132 + // const epochRef = useRounds ? Global.round : Global.latestTimestamp; + global LatestTimestamp + frame_bury 1 + b pluginCallAllowed_ternary_merge@13 + +pluginCallAllowed_after_if_else@8: + // smart_contracts/abstracted_account/contract.algo.ts:125 + // for (let i: uint64 = 0; i < methods.length; i += 1) { + frame_dig 2 + intc_1 // 1 + + + frame_bury 2 + b pluginCallAllowed_while_top@5 + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.txnRekeysBack(txn: uint64) -> uint64: +txnRekeysBack: + // smart_contracts/abstracted_account/contract.algo.ts:141 + // private txnRekeysBack(txn: gtxn.Transaction): boolean { + proto 1 1 + // smart_contracts/abstracted_account/contract.algo.ts:144 + // txn.sender === this.controlledAddress.value && + frame_dig -1 + gtxns Sender + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:18 + // controlledAddress = GlobalState({ key: AbstractAccountGlobalStateKeysControlledAddress }); + bytec_0 // "controlled_address" + // smart_contracts/abstracted_account/contract.algo.ts:144 + // txn.sender === this.controlledAddress.value && + app_global_get_ex + assert // check GlobalState exists + == + // smart_contracts/abstracted_account/contract.algo.ts:144-145 + // txn.sender === this.controlledAddress.value && + // txn.rekeyTo === Global.currentApplicationAddress + bz txnRekeysBack_after_if_else@3 + // smart_contracts/abstracted_account/contract.algo.ts:145 + // txn.rekeyTo === Global.currentApplicationAddress + frame_dig -1 + gtxns RekeyTo + global CurrentApplicationAddress + == + // smart_contracts/abstracted_account/contract.algo.ts:144-145 + // txn.sender === this.controlledAddress.value && + // txn.rekeyTo === Global.currentApplicationAddress + bz txnRekeysBack_after_if_else@3 + // smart_contracts/abstracted_account/contract.algo.ts:147 + // return true; + intc_1 // 1 + retsub + +txnRekeysBack_after_if_else@3: + // smart_contracts/abstracted_account/contract.algo.ts:151 + // txn.type === TransactionType.ApplicationCall + frame_dig -1 + gtxns TypeEnum + pushint 6 // 6 + == + // smart_contracts/abstracted_account/contract.algo.ts:151-152 + // txn.type === TransactionType.ApplicationCall + // && txn.appId === Global.currentApplicationId + bz txnRekeysBack_bool_false@9 + // smart_contracts/abstracted_account/contract.algo.ts:152 + // && txn.appId === Global.currentApplicationId + frame_dig -1 + gtxns ApplicationID + global CurrentApplicationID + == + // smart_contracts/abstracted_account/contract.algo.ts:151-152 + // txn.type === TransactionType.ApplicationCall + // && txn.appId === Global.currentApplicationId + bz txnRekeysBack_bool_false@9 + // smart_contracts/abstracted_account/contract.algo.ts:153 + // && txn.numAppArgs === 1 + frame_dig -1 + gtxns NumAppArgs + intc_1 // 1 + == + // smart_contracts/abstracted_account/contract.algo.ts:151-153 + // txn.type === TransactionType.ApplicationCall + // && txn.appId === Global.currentApplicationId + // && txn.numAppArgs === 1 + bz txnRekeysBack_bool_false@9 + // smart_contracts/abstracted_account/contract.algo.ts:154 + // && txn.onCompletion === OnCompleteAction.NoOp + frame_dig -1 + gtxns OnCompletion + // smart_contracts/abstracted_account/contract.algo.ts:151-154 + // txn.type === TransactionType.ApplicationCall + // && txn.appId === Global.currentApplicationId + // && txn.numAppArgs === 1 + // && txn.onCompletion === OnCompleteAction.NoOp + bnz txnRekeysBack_bool_false@9 + // smart_contracts/abstracted_account/contract.algo.ts:155 + // && txn.appArgs(0) === methodSelector('arc58_verifyAuthAddress()void') + frame_dig -1 + intc_0 // 0 + gtxnsas ApplicationArgs + bytec 22 // method "arc58_verifyAuthAddress()void" + == + // smart_contracts/abstracted_account/contract.algo.ts:151-155 + // txn.type === TransactionType.ApplicationCall + // && txn.appId === Global.currentApplicationId + // && txn.numAppArgs === 1 + // && txn.onCompletion === OnCompleteAction.NoOp + // && txn.appArgs(0) === methodSelector('arc58_verifyAuthAddress()void') + bz txnRekeysBack_bool_false@9 + intc_1 // 1 + // smart_contracts/abstracted_account/contract.algo.ts:150-156 + // return ( + // txn.type === TransactionType.ApplicationCall + // && txn.appId === Global.currentApplicationId + // && txn.numAppArgs === 1 + // && txn.onCompletion === OnCompleteAction.NoOp + // && txn.appArgs(0) === methodSelector('arc58_verifyAuthAddress()void') + // ) + retsub + +txnRekeysBack_bool_false@9: + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:150-156 + // return ( + // txn.type === TransactionType.ApplicationCall + // && txn.appId === Global.currentApplicationId + // && txn.numAppArgs === 1 + // && txn.onCompletion === OnCompleteAction.NoOp + // && txn.appArgs(0) === methodSelector('arc58_verifyAuthAddress()void') + // ) + retsub + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.pluginCheck(key: bytes) -> bytes, bytes: +pluginCheck: + // smart_contracts/abstracted_account/contract.algo.ts:173 + // private pluginCheck(key: PluginKey): PluginValidation { + proto 1 2 + bytec_1 // "" + dupn 2 + // smart_contracts/abstracted_account/contract.algo.ts:33 + // plugins = BoxMap({ keyPrefix: AbstractAccountBoxPrefixPlugins }); + bytec 4 // "p" + frame_dig -1 + concat + dup + // smart_contracts/abstracted_account/contract.algo.ts:175 + // const exists = this.plugins(key).exists; + box_len + dup + uncover 2 + pop + // smart_contracts/abstracted_account/contract.algo.ts:176 + // if (!exists) { + bnz pluginCheck_after_if_else@2 + // smart_contracts/abstracted_account/contract.algo.ts:177-182 + // return { + // exists: false, + // expired: true, + // onCooldown: true, + // hasMethodRestrictions: false, + // } + pushbytes 0x60 + frame_dig -1 + frame_bury 1 + frame_bury 0 + retsub + +pluginCheck_after_if_else@2: + // smart_contracts/abstracted_account/contract.algo.ts:185 + // const { useRounds, lastValid, cooldown, lastCalled, methods } = this.plugins(key).value as Readonly + frame_dig 3 + dup + pushint 9 // 9 + intc_3 // 8 + box_extract + btoi + frame_bury 2 + dup + pushint 17 // 17 + intc_3 // 8 + box_extract + btoi + frame_bury 0 + dup + pushint 27 // 27 + intc_1 // 1 + box_extract + intc_1 // 1 + getbit + swap + pushint 28 // 28 + intc_3 // 8 + box_extract + btoi + frame_bury 1 + // smart_contracts/abstracted_account/contract.algo.ts:186 + // const epochRef = useRounds ? Global.round : Global.latestTimestamp; + bz pluginCheck_ternary_false@4 + global Round + +pluginCheck_ternary_merge@5: + // smart_contracts/abstracted_account/contract.algo.ts:190 + // expired: epochRef > lastValid, + dup + frame_dig 2 + > + // smart_contracts/abstracted_account/contract.algo.ts:191 + // onCooldown: (epochRef - lastCalled) < cooldown, + swap + frame_dig 1 + - + frame_dig 0 + < + // smart_contracts/abstracted_account/contract.algo.ts:192 + // hasMethodRestrictions: methods.length > 0, + frame_dig 3 + pushint 44 // 44 + intc_2 // 2 + box_extract + btoi + intc_0 // 0 + > + // smart_contracts/abstracted_account/contract.algo.ts:188-193 + // return { + // exists, + // expired: epochRef > lastValid, + // onCooldown: (epochRef - lastCalled) < cooldown, + // hasMethodRestrictions: methods.length > 0, + // } + bytec 9 // 0x00 + intc_0 // 0 + frame_dig 4 + setbit + intc_1 // 1 + uncover 4 + setbit + intc_2 // 2 + uncover 3 + setbit + pushint 3 // 3 + uncover 2 + setbit + frame_dig -1 + frame_bury 1 + frame_bury 0 + retsub + +pluginCheck_ternary_false@4: + // smart_contracts/abstracted_account/contract.algo.ts:186 + // const epochRef = useRounds ? Global.round : Global.latestTimestamp; + global LatestTimestamp + b pluginCheck_ternary_merge@5 + + +// smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin(plugin: uint64, global: uint64, escrow: bytes, methodOffsets: bytes, fundsRequest: bytes) -> bytes, bytes: +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin: + // smart_contracts/abstracted_account/contract.algo.ts:567-573 + // arc58_rekeyToPlugin( + // plugin: uint64, + // global: boolean, + // escrow: string, + // methodOffsets: uint64[], + // fundsRequest: FundsRequest[] + // ): void { + proto 5 2 + intc_0 // 0 + dupn 10 + bytec_1 // "" + dupn 18 + // smart_contracts/abstracted_account/contract.algo.ts:575 + // const caller = global ? Global.zeroAddress : Txn.sender + frame_dig -4 + bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_false@2 + global ZeroAddress + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_merge@3: + // smart_contracts/abstracted_account/contract.algo.ts:576 + // const key: PluginKey = { plugin, caller, escrow } + frame_dig -5 + itob + swap + concat + frame_dig -3 + len + itob + extract 6 2 + frame_dig -3 + concat + dup + frame_bury 1 + swap + bytec 12 // 0x002a + concat + swap + concat + dup + frame_bury 6 + // smart_contracts/abstracted_account/contract.algo.ts:33 + // plugins = BoxMap({ keyPrefix: AbstractAccountBoxPrefixPlugins }); + bytec 4 // "p" + dig 1 + concat + dup + frame_bury 2 + // smart_contracts/abstracted_account/contract.algo.ts:578 + // assert(this.plugins(key).exists, ERR_PLUGIN_DOES_NOT_EXIST) + box_len + bury 1 + assert // plugin does not exist + // smart_contracts/abstracted_account/contract.algo.ts:28 + // currentPlugin = GlobalState({ key: AbstractAccountGlobalStateKeysCurrentPlugin }) + bytec 19 // "current_plugin" + // smart_contracts/abstracted_account/contract.algo.ts:579 + // this.currentPlugin.value = clone(key) + swap + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:581 + // if (escrow !== '') { + frame_dig -3 + bytec_1 // "" + != + bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_else_body@7 + // smart_contracts/abstracted_account/contract.algo.ts:37 + // escrows = BoxMap({ keyPrefix: AbstractAccountBoxPrefixEscrows }) + bytec 5 // "e" + frame_dig -3 + concat + // smart_contracts/abstracted_account/contract.algo.ts:582 + // assert(this.escrows(escrow).exists, ERR_ESCROW_DOES_NOT_EXIST) + dup + box_len + bury 1 + assert // escrow does not exist + // smart_contracts/abstracted_account/contract.algo.ts:583 + // const escrowID = this.escrows(escrow).value.id + box_get + pop + intc_0 // 0 + extract_uint64 + // smart_contracts/abstracted_account/contract.algo.ts:585 + // this.spendingAddress.value = spendingApp.address + dup + app_params_get AppAddress + assert // application exists + // smart_contracts/abstracted_account/contract.algo.ts:26 + // spendingAddress = GlobalState({ key: AbstractAccountGlobalStateKeysSpendingAddress }) + bytec 11 // "spending_address" + // smart_contracts/abstracted_account/contract.algo.ts:585 + // this.spendingAddress.value = spendingApp.address + swap + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:316 + // const escrowAddress = Application(escrowID).address; + app_params_get AppAddress + swap + frame_bury 5 + assert // application exists + // smart_contracts/abstracted_account/contract.algo.ts:318 + // for (let i: uint64 = 0; i < fundsRequests.length; i += 1) { + intc_0 // 0 + frame_bury 16 + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_while_top@56: + // smart_contracts/abstracted_account/contract.algo.ts:318 + // for (let i: uint64 = 0; i < fundsRequests.length; i += 1) { + frame_dig -1 + intc_0 // 0 + extract_uint16 + frame_dig 16 + > + bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@8 + // smart_contracts/abstracted_account/contract.algo.ts:322 + // asset: fundsRequests[i].asset + frame_dig -1 + extract 2 0 + frame_dig 16 + pushint 16 // 16 + * + pushint 16 // 16 + extract3 // on error: index access is out of bounds + dup + frame_bury 0 + intc_0 // 0 + extract_uint64 + dup + frame_bury 29 + // smart_contracts/abstracted_account/contract.algo.ts:320-323 + // const allowanceKey: AllowanceKey = { + // escrow, + // asset: fundsRequests[i].asset + // } + itob + bytec 13 // 0x000a + swap + concat + frame_dig 1 + concat + // smart_contracts/abstracted_account/contract.algo.ts:39 + // allowances = BoxMap({ keyPrefix: AbstractAccountBoxPrefixAllowances }) // 38_500 + bytec 14 // "a" + swap + concat + dup + frame_bury 3 + // smart_contracts/abstracted_account/contract.algo.ts:349 + // assert(this.allowances(key).exists, ERR_ALLOWANCE_DOES_NOT_EXIST); + dup + box_len + bury 1 + assert // allowance does not exist + // smart_contracts/abstracted_account/contract.algo.ts:350 + // const { type, spent, amount, last, max, interval, start, useRounds } = this.allowances(key).value + box_get + pop + dup + extract 0 1 + frame_bury 10 + dup + pushint 17 // 17 + extract_uint64 + frame_bury 26 + dup + pushint 9 // 9 + extract_uint64 + frame_bury 11 + dup + pushint 33 // 33 + extract_uint64 + frame_bury 19 + dup + intc_1 // 1 + extract_uint64 + frame_bury 21 + dup + pushint 25 // 25 + extract_uint64 + frame_bury 17 + dup + pushint 41 // 41 + extract_uint64 + frame_bury 27 + pushint 392 // 392 + getbit + dup + frame_bury 28 + // smart_contracts/abstracted_account/contract.algo.ts:351 + // const newLast = useRounds ? Global.round : Global.latestTimestamp; + bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_false@59 + global Round + frame_bury 24 + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_merge@60: + // smart_contracts/abstracted_account/contract.algo.ts:353 + // if (type === SpendAllowanceTypeFlat) { + frame_dig 10 + bytec 15 // 0x01 + == + bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_else_body@62 + // smart_contracts/abstracted_account/contract.algo.ts:354 + // const leftover: uint64 = amount - spent; + frame_dig 11 + frame_dig 26 + - + // smart_contracts/abstracted_account/contract.algo.ts:355 + // assert(leftover >= fundRequest.amount, ERR_ALLOWANCE_EXCEEDED); + frame_dig 0 + intc_3 // 8 + extract_uint64 + swap + dig 1 + >= + assert // allowance exceeded + // smart_contracts/abstracted_account/contract.algo.ts:356 + // this.allowances(key).value.spent += fundRequest.amount + frame_dig 3 + dup + cover 2 + box_get + assert // Box must have value + pushint 17 // 17 + extract_uint64 + + + itob + pushint 17 // 17 + swap + box_replace + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@71: + // smart_contracts/abstracted_account/contract.algo.ts:381 + // this.allowances(key).value.last = newLast + frame_dig 24 + itob + frame_dig 3 + pushint 33 // 33 + uncover 2 + box_replace + // smart_contracts/abstracted_account/contract.algo.ts:327 + // if (fundsRequests[i].asset !== 0) { + frame_dig 29 + bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_else_body@73 + // smart_contracts/abstracted_account/contract.algo.ts:328-335 + // itxn + // .assetTransfer({ + // sender: this.controlledAddress.value, + // assetReceiver: escrowAddress, + // assetAmount: fundsRequests[i].amount, + // xferAsset: fundsRequests[i].asset + // }) + // .submit(); + itxn_begin + // smart_contracts/abstracted_account/contract.algo.ts:330 + // sender: this.controlledAddress.value, + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:18 + // controlledAddress = GlobalState({ key: AbstractAccountGlobalStateKeysControlledAddress }); + bytec_0 // "controlled_address" + // smart_contracts/abstracted_account/contract.algo.ts:330 + // sender: this.controlledAddress.value, + app_global_get_ex + assert // check GlobalState exists + // smart_contracts/abstracted_account/contract.algo.ts:332 + // assetAmount: fundsRequests[i].amount, + frame_dig 0 + intc_3 // 8 + extract_uint64 + frame_dig 29 + itxn_field XferAsset + itxn_field AssetAmount + frame_dig 5 + itxn_field AssetReceiver + itxn_field Sender + // smart_contracts/abstracted_account/contract.algo.ts:328-334 + // itxn + // .assetTransfer({ + // sender: this.controlledAddress.value, + // assetReceiver: escrowAddress, + // assetAmount: fundsRequests[i].amount, + // xferAsset: fundsRequests[i].asset + // }) + pushint 4 // 4 + itxn_field TypeEnum + intc_0 // 0 + itxn_field Fee + // smart_contracts/abstracted_account/contract.algo.ts:328-335 + // itxn + // .assetTransfer({ + // sender: this.controlledAddress.value, + // assetReceiver: escrowAddress, + // assetAmount: fundsRequests[i].amount, + // xferAsset: fundsRequests[i].asset + // }) + // .submit(); + itxn_submit + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@74: + // smart_contracts/abstracted_account/contract.algo.ts:318 + // for (let i: uint64 = 0; i < fundsRequests.length; i += 1) { + frame_dig 16 + intc_1 // 1 + + + frame_bury 16 + b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_while_top@56 + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_else_body@73: + // smart_contracts/abstracted_account/contract.algo.ts:337-343 + // itxn + // .payment({ + // sender: this.controlledAddress.value, + // receiver: escrowAddress, + // amount: fundsRequests[i].amount + // }) + // .submit(); + itxn_begin + // smart_contracts/abstracted_account/contract.algo.ts:339 + // sender: this.controlledAddress.value, + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:18 + // controlledAddress = GlobalState({ key: AbstractAccountGlobalStateKeysControlledAddress }); + bytec_0 // "controlled_address" + // smart_contracts/abstracted_account/contract.algo.ts:339 + // sender: this.controlledAddress.value, + app_global_get_ex + assert // check GlobalState exists + // smart_contracts/abstracted_account/contract.algo.ts:341 + // amount: fundsRequests[i].amount + frame_dig 0 + intc_3 // 8 + extract_uint64 + itxn_field Amount + frame_dig 5 + itxn_field Receiver + itxn_field Sender + // smart_contracts/abstracted_account/contract.algo.ts:337-342 + // itxn + // .payment({ + // sender: this.controlledAddress.value, + // receiver: escrowAddress, + // amount: fundsRequests[i].amount + // }) + intc_1 // 1 + itxn_field TypeEnum + intc_0 // 0 + itxn_field Fee + // smart_contracts/abstracted_account/contract.algo.ts:337-343 + // itxn + // .payment({ + // sender: this.controlledAddress.value, + // receiver: escrowAddress, + // amount: fundsRequests[i].amount + // }) + // .submit(); + itxn_submit + b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@74 + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_else_body@62: + // smart_contracts/abstracted_account/contract.algo.ts:357 + // } else if (type === SpendAllowanceTypeWindow) { + frame_dig 10 + pushbytes 0x02 + == + bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_else_body@66 + // smart_contracts/abstracted_account/contract.algo.ts:385 + // if (useRounds) { + frame_dig 28 + bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@77 + // smart_contracts/abstracted_account/contract.algo.ts:386 + // return Global.round - ((Global.round - start) % interval) + global Round + dup + frame_dig 27 + - + frame_dig 17 + % + - + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_inlined_smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.getLatestWindowStart@78: + // smart_contracts/abstracted_account/contract.algo.ts:360 + // if (currentWindowStart > last) { + frame_dig 19 + > + bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_else_body@65 + // smart_contracts/abstracted_account/contract.algo.ts:361 + // assert(amount >= fundRequest.amount, ERR_ALLOWANCE_EXCEEDED); + frame_dig 0 + dup + extract 8 8 + swap + intc_3 // 8 + extract_uint64 + frame_dig 11 + <= + assert // allowance exceeded + // smart_contracts/abstracted_account/contract.algo.ts:362 + // this.allowances(key).value.spent = fundRequest.amount + frame_dig 3 + pushint 17 // 17 + uncover 2 + box_replace + b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@71 + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_else_body@65: + // smart_contracts/abstracted_account/contract.algo.ts:365 + // const leftover: uint64 = amount - spent; + frame_dig 11 + frame_dig 26 + - + // smart_contracts/abstracted_account/contract.algo.ts:366 + // assert(leftover >= fundRequest.amount, ERR_ALLOWANCE_EXCEEDED); + frame_dig 0 + intc_3 // 8 + extract_uint64 + swap + dig 1 + >= + assert // allowance exceeded + // smart_contracts/abstracted_account/contract.algo.ts:367 + // this.allowances(key).value.spent += fundRequest.amount + frame_dig 3 + dup + cover 2 + box_get + assert // Box must have value + pushint 17 // 17 + extract_uint64 + + + itob + pushint 17 // 17 + swap + box_replace + b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@71 + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@77: + // smart_contracts/abstracted_account/contract.algo.ts:388 + // return Global.latestTimestamp - ((Global.latestTimestamp - start) % interval) + global LatestTimestamp + dup + frame_dig 27 + - + frame_dig 17 + % + - + // smart_contracts/abstracted_account/contract.algo.ts:358 + // const currentWindowStart = this.getLatestWindowStart(useRounds, start, interval) + b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_inlined_smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.getLatestWindowStart@78 + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_else_body@66: + // smart_contracts/abstracted_account/contract.algo.ts:369 + // } else if (type === SpendAllowanceTypeDrip) { + frame_dig 10 + pushbytes 0x03 + == + bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@71 + // smart_contracts/abstracted_account/contract.algo.ts:370 + // const epochRef = useRounds ? Global.round : Global.latestTimestamp; + frame_dig 28 + bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_false@69 + global Round + frame_bury 14 + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_merge@70: + // smart_contracts/abstracted_account/contract.algo.ts:371 + // const passed: uint64 = epochRef - last + frame_dig 14 + frame_dig 19 + - + // smart_contracts/abstracted_account/contract.algo.ts:375 + // const accrued: uint64 = spent + ((passed / interval) * amount) + frame_dig 17 + / + frame_dig 11 + * + frame_dig 26 + + + // smart_contracts/abstracted_account/contract.algo.ts:376 + // const available: uint64 = accrued > max ? max : accrued + dup + frame_dig 21 + dup + cover 3 + > + swap + cover 2 + select + // smart_contracts/abstracted_account/contract.algo.ts:378 + // assert(available >= fundRequest.amount, ERR_ALLOWANCE_EXCEEDED); + frame_dig 0 + intc_3 // 8 + extract_uint64 + dup2 + >= + assert // allowance exceeded + // smart_contracts/abstracted_account/contract.algo.ts:379 + // this.allowances(key).value.spent = (available - fundRequest.amount) + - + itob + frame_dig 3 + pushint 17 // 17 + uncover 2 + box_replace + b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@71 + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_false@69: + // smart_contracts/abstracted_account/contract.algo.ts:370 + // const epochRef = useRounds ? Global.round : Global.latestTimestamp; + global LatestTimestamp + frame_bury 14 + b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_merge@70 + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_false@59: + // smart_contracts/abstracted_account/contract.algo.ts:351 + // const newLast = useRounds ? Global.round : Global.latestTimestamp; + global LatestTimestamp + frame_bury 24 + b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_merge@60 + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@8: + // smart_contracts/abstracted_account/contract.algo.ts:204 + // const { useRounds, useExecutionKey } = this.plugins(key).value + frame_dig 2 + pushint 27 // 27 + intc_1 // 1 + box_extract + dup + intc_1 // 1 + getbit + frame_bury 28 + intc_2 // 2 + getbit + // smart_contracts/abstracted_account/contract.algo.ts:206 + // if (useExecutionKey && !(Txn.sender === this.admin.value)) { + bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@22 + txn Sender + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:16 + // admin = GlobalState({ key: AbstractAccountGlobalStateKeysAdmin }) + bytec_2 // "admin" + // smart_contracts/abstracted_account/contract.algo.ts:206 + // if (useExecutionKey && !(Txn.sender === this.admin.value)) { + app_global_get_ex + assert // check GlobalState exists + == + bnz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@22 + // smart_contracts/abstracted_account/contract.algo.ts:41 + // executions = BoxMap, ExecutionInfo>({ keyPrefix: AbstractAccountBoxPrefixExecutions }) + bytec 8 // "x" + // smart_contracts/abstracted_account/contract.algo.ts:207 + // assert(this.executions(Txn.lease).exists, ERR_EXECUTION_KEY_NOT_FOUND); + txn Lease + // smart_contracts/abstracted_account/contract.algo.ts:41 + // executions = BoxMap, ExecutionInfo>({ keyPrefix: AbstractAccountBoxPrefixExecutions }) + concat + // smart_contracts/abstracted_account/contract.algo.ts:207 + // assert(this.executions(Txn.lease).exists, ERR_EXECUTION_KEY_NOT_FOUND); + box_len + bury 1 + assert // Execution key not found + // smart_contracts/abstracted_account/contract.algo.ts:41 + // executions = BoxMap, ExecutionInfo>({ keyPrefix: AbstractAccountBoxPrefixExecutions }) + bytec 8 // "x" + // smart_contracts/abstracted_account/contract.algo.ts:208 + // assert(this.executions(Txn.lease).value.firstValid <= Global.round, ERR_EXECUTION_NOT_READY); + txn Lease + // smart_contracts/abstracted_account/contract.algo.ts:41 + // executions = BoxMap, ExecutionInfo>({ keyPrefix: AbstractAccountBoxPrefixExecutions }) + concat + // smart_contracts/abstracted_account/contract.algo.ts:208 + // assert(this.executions(Txn.lease).value.firstValid <= Global.round, ERR_EXECUTION_NOT_READY); + intc_2 // 2 + intc_3 // 8 + box_extract + btoi + global Round + <= + assert // Execution key not ready + // smart_contracts/abstracted_account/contract.algo.ts:41 + // executions = BoxMap, ExecutionInfo>({ keyPrefix: AbstractAccountBoxPrefixExecutions }) + bytec 8 // "x" + // smart_contracts/abstracted_account/contract.algo.ts:209 + // assert(this.executions(Txn.lease).value.lastValid >= Global.round, ERR_EXECUTION_EXPIRED); + txn Lease + // smart_contracts/abstracted_account/contract.algo.ts:41 + // executions = BoxMap, ExecutionInfo>({ keyPrefix: AbstractAccountBoxPrefixExecutions }) + concat + // smart_contracts/abstracted_account/contract.algo.ts:209 + // assert(this.executions(Txn.lease).value.lastValid >= Global.round, ERR_EXECUTION_EXPIRED); + pushint 10 // 10 + intc_3 // 8 + box_extract + btoi + global Round + >= + assert // Execution key expired + // smart_contracts/abstracted_account/contract.algo.ts:41 + // executions = BoxMap, ExecutionInfo>({ keyPrefix: AbstractAccountBoxPrefixExecutions }) + bytec 8 // "x" + // smart_contracts/abstracted_account/contract.algo.ts:211 + // const groups = this.executions(Txn.lease).value.groups as Readonly[]>; + txn Lease + // smart_contracts/abstracted_account/contract.algo.ts:41 + // executions = BoxMap, ExecutionInfo>({ keyPrefix: AbstractAccountBoxPrefixExecutions }) + concat + frame_bury 4 + // smart_contracts/abstracted_account/contract.algo.ts:213 + // let foundGroup = false; + intc_0 // 0 + frame_bury 15 + // smart_contracts/abstracted_account/contract.algo.ts:214 + // for (let i: uint64 = 0; i < groups.length; i += 1) { + intc_0 // 0 + frame_bury 16 + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_while_top@17: + // smart_contracts/abstracted_account/contract.algo.ts:214 + // for (let i: uint64 = 0; i < groups.length; i += 1) { + frame_dig 4 + pushint 18 // 18 + intc_2 // 2 + box_extract + btoi + frame_dig 16 + > + bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_while@21 + // smart_contracts/abstracted_account/contract.algo.ts:215 + // if (groups[i] === Global.groupId) { + frame_dig 16 + pushint 32 // 32 + * + pushint 20 // 20 + + + frame_dig 4 + swap + pushint 32 // 32 + box_extract + global GroupID + == + bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@20 + // smart_contracts/abstracted_account/contract.algo.ts:216 + // foundGroup = true; + intc_1 // 1 + frame_bury 15 + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@20: + // smart_contracts/abstracted_account/contract.algo.ts:214 + // for (let i: uint64 = 0; i < groups.length; i += 1) { + frame_dig 16 + intc_1 // 1 + + + frame_bury 16 + b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_while_top@17 + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_while@21: + // smart_contracts/abstracted_account/contract.algo.ts:220 + // assert(foundGroup, ERR_GROUP_NOT_FOUND); + frame_dig 15 + assert // Group not found + // smart_contracts/abstracted_account/contract.algo.ts:41 + // executions = BoxMap, ExecutionInfo>({ keyPrefix: AbstractAccountBoxPrefixExecutions }) + bytec 8 // "x" + // smart_contracts/abstracted_account/contract.algo.ts:221 + // this.executions(Txn.lease).delete(); + txn Lease + // smart_contracts/abstracted_account/contract.algo.ts:41 + // executions = BoxMap, ExecutionInfo>({ keyPrefix: AbstractAccountBoxPrefixExecutions }) + concat + // smart_contracts/abstracted_account/contract.algo.ts:221 + // this.executions(Txn.lease).delete(); + box_del + pop + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@22: + // smart_contracts/abstracted_account/contract.algo.ts:224 + // const initialCheck = this.pluginCheck(key); + frame_dig 6 + callsub pluginCheck + frame_bury 6 + // smart_contracts/abstracted_account/contract.algo.ts:226 + // assert(initialCheck.exists, ERR_PLUGIN_DOES_NOT_EXIST); + dup + intc_0 // 0 + getbit + assert // plugin does not exist + // smart_contracts/abstracted_account/contract.algo.ts:227 + // assert(!initialCheck.expired, ERR_PLUGIN_EXPIRED); + dup + intc_1 // 1 + getbit + ! + assert // plugin expired + // smart_contracts/abstracted_account/contract.algo.ts:228 + // assert(!initialCheck.onCooldown, ERR_PLUGIN_ON_COOLDOWN); + intc_2 // 2 + getbit + ! + assert // plugin on cooldown + // smart_contracts/abstracted_account/contract.algo.ts:230-232 + // const epochRef = useRounds + // ? Global.round + // : Global.latestTimestamp; + frame_dig 28 + bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_false@24 + // smart_contracts/abstracted_account/contract.algo.ts:231 + // ? Global.round + global Round + frame_bury 14 + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_merge@25: + // smart_contracts/abstracted_account/contract.algo.ts:234 + // let rekeysBack = false; + intc_0 // 0 + frame_bury 25 + // smart_contracts/abstracted_account/contract.algo.ts:235 + // let methodIndex: uint64 = 0; + intc_0 // 0 + frame_bury 22 + // smart_contracts/abstracted_account/contract.algo.ts:237 + // for (let i: uint64 = (Txn.groupIndex + 1); i < Global.groupSize; i += 1) { + txn GroupIndex + intc_1 // 1 + + + frame_bury 18 + frame_dig 6 + frame_bury 7 + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_while_top@26: + // smart_contracts/abstracted_account/contract.algo.ts:237 + // for (let i: uint64 = (Txn.groupIndex + 1); i < Global.groupSize; i += 1) { + frame_dig 18 + global GroupSize + < + bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_block@53 + // smart_contracts/abstracted_account/contract.algo.ts:240 + // if (this.txnRekeysBack(txn)) { + frame_dig 18 + callsub txnRekeysBack + bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@29 + // smart_contracts/abstracted_account/contract.algo.ts:241 + // rekeysBack = true; + intc_1 // 1 + frame_bury 25 + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_block@53: + // smart_contracts/abstracted_account/contract.algo.ts:271 + // assert(rekeysBack, ERR_MISSING_REKEY_BACK); + frame_dig 25 + assert // missing rekey back + // smart_contracts/abstracted_account/contract.algo.ts:593-600 + // itxn + // .payment({ + // sender: this.spendingAddress.value, + // receiver: this.spendingAddress.value, + // rekeyTo: pluginApp.address, + // note: 'rekeying to plugin app' + // }) + // .submit(); + itxn_begin + // smart_contracts/abstracted_account/contract.algo.ts:595 + // sender: this.spendingAddress.value, + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:26 + // spendingAddress = GlobalState({ key: AbstractAccountGlobalStateKeysSpendingAddress }) + bytec 11 // "spending_address" + // smart_contracts/abstracted_account/contract.algo.ts:595 + // sender: this.spendingAddress.value, + app_global_get_ex + assert // check GlobalState exists + // smart_contracts/abstracted_account/contract.algo.ts:597 + // rekeyTo: pluginApp.address, + frame_dig -5 + app_params_get AppAddress + assert // application exists + // smart_contracts/abstracted_account/contract.algo.ts:598 + // note: 'rekeying to plugin app' + pushbytes "rekeying to plugin app" + itxn_field Note + itxn_field RekeyTo + dup + itxn_field Receiver + itxn_field Sender + // smart_contracts/abstracted_account/contract.algo.ts:593-599 + // itxn + // .payment({ + // sender: this.spendingAddress.value, + // receiver: this.spendingAddress.value, + // rekeyTo: pluginApp.address, + // note: 'rekeying to plugin app' + // }) + intc_1 // 1 + itxn_field TypeEnum + intc_0 // 0 + itxn_field Fee + // smart_contracts/abstracted_account/contract.algo.ts:593-600 + // itxn + // .payment({ + // sender: this.spendingAddress.value, + // receiver: this.spendingAddress.value, + // rekeyTo: pluginApp.address, + // note: 'rekeying to plugin app' + // }) + // .submit(); + itxn_submit + // smart_contracts/abstracted_account/contract.algo.ts:30 + // rekeyIndex = GlobalState({ initialValue: 0, key: AbstractAccountGlobalStateKeysRekeyIndex }) + bytec 17 // "rekey_index" + // smart_contracts/abstracted_account/contract.algo.ts:603 + // this.rekeyIndex.value = Txn.groupIndex + txn GroupIndex + app_global_put + // smart_contracts/abstracted_account/contract.algo.ts:33 + // plugins = BoxMap({ keyPrefix: AbstractAccountBoxPrefixPlugins }); + bytec 4 // "p" + frame_dig 7 + concat + // smart_contracts/abstracted_account/contract.algo.ts:605 + // if (this.plugins(key).value.delegationType === DelegationTypeSelf) { + intc_3 // 8 + intc_1 // 1 + box_extract + bytec 15 // 0x01 + == + bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@13 + // smart_contracts/abstracted_account/contract.algo.ts:20 + // lastUserInteraction = GlobalState({ key: AbstractAccountGlobalStateKeysLastUserInteraction }) + bytec_3 // "last_user_interaction" + // smart_contracts/abstracted_account/contract.algo.ts:44 + // this.lastUserInteraction.value = Global.latestTimestamp + global LatestTimestamp + app_global_put + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@13: + frame_dig -2 + frame_dig -1 + frame_bury 1 + frame_bury 0 + retsub + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@29: + // smart_contracts/abstracted_account/contract.algo.ts:245 + // if (txn.type !== TransactionType.ApplicationCall) { + frame_dig 18 + gtxns TypeEnum + pushint 6 // 6 + != + bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@31 + frame_dig 7 + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_block@51: + // smart_contracts/abstracted_account/contract.algo.ts:237 + // for (let i: uint64 = (Txn.groupIndex + 1); i < Global.groupSize; i += 1) { + frame_dig 18 + intc_1 // 1 + + + frame_bury 18 + frame_bury 7 + b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_while_top@26 + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@31: + // smart_contracts/abstracted_account/contract.algo.ts:249 + // assert(txn.appId.id === key.plugin, ERR_CANNOT_CALL_OTHER_APPS_DURING_REKEY); + frame_dig 18 + dup + gtxns ApplicationID + frame_dig 6 + dup + cover 3 + intc_0 // 0 + extract_uint64 + == + assert // cannot call other apps during rekey + // smart_contracts/abstracted_account/contract.algo.ts:250 + // assert(txn.onCompletion === OnCompleteAction.NoOp, ERR_INVALID_ONCOMPLETE); + dup + gtxns OnCompletion + ! + assert // invalid oncomplete must be no op + // smart_contracts/abstracted_account/contract.algo.ts:253 + // assert(txn.numAppArgs > 1, ERR_INVALID_SENDER_ARG); + dup + gtxns NumAppArgs + intc_1 // 1 + > + assert // invalid sender must be this app id + // smart_contracts/abstracted_account/contract.algo.ts:254 + // assert(Application(btoi(txn.appArgs(1))) === Global.currentApplicationId, ERR_INVALID_SENDER_VALUE); + intc_1 // 1 + gtxnsas ApplicationArgs + btoi + global CurrentApplicationID + == + assert // invalid sender app id + // smart_contracts/abstracted_account/contract.algo.ts:256 + // const { expired, onCooldown, hasMethodRestrictions } = this.pluginCheck(key); + callsub pluginCheck + frame_bury 6 + dup + intc_1 // 1 + getbit + dig 1 + intc_2 // 2 + getbit + uncover 2 + pushint 3 // 3 + getbit + // smart_contracts/abstracted_account/contract.algo.ts:258 + // assert(!expired, ERR_PLUGIN_EXPIRED); + uncover 2 + ! + assert // plugin expired + // smart_contracts/abstracted_account/contract.algo.ts:259 + // assert(!onCooldown, ERR_PLUGIN_ON_COOLDOWN); + swap + ! + assert // plugin on cooldown + // smart_contracts/abstracted_account/contract.algo.ts:261 + // if (hasMethodRestrictions) { + bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@50 + // smart_contracts/abstracted_account/contract.algo.ts:262 + // assert(methodIndex < methodOffsets.length, ERR_MALFORMED_OFFSETS); + frame_dig -2 + intc_0 // 0 + extract_uint16 + frame_dig 22 + dup + uncover 2 + < + assert // malformed method offsets + // smart_contracts/abstracted_account/contract.algo.ts:263 + // const { methodAllowed, methodOnCooldown } = this.methodCheck(key, txn, methodOffsets[methodIndex]); + frame_dig -2 + extract 2 0 + swap + intc_3 // 8 + * + extract_uint64 + // smart_contracts/abstracted_account/contract.algo.ts:284 + // assert(len(txn.appArgs(0)) === 4, ERR_INVALID_METHOD_SIGNATURE_LENGTH) + frame_dig 18 + intc_0 // 0 + gtxnsas ApplicationArgs + dup + frame_bury 9 + len + pushint 4 // 4 + == + assert // invalid method signature length + // smart_contracts/abstracted_account/contract.algo.ts:33 + // plugins = BoxMap({ keyPrefix: AbstractAccountBoxPrefixPlugins }); + bytec 4 // "p" + frame_dig 6 + concat + dup + frame_bury 2 + // smart_contracts/abstracted_account/contract.algo.ts:287 + // const { useRounds } = this.plugins(key).value + dup + pushint 27 // 27 + intc_1 // 1 + box_extract + intc_1 // 1 + getbit + dup + cover 2 + frame_bury 28 + // smart_contracts/abstracted_account/contract.algo.ts:288 + // const { selector, cooldown, lastCalled } = this.plugins(key).value.methods[offset] + uncover 2 + pushint 20 // 20 + * + dup + frame_bury 12 + pushint 46 // 46 + + + pushint 20 // 20 + box_extract + dup + extract 0 4 + frame_bury 8 + dup + pushint 4 // 4 + extract_uint64 + frame_bury 13 + pushint 12 // 12 + extract_uint64 + frame_bury 20 + // smart_contracts/abstracted_account/contract.algo.ts:292 + // const epochRef = useRounds ? Global.round : Global.latestTimestamp + bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_false@34 + global Round + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_merge@35: + // smart_contracts/abstracted_account/contract.algo.ts:293 + // const methodOnCooldown = (epochRef - lastCalled) < cooldown + frame_dig 20 + - + frame_dig 13 + < + frame_bury 23 + // smart_contracts/abstracted_account/contract.algo.ts:295 + // if (selector === selectorArg && (!hasCooldown || !methodOnCooldown)) { + frame_dig 8 + frame_dig 9 + == + bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@44 + frame_dig 13 + bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_if_body@38 + frame_dig 23 + bnz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@44 + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_if_body@38: + // smart_contracts/abstracted_account/contract.algo.ts:297 + // if (hasCooldown) { + frame_dig 13 + bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@43 + // smart_contracts/abstracted_account/contract.algo.ts:298 + // const lastCalled = useRounds ? Global.round : Global.latestTimestamp; + frame_dig 28 + bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_false@41 + global Round + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_merge@42: + // smart_contracts/abstracted_account/contract.algo.ts:299 + // this.plugins(key).value.methods[offset].lastCalled = lastCalled + itob + frame_dig 12 + pushint 58 // 58 + + + frame_dig 2 + swap + uncover 2 + box_replace + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@43: + // smart_contracts/abstracted_account/contract.algo.ts:302-305 + // return { + // methodAllowed: true, + // methodOnCooldown + // } + pushbytes 0x80 + intc_1 // 1 + frame_dig 23 + setbit + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_inlined_smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.methodCheck@45: + // smart_contracts/abstracted_account/contract.algo.ts:263 + // const { methodAllowed, methodOnCooldown } = this.methodCheck(key, txn, methodOffsets[methodIndex]); + dup + intc_0 // 0 + getbit + swap + intc_1 // 1 + getbit + frame_bury 23 + // smart_contracts/abstracted_account/contract.algo.ts:264 + // assert(methodAllowed && !methodOnCooldown, ERR_METHOD_ON_COOLDOWN); + bz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_bool_false@48 + frame_dig 23 + bnz smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_bool_false@48 + intc_1 // 1 + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_bool_merge@49: + // smart_contracts/abstracted_account/contract.algo.ts:264 + // assert(methodAllowed && !methodOnCooldown, ERR_METHOD_ON_COOLDOWN); + assert // method on cooldown + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@50: + // smart_contracts/abstracted_account/contract.algo.ts:33 + // plugins = BoxMap({ keyPrefix: AbstractAccountBoxPrefixPlugins }); + bytec 4 // "p" + frame_dig 6 + dup + cover 2 + concat + // smart_contracts/abstracted_account/contract.algo.ts:267 + // this.plugins(key).value.lastCalled = epochRef + frame_dig 14 + itob + pushint 28 // 28 + swap + box_replace + // smart_contracts/abstracted_account/contract.algo.ts:268 + // methodIndex += 1; + frame_dig 22 + intc_1 // 1 + + + frame_bury 22 + b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_block@51 + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_bool_false@48: + intc_0 // 0 + b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_bool_merge@49 + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_false@41: + // smart_contracts/abstracted_account/contract.algo.ts:298 + // const lastCalled = useRounds ? Global.round : Global.latestTimestamp; + global LatestTimestamp + b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_merge@42 + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@44: + // smart_contracts/abstracted_account/contract.algo.ts:308-311 + // return { + // methodAllowed: false, + // methodOnCooldown: true + // } + pushbytes 0x40 + // smart_contracts/abstracted_account/contract.algo.ts:263 + // const { methodAllowed, methodOnCooldown } = this.methodCheck(key, txn, methodOffsets[methodIndex]); + b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_inlined_smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.methodCheck@45 + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_false@34: + // smart_contracts/abstracted_account/contract.algo.ts:292 + // const epochRef = useRounds ? Global.round : Global.latestTimestamp + global LatestTimestamp + b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_merge@35 + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_false@24: + // smart_contracts/abstracted_account/contract.algo.ts:232 + // : Global.latestTimestamp; + global LatestTimestamp + frame_bury 14 + b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_merge@25 + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_else_body@7: + // smart_contracts/abstracted_account/contract.algo.ts:588 + // this.spendingAddress.value = this.controlledAddress.value + intc_0 // 0 + // smart_contracts/abstracted_account/contract.algo.ts:18 + // controlledAddress = GlobalState({ key: AbstractAccountGlobalStateKeysControlledAddress }); + bytec_0 // "controlled_address" + // smart_contracts/abstracted_account/contract.algo.ts:588 + // this.spendingAddress.value = this.controlledAddress.value + app_global_get_ex + assert // check GlobalState exists + // smart_contracts/abstracted_account/contract.algo.ts:26 + // spendingAddress = GlobalState({ key: AbstractAccountGlobalStateKeysSpendingAddress }) + bytec 11 // "spending_address" + // smart_contracts/abstracted_account/contract.algo.ts:588 + // this.spendingAddress.value = this.controlledAddress.value + swap + app_global_put + b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_after_if_else@8 + +smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_false@2: + // smart_contracts/abstracted_account/contract.algo.ts:575 + // const caller = global ? Global.zeroAddress : Txn.sender + txn Sender + b smart_contracts/abstracted_account/contract.algo.ts::AbstractedAccount.arc58_rekeyToPlugin_ternary_merge@3 diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/abstracted_account/AbstractedAccount.arc32.json b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/abstracted_account/AbstractedAccount.arc32.json new file mode 100644 index 000000000..637ec9b39 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/abstracted_account/AbstractedAccount.arc32.json @@ -0,0 +1,926 @@ +{ + "hints": { + "createApplication(address,address,uint64)void": { + "call_config": { + "no_op": "CREATE" + } + }, + "register(string)void": { + "call_config": { + "no_op": "CALL" + } + }, + "arc58_changeAdmin(address)void": { + "call_config": { + "no_op": "CALL" + } + }, + "arc58_pluginChangeAdmin(address)void": { + "call_config": { + "no_op": "CALL" + } + }, + "arc58_getAdmin()address": { + "read_only": true, + "call_config": { + "no_op": "CALL" + } + }, + "arc58_verifyAuthAddress()void": { + "call_config": { + "no_op": "CALL" + } + }, + "arc58_rekeyTo(address,bool)void": { + "call_config": { + "no_op": "CALL" + } + }, + "arc58_canCall(uint64,bool,address,string,byte[4])bool": { + "read_only": true, + "call_config": { + "no_op": "CALL" + } + }, + "arc58_rekeyToPlugin(uint64,bool,string,uint64[],(uint64,uint64)[])void": { + "call_config": { + "no_op": "CALL" + } + }, + "arc58_rekeyToNamedPlugin(string,bool,string,uint64[],(uint64,uint64)[])void": { + "call_config": { + "no_op": "CALL" + } + }, + "arc58_addPlugin(uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void": { + "call_config": { + "no_op": "CALL" + } + }, + "arc58_removePlugin(uint64,address,string)void": { + "call_config": { + "no_op": "CALL" + } + }, + "arc58_addNamedPlugin(string,uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void": { + "call_config": { + "no_op": "CALL" + } + }, + "arc58_removeNamedPlugin(string)void": { + "call_config": { + "no_op": "CALL" + } + }, + "arc58_newEscrow(string)uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "arc58_toggleEscrowLock(string)(uint64,bool)": { + "call_config": { + "no_op": "CALL" + }, + "structs": { + "output": { + "name": "EscrowInfo", + "elements": [ + [ + "id", + "uint64" + ], + [ + "locked", + "bool" + ] + ] + } + } + }, + "arc58_reclaim(string,(uint64,uint64,bool)[])void": { + "call_config": { + "no_op": "CALL" + } + }, + "arc58_optinEscrow(string,uint64[])void": { + "call_config": { + "no_op": "CALL" + } + }, + "arc58_pluginOptinEscrow(uint64,address,string,uint64[],pay)void": { + "call_config": { + "no_op": "CALL" + } + }, + "arc58_addAllowances(string,(uint64,uint8,uint64,uint64,uint64,bool)[])void": { + "call_config": { + "no_op": "CALL" + } + }, + "arc58_removeAllowances(string,uint64[])void": { + "call_config": { + "no_op": "CALL" + } + }, + "arc58_addExecutionKey(byte[32],byte[32][],uint64,uint64)void": { + "call_config": { + "no_op": "CALL" + } + }, + "arc58_removeExecutionKey(byte[32])void": { + "call_config": { + "no_op": "CALL" + } + }, + "arc58_getPlugins((uint64,address,string)[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]": { + "read_only": true, + "call_config": { + "no_op": "CALL" + } + }, + "arc58_getNamedPlugins(string[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]": { + "read_only": true, + "call_config": { + "no_op": "CALL" + } + }, + "arc58_getEscrows(string[])(uint64,bool)[]": { + "read_only": true, + "call_config": { + "no_op": "CALL" + } + }, + "arc58_getAllowances(string,uint64[])(uint8,uint64,uint64,uint64,uint64,uint64,uint64,bool)[]": { + "read_only": true, + "call_config": { + "no_op": "CALL" + } + }, + "arc58_getExecutions(byte[32][])(byte[32][],uint64,uint64)[]": { + "read_only": true, + "call_config": { + "no_op": "CALL" + } + }, + "mbr(string,uint64,string,uint64)(uint64,uint64,uint64,uint64,uint64,bool,uint64)": { + "read_only": true, + "call_config": { + "no_op": "CALL" + }, + "structs": { + "output": { + "name": "AbstractAccountBoxMBRData", + "elements": [ + [ + "plugins", + "uint64" + ], + [ + "namedPlugins", + "uint64" + ], + [ + "escrows", + "uint64" + ], + [ + "allowances", + "uint64" + ], + [ + "executions", + "uint64" + ], + [ + "escrowExists", + "bool" + ], + [ + "newEscrowMintCost", + "uint64" + ] + ] + } + } + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDIgOCA0MDAgMjE3MDAgMjc3MDAKICAgIGJ5dGVjYmxvY2sgImNvbnRyb2xsZWRfYWRkcmVzcyIgIiIgImFkbWluIiAibGFzdF91c2VyX2ludGVyYWN0aW9uIiAicCIgImUiICJsYXN0X2NoYW5nZSIgMHgxNTFmN2M3NSAieCIgMHgwMCAweDAwMDAgInNwZW5kaW5nX2FkZHJlc3MiIDB4MDAyYSAweDAwMGEgImEiIDB4MDEgIm4iICJyZWtleV9pbmRleCIgImVzY3Jvd19mYWN0b3J5IiAiY3VycmVudF9wbHVnaW4iIDB4MDAwMiAweDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAweDZjYzNmNjA2IDB4MDAyYwogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMwCiAgICAvLyByZWtleUluZGV4ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCwga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNSZWtleUluZGV4IH0pCiAgICBieXRlYyAxNyAvLyAicmVrZXlfaW5kZXgiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEzCiAgICAvLyBleHBvcnQgY2xhc3MgQWJzdHJhY3RlZEFjY291bnQgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJ6IG1haW5fY3JlYXRlX05vT3BAMzQKICAgIHB1c2hieXRlc3MgMHhiZDYwOTllNSAweGQyNGI3NTU2IDB4MTQ3YjZjZDYgMHgxM2JjNDRlNCAvLyBtZXRob2QgInJlZ2lzdGVyKHN0cmluZyl2b2lkIiwgbWV0aG9kICJhcmM1OF9jaGFuZ2VBZG1pbihhZGRyZXNzKXZvaWQiLCBtZXRob2QgImFyYzU4X3BsdWdpbkNoYW5nZUFkbWluKGFkZHJlc3Mpdm9pZCIsIG1ldGhvZCAiYXJjNThfZ2V0QWRtaW4oKWFkZHJlc3MiCiAgICBieXRlYyAyMiAvLyBtZXRob2QgImFyYzU4X3ZlcmlmeUF1dGhBZGRyZXNzKCl2b2lkIgogICAgcHVzaGJ5dGVzcyAweGM5NWE1ZDNkIDB4NDcyN2FmMjEgMHg1ODJmZjM4MiAweGRlZmQ1Y2QyIDB4YjNjODBkZjkgMHhlZWY0NDhmZCAweDM4ZjU5MWVhIDB4ZTM1MGI5ZDQgMHgwYThjYjJjMiAweDI1YjcxM2NhIDB4ZWJhZjE0YTAgMHgxZmRhM2I0ZiAweDlkM2Y4OTE4IDB4YmY0ZDdjNTcgMHhkNWRkMzgyYiAweDVjZWJlZDQzIDB4ZDU4Njg1YWYgMHg3YzM3MTU2ZSAweGFmZmFhNGU4IDB4YTI0MDNkZGYgMHgwMmZlNDUxNSAweDQxYmRjNjgwIDB4NTBmM2UzNWMgLy8gbWV0aG9kICJhcmM1OF9yZWtleVRvKGFkZHJlc3MsYm9vbCl2b2lkIiwgbWV0aG9kICJhcmM1OF9jYW5DYWxsKHVpbnQ2NCxib29sLGFkZHJlc3Msc3RyaW5nLGJ5dGVbNF0pYm9vbCIsIG1ldGhvZCAiYXJjNThfcmVrZXlUb1BsdWdpbih1aW50NjQsYm9vbCxzdHJpbmcsdWludDY0W10sKHVpbnQ2NCx1aW50NjQpW10pdm9pZCIsIG1ldGhvZCAiYXJjNThfcmVrZXlUb05hbWVkUGx1Z2luKHN0cmluZyxib29sLHN0cmluZyx1aW50NjRbXSwodWludDY0LHVpbnQ2NClbXSl2b2lkIiwgbWV0aG9kICJhcmM1OF9hZGRQbHVnaW4odWludDY0LGFkZHJlc3Msc3RyaW5nLGJvb2wsdWludDgsdWludDY0LHVpbnQ2NCwoYnl0ZVs0XSx1aW50NjQpW10sYm9vbCxib29sLGJvb2wpdm9pZCIsIG1ldGhvZCAiYXJjNThfcmVtb3ZlUGx1Z2luKHVpbnQ2NCxhZGRyZXNzLHN0cmluZyl2b2lkIiwgbWV0aG9kICJhcmM1OF9hZGROYW1lZFBsdWdpbihzdHJpbmcsdWludDY0LGFkZHJlc3Msc3RyaW5nLGJvb2wsdWludDgsdWludDY0LHVpbnQ2NCwoYnl0ZVs0XSx1aW50NjQpW10sYm9vbCxib29sLGJvb2wpdm9pZCIsIG1ldGhvZCAiYXJjNThfcmVtb3ZlTmFtZWRQbHVnaW4oc3RyaW5nKXZvaWQiLCBtZXRob2QgImFyYzU4X25ld0VzY3JvdyhzdHJpbmcpdWludDY0IiwgbWV0aG9kICJhcmM1OF90b2dnbGVFc2Nyb3dMb2NrKHN0cmluZykodWludDY0LGJvb2wpIiwgbWV0aG9kICJhcmM1OF9yZWNsYWltKHN0cmluZywodWludDY0LHVpbnQ2NCxib29sKVtdKXZvaWQiLCBtZXRob2QgImFyYzU4X29wdGluRXNjcm93KHN0cmluZyx1aW50NjRbXSl2b2lkIiwgbWV0aG9kICJhcmM1OF9wbHVnaW5PcHRpbkVzY3Jvdyh1aW50NjQsYWRkcmVzcyxzdHJpbmcsdWludDY0W10scGF5KXZvaWQiLCBtZXRob2QgImFyYzU4X2FkZEFsbG93YW5jZXMoc3RyaW5nLCh1aW50NjQsdWludDgsdWludDY0LHVpbnQ2NCx1aW50NjQsYm9vbClbXSl2b2lkIiwgbWV0aG9kICJhcmM1OF9yZW1vdmVBbGxvd2FuY2VzKHN0cmluZyx1aW50NjRbXSl2b2lkIiwgbWV0aG9kICJhcmM1OF9hZGRFeGVjdXRpb25LZXkoYnl0ZVszMl0sYnl0ZVszMl1bXSx1aW50NjQsdWludDY0KXZvaWQiLCBtZXRob2QgImFyYzU4X3JlbW92ZUV4ZWN1dGlvbktleShieXRlWzMyXSl2b2lkIiwgbWV0aG9kICJhcmM1OF9nZXRQbHVnaW5zKCh1aW50NjQsYWRkcmVzcyxzdHJpbmcpW10pKHVpbnQ2NCx1aW50OCx1aW50NjQsdWludDY0LChieXRlWzRdLHVpbnQ2NCx1aW50NjQpW10sYm9vbCxib29sLGJvb2wsdWludDY0LHVpbnQ2NClbXSIsIG1ldGhvZCAiYXJjNThfZ2V0TmFtZWRQbHVnaW5zKHN0cmluZ1tdKSh1aW50NjQsdWludDgsdWludDY0LHVpbnQ2NCwoYnl0ZVs0XSx1aW50NjQsdWludDY0KVtdLGJvb2wsYm9vbCxib29sLHVpbnQ2NCx1aW50NjQpW10iLCBtZXRob2QgImFyYzU4X2dldEVzY3Jvd3Moc3RyaW5nW10pKHVpbnQ2NCxib29sKVtdIiwgbWV0aG9kICJhcmM1OF9nZXRBbGxvd2FuY2VzKHN0cmluZyx1aW50NjRbXSkodWludDgsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsYm9vbClbXSIsIG1ldGhvZCAiYXJjNThfZ2V0RXhlY3V0aW9ucyhieXRlWzMyXVtdKShieXRlWzMyXVtdLHVpbnQ2NCx1aW50NjQpW10iLCBtZXRob2QgIm1icihzdHJpbmcsdWludDY0LHN0cmluZyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsYm9vbCx1aW50NjQpIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggcmVnaXN0ZXIgYXJjNThfY2hhbmdlQWRtaW4gYXJjNThfcGx1Z2luQ2hhbmdlQWRtaW4gYXJjNThfZ2V0QWRtaW4gYXJjNThfdmVyaWZ5QXV0aEFkZHJlc3MgYXJjNThfcmVrZXlUbyBhcmM1OF9jYW5DYWxsIGFyYzU4X3Jla2V5VG9QbHVnaW4gYXJjNThfcmVrZXlUb05hbWVkUGx1Z2luIGFyYzU4X2FkZFBsdWdpbiBhcmM1OF9yZW1vdmVQbHVnaW4gYXJjNThfYWRkTmFtZWRQbHVnaW4gYXJjNThfcmVtb3ZlTmFtZWRQbHVnaW4gYXJjNThfbmV3RXNjcm93IGFyYzU4X3RvZ2dsZUVzY3Jvd0xvY2sgYXJjNThfcmVjbGFpbSBhcmM1OF9vcHRpbkVzY3JvdyBhcmM1OF9wbHVnaW5PcHRpbkVzY3JvdyBhcmM1OF9hZGRBbGxvd2FuY2VzIGFyYzU4X3JlbW92ZUFsbG93YW5jZXMgYXJjNThfYWRkRXhlY3V0aW9uS2V5IGFyYzU4X3JlbW92ZUV4ZWN1dGlvbktleSBhcmM1OF9nZXRQbHVnaW5zIGFyYzU4X2dldE5hbWVkUGx1Z2lucyBhcmM1OF9nZXRFc2Nyb3dzIGFyYzU4X2dldEFsbG93YW5jZXMgYXJjNThfZ2V0RXhlY3V0aW9ucyBtYnIKICAgIGVycgoKbWFpbl9jcmVhdGVfTm9PcEAzNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMwogICAgLy8gZXhwb3J0IGNsYXNzIEFic3RyYWN0ZWRBY2NvdW50IGV4dGVuZHMgQ29udHJhY3QgewogICAgcHVzaGJ5dGVzIDB4ZTE4MzYyZTIgLy8gbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbihhZGRyZXNzLGFkZHJlc3MsdWludDY0KXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBjcmVhdGVBcHBsaWNhdGlvbgogICAgZXJyCgoKLy8gX3B1eWFfbGliLmFyYzQuZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50KGFycmF5X2l0ZW1zX2NvdW50OiB1aW50NjQsIGFycmF5X2hlYWRfYW5kX3RhaWw6IGJ5dGVzLCBuZXdfaXRlbXNfY291bnQ6IHVpbnQ2NCwgbmV3X2hlYWRfYW5kX3RhaWw6IGJ5dGVzKSAtPiBieXRlczoKZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50OgogICAgcHJvdG8gNCAxCiAgICBieXRlY18xIC8vICIiCiAgICBkdXAKICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGZyYW1lX2RpZyAtNAogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGludGNfMCAvLyAwCgpkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnRfZm9yX2hlYWRlckAxOgogICAgZnJhbWVfZGlnIDQKICAgIGZyYW1lX2RpZyAzCiAgICA8CiAgICBieiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnRfYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgY292ZXIgMgogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2RpZyAyCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIDEKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfYnVyeSAxCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZnJhbWVfYnVyeSA0CiAgICBiIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9mb3JfaGVhZGVyQDEKCmR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9hZnRlcl9mb3JANDoKICAgIGZyYW1lX2RpZyAtMwogICAgbGVuCiAgICBmcmFtZV9idXJ5IDAKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDQKCmR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9mb3JfaGVhZGVyQDU6CiAgICBmcmFtZV9kaWcgNAogICAgZnJhbWVfZGlnIDIKICAgIDwKICAgIGJ6IGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9hZnRlcl9mb3JAOAogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgNAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfZGlnIDAKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgMQogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDEKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBmcmFtZV9idXJ5IDQKICAgIGIgZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50X2Zvcl9oZWFkZXJANQoKZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50X2FmdGVyX2ZvckA4OgogICAgZnJhbWVfZGlnIC00CiAgICBmcmFtZV9kaWcgLTIKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgMQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMAogICAgc3Vic3RyaW5nMwogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgMgogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5jcmVhdGVBcHBsaWNhdGlvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmNyZWF0ZUFwcGxpY2F0aW9uOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQwOQogICAgLy8gQGFiaW1ldGhvZCh7IG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cG4gMgogICAgbGVuCiAgICBwdXNoaW50IDMyIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50OFszMl0KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgY292ZXIgMgogICAgbGVuCiAgICBwdXNoaW50IDMyIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50OFszMl0KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDEyCiAgICAvLyBUeG4uc2VuZGVyID09PSBjb250cm9sbGVkQWRkcmVzcy5uYXRpdmUKICAgIHR4biBTZW5kZXIKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDEyLTQxMwogICAgLy8gVHhuLnNlbmRlciA9PT0gY29udHJvbGxlZEFkZHJlc3MubmF0aXZlCiAgICAvLyB8fCBUeG4uc2VuZGVyID09PSBhZG1pbi5uYXRpdmUsCiAgICBibnogY3JlYXRlQXBwbGljYXRpb25fYm9vbF90cnVlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0MTMKICAgIC8vIHx8IFR4bi5zZW5kZXIgPT09IGFkbWluLm5hdGl2ZSwKICAgIHR4biBTZW5kZXIKICAgIGRpZyAyCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQxMi00MTMKICAgIC8vIFR4bi5zZW5kZXIgPT09IGNvbnRyb2xsZWRBZGRyZXNzLm5hdGl2ZQogICAgLy8gfHwgVHhuLnNlbmRlciA9PT0gYWRtaW4ubmF0aXZlLAogICAgYnogY3JlYXRlQXBwbGljYXRpb25fYm9vbF9mYWxzZUA0CgpjcmVhdGVBcHBsaWNhdGlvbl9ib29sX3RydWVAMzoKICAgIGludGNfMSAvLyAxCgpjcmVhdGVBcHBsaWNhdGlvbl9ib29sX21lcmdlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDExLTQxNQogICAgLy8gYXNzZXJ0KAogICAgLy8gICBUeG4uc2VuZGVyID09PSBjb250cm9sbGVkQWRkcmVzcy5uYXRpdmUKICAgIC8vICAgfHwgVHhuLnNlbmRlciA9PT0gYWRtaW4ubmF0aXZlLAogICAgLy8gICBFUlJfU0VOREVSX01VU1RfQkVfQURNSU5fT1JfQ09OVFJPTExFRF9BRERSRVNTCiAgICAvLyApOwogICAgYXNzZXJ0IC8vIHNlbmRlciBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkQWRkcmVzcyBvciBhZG1pbgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQxNgogICAgLy8gYXNzZXJ0KGFkbWluICE9PSBjb250cm9sbGVkQWRkcmVzcyk7CiAgICBkaWcgMQogICAgZHVwCiAgICBkaWcgNAogICAgZHVwCiAgICBjb3ZlciAzCiAgICAhPQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIGFkbWluID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0FkbWluIH0pCiAgICBieXRlY18yIC8vICJhZG1pbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0MTgKICAgIC8vIHRoaXMuYWRtaW4udmFsdWUgPSBhZG1pbi5uYXRpdmU7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQxOQogICAgLy8gdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSA9IGNvbnRyb2xsZWRBZGRyZXNzLm5hdGl2ZSA9PT0gR2xvYmFsLnplcm9BZGRyZXNzID8gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MgOiBjb250cm9sbGVkQWRkcmVzcy5uYXRpdmU7CiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgID09CiAgICBieiBjcmVhdGVBcHBsaWNhdGlvbl90ZXJuYXJ5X2ZhbHNlQDcKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgpjcmVhdGVBcHBsaWNhdGlvbl90ZXJuYXJ5X21lcmdlQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGNvbnRyb2xsZWRBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0NvbnRyb2xsZWRBZGRyZXNzIH0pOwogICAgYnl0ZWNfMCAvLyAiY29udHJvbGxlZF9hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQxOQogICAgLy8gdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSA9IGNvbnRyb2xsZWRBZGRyZXNzLm5hdGl2ZSA9PT0gR2xvYmFsLnplcm9BZGRyZXNzID8gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MgOiBjb250cm9sbGVkQWRkcmVzcy5uYXRpdmU7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI0CiAgICAvLyBlc2Nyb3dGYWN0b3J5ID0gR2xvYmFsU3RhdGU8QXBwbGljYXRpb24+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNFc2Nyb3dGYWN0b3J5IH0pCiAgICBieXRlYyAxOCAvLyAiZXNjcm93X2ZhY3RvcnkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDIwCiAgICAvLyB0aGlzLmVzY3Jvd0ZhY3RvcnkudmFsdWUgPSBlc2Nyb3dGYWN0b3J5OwogICAgZGlnIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjYKICAgIC8vIHNwZW5kaW5nQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNTcGVuZGluZ0FkZHJlc3MgfSkKICAgIGJ5dGVjIDExIC8vICJzcGVuZGluZ19hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQyMQogICAgLy8gdGhpcy5zcGVuZGluZ0FkZHJlc3MudmFsdWUgPSBHbG9iYWwuemVyb0FkZHJlc3M7CiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIGxhc3RVc2VySW50ZXJhY3Rpb24gPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNMYXN0VXNlckludGVyYWN0aW9uIH0pCiAgICBieXRlY18zIC8vICJsYXN0X3VzZXJfaW50ZXJhY3Rpb24iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHRoaXMubGFzdFVzZXJJbnRlcmFjdGlvbi52YWx1ZSA9IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjIKICAgIC8vIGxhc3RDaGFuZ2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNMYXN0Q2hhbmdlIH0pCiAgICBieXRlYyA2IC8vICJsYXN0X2NoYW5nZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0OAogICAgLy8gdGhpcy5sYXN0Q2hhbmdlLnZhbHVlID0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0MDkKICAgIC8vIEBhYmltZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgpjcmVhdGVBcHBsaWNhdGlvbl90ZXJuYXJ5X2ZhbHNlQDc6CiAgICBkaWcgMgogICAgYiBjcmVhdGVBcHBsaWNhdGlvbl90ZXJuYXJ5X21lcmdlQDgKCmNyZWF0ZUFwcGxpY2F0aW9uX2Jvb2xfZmFsc2VANDoKICAgIGludGNfMCAvLyAwCiAgICBiIGNyZWF0ZUFwcGxpY2F0aW9uX2Jvb2xfbWVyZ2VANQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQucmVnaXN0ZXJbcm91dGluZ10oKSAtPiB2b2lkOgpyZWdpc3RlcjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0MzEKICAgIC8vIHJlZ2lzdGVyKGVzY3Jvdzogc3RyaW5nKTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdXRmOFtdKQogICAgZXh0cmFjdCAyIDAKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQzMgogICAgLy8gbGV0IGFwcDogdWludDY0ID0gMAogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0MzMKICAgIC8vIGlmIChlc2Nyb3cgIT09ICcnKSB7CiAgICBieXRlY18xIC8vICIiCiAgICAhPQogICAgYnogcmVnaXN0ZXJfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzcKICAgIC8vIGVzY3Jvd3MgPSBCb3hNYXA8c3RyaW5nLCBFc2Nyb3dJbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4RXNjcm93cyB9KQogICAgYnl0ZWMgNSAvLyAiZSIKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0MzQKICAgIC8vIGFzc2VydCh0aGlzLmVzY3Jvd3MoZXNjcm93KS5leGlzdHMsIEVSUl9FU0NST1dfRE9FU19OT1RfRVhJU1QpCiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGVzY3JvdyBkb2VzIG5vdCBleGlzdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQzNQogICAgLy8gYXBwID0gdGhpcy5lc2Nyb3dzKGVzY3JvdykudmFsdWUuaWQKICAgIGJveF9nZXQKICAgIHBvcAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICBidXJ5IDEKCnJlZ2lzdGVyX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0MzgtNDQ3CiAgICAvLyBhYmlDYWxsPHR5cGVvZiBFc2Nyb3dGYWN0b3J5LnByb3RvdHlwZS5yZWdpc3Rlcj4oewogICAgLy8gICBhcHBJZDogdGhpcy5lc2Nyb3dGYWN0b3J5LnZhbHVlLAogICAgLy8gICBhcmdzOiBbCiAgICAvLyAgICAgaXR4bi5wYXltZW50KHsKICAgIC8vICAgICAgIHJlY2VpdmVyOiB0aGlzLmVzY3Jvd0ZhY3RvcnkudmFsdWUuYWRkcmVzcywKICAgIC8vICAgICAgIGFtb3VudDogQVJDNThXYWxsZXRJRHNCeUFjY291bnRzTWJyCiAgICAvLyAgICAgfSksCiAgICAvLyAgICAgYXBwCiAgICAvLyAgIF0KICAgIC8vIH0pCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDQyCiAgICAvLyByZWNlaXZlcjogdGhpcy5lc2Nyb3dGYWN0b3J5LnZhbHVlLmFkZHJlc3MsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI0CiAgICAvLyBlc2Nyb3dGYWN0b3J5ID0gR2xvYmFsU3RhdGU8QXBwbGljYXRpb24+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNFc2Nyb3dGYWN0b3J5IH0pCiAgICBieXRlYyAxOCAvLyAiZXNjcm93X2ZhY3RvcnkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDQyCiAgICAvLyByZWNlaXZlcjogdGhpcy5lc2Nyb3dGYWN0b3J5LnZhbHVlLmFkZHJlc3MsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZHVwCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDQzCiAgICAvLyBhbW91bnQ6IEFSQzU4V2FsbGV0SURzQnlBY2NvdW50c01icgogICAgcHVzaGludCAxMjEwMCAvLyAxMjEwMAogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NDEtNDQ0CiAgICAvLyBpdHhuLnBheW1lbnQoewogICAgLy8gICByZWNlaXZlcjogdGhpcy5lc2Nyb3dGYWN0b3J5LnZhbHVlLmFkZHJlc3MsCiAgICAvLyAgIGFtb3VudDogQVJDNThXYWxsZXRJRHNCeUFjY291bnRzTWJyCiAgICAvLyB9KSwKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0MzgtNDQ3CiAgICAvLyBhYmlDYWxsPHR5cGVvZiBFc2Nyb3dGYWN0b3J5LnByb3RvdHlwZS5yZWdpc3Rlcj4oewogICAgLy8gICBhcHBJZDogdGhpcy5lc2Nyb3dGYWN0b3J5LnZhbHVlLAogICAgLy8gICBhcmdzOiBbCiAgICAvLyAgICAgaXR4bi5wYXltZW50KHsKICAgIC8vICAgICAgIHJlY2VpdmVyOiB0aGlzLmVzY3Jvd0ZhY3RvcnkudmFsdWUuYWRkcmVzcywKICAgIC8vICAgICAgIGFtb3VudDogQVJDNThXYWxsZXRJRHNCeUFjY291bnRzTWJyCiAgICAvLyAgICAgfSksCiAgICAvLyAgICAgYXBwCiAgICAvLyAgIF0KICAgIC8vIH0pCiAgICBpdHhuX25leHQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NDUKICAgIC8vIGFwcAogICAgZGlnIDEKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0MzgtNDQ3CiAgICAvLyBhYmlDYWxsPHR5cGVvZiBFc2Nyb3dGYWN0b3J5LnByb3RvdHlwZS5yZWdpc3Rlcj4oewogICAgLy8gICBhcHBJZDogdGhpcy5lc2Nyb3dGYWN0b3J5LnZhbHVlLAogICAgLy8gICBhcmdzOiBbCiAgICAvLyAgICAgaXR4bi5wYXltZW50KHsKICAgIC8vICAgICAgIHJlY2VpdmVyOiB0aGlzLmVzY3Jvd0ZhY3RvcnkudmFsdWUuYWRkcmVzcywKICAgIC8vICAgICAgIGFtb3VudDogQVJDNThXYWxsZXRJRHNCeUFjY291bnRzTWJyCiAgICAvLyAgICAgfSksCiAgICAvLyAgICAgYXBwCiAgICAvLyAgIF0KICAgIC8vIH0pCiAgICBwdXNoYnl0ZXMgMHg2MDdlNzA0NiAvLyBtZXRob2QgInJlZ2lzdGVyKHBheSx1aW50NjQpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQzMQogICAgLy8gcmVnaXN0ZXIoZXNjcm93OiBzdHJpbmcpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X2NoYW5nZUFkbWluW3JvdXRpbmddKCkgLT4gdm9pZDoKYXJjNThfY2hhbmdlQWRtaW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDU1CiAgICAvLyBhcmM1OF9jaGFuZ2VBZG1pbihuZXdBZG1pbjogQWRkcmVzcyk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ4WzMyXQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ1NgogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuYWRtaW4udmFsdWUsIEVSUl9PTkxZX0FETUlOX0NBTl9DSEFOR0VfQURNSU4pOwogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNgogICAgLy8gYWRtaW4gPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQWRtaW4gfSkKICAgIGJ5dGVjXzIgLy8gImFkbWluIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ1NgogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuYWRtaW4udmFsdWUsIEVSUl9PTkxZX0FETUlOX0NBTl9DSEFOR0VfQURNSU4pOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gb25seSBhZG1pbiBjYW4gY2hhbmdlIHRoZSBhZG1pbiBhY2NvdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIGFkbWluID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0FkbWluIH0pCiAgICBieXRlY18yIC8vICJhZG1pbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NTcKICAgIC8vIHRoaXMuYWRtaW4udmFsdWUgPSBuZXdBZG1pbi5uYXRpdmU7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyBsYXN0VXNlckludGVyYWN0aW9uID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzTGFzdFVzZXJJbnRlcmFjdGlvbiB9KQogICAgYnl0ZWNfMyAvLyAibGFzdF91c2VyX2ludGVyYWN0aW9uIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyB0aGlzLmxhc3RVc2VySW50ZXJhY3Rpb24udmFsdWUgPSBHbG9iYWwubGF0ZXN0VGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIyCiAgICAvLyBsYXN0Q2hhbmdlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzTGFzdENoYW5nZSB9KQogICAgYnl0ZWMgNiAvLyAibGFzdF9jaGFuZ2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIHRoaXMubGFzdENoYW5nZS52YWx1ZSA9IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDU1CiAgICAvLyBhcmM1OF9jaGFuZ2VBZG1pbihuZXdBZG1pbjogQWRkcmVzcyk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcGx1Z2luQ2hhbmdlQWRtaW5bcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF9wbHVnaW5DaGFuZ2VBZG1pbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NzAKICAgIC8vIGFyYzU4X3BsdWdpbkNoYW5nZUFkbWluKG5ld0FkbWluOiBBZGRyZXNzKTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDhbMzJdCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDcxCiAgICAvLyBjb25zdCBrZXkgPSBjbG9uZSh0aGlzLmN1cnJlbnRQbHVnaW4udmFsdWUpCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI4CiAgICAvLyBjdXJyZW50UGx1Z2luID0gR2xvYmFsU3RhdGU8UGx1Z2luS2V5Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ3VycmVudFBsdWdpbiB9KQogICAgYnl0ZWMgMTkgLy8gImN1cnJlbnRfcGx1Z2luIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ3MQogICAgLy8gY29uc3Qga2V5ID0gY2xvbmUodGhpcy5jdXJyZW50UGx1Z2luLnZhbHVlKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NzIKICAgIC8vIGNvbnN0IHsgcGx1Z2luLCBlc2Nyb3cgfSA9IGtleQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIGRpZyAxCiAgICBwdXNoaW50IDQwIC8vIDQwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDIKICAgIGxlbgogICAgZGlnIDMKICAgIGNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDc0CiAgICAvLyBhc3NlcnQoZXNjcm93ID09PSAnJywgRVJSX0FETUlOX1BMVUdJTlNfQ0FOTk9UX1VTRV9FU0NST1dTKTsKICAgIGJ5dGVjXzEgLy8gIiIKICAgID09CiAgICBhc3NlcnQgLy8gYWRtaW4gcGx1Z2lucyBjYW5ub3QgdXNlIGVzY3Jvd3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NzUKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSBBcHBsaWNhdGlvbihwbHVnaW4pLmFkZHJlc3MsIEVSUl9TRU5ERVJfTVVTVF9CRV9BRE1JTl9QTFVHSU4pOwogICAgdHhuIFNlbmRlcgogICAgZGlnIDEKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gc2VuZGVyIG11c3QgYmUgYWRtaW4gcGx1Z2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDc3CiAgICAvLyB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLmF1dGhBZGRyZXNzID09PSBBcHBsaWNhdGlvbihwbHVnaW4pLmFkZHJlc3MsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBjb250cm9sbGVkQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNDb250cm9sbGVkQWRkcmVzcyB9KTsKICAgIGJ5dGVjXzAgLy8gImNvbnRyb2xsZWRfYWRkcmVzcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NzcKICAgIC8vIHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUuYXV0aEFkZHJlc3MgPT09IEFwcGxpY2F0aW9uKHBsdWdpbikuYWRkcmVzcywKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEF1dGhBZGRyCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIHN3YXAKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDc2LTQ3OQogICAgLy8gYXNzZXJ0KAogICAgLy8gICB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLmF1dGhBZGRyZXNzID09PSBBcHBsaWNhdGlvbihwbHVnaW4pLmFkZHJlc3MsCiAgICAvLyAgICdUaGlzIHBsdWdpbiBpcyBub3QgaW4gY29udHJvbCBvZiB0aGUgYWNjb3VudCcKICAgIC8vICk7CiAgICBhc3NlcnQgLy8gVGhpcyBwbHVnaW4gaXMgbm90IGluIGNvbnRyb2wgb2YgdGhlIGFjY291bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozMwogICAgLy8gcGx1Z2lucyA9IEJveE1hcDxQbHVnaW5LZXksIFBsdWdpbkluZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhQbHVnaW5zIH0pOwogICAgYnl0ZWMgNCAvLyAicCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDgyCiAgICAvLyB0aGlzLnBsdWdpbnMoa2V5KS5leGlzdHMgJiYgdGhpcy5wbHVnaW5zKGtleSkudmFsdWUuYWRtaW4sCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJ6IGFyYzU4X3BsdWdpbkNoYW5nZUFkbWluX2Jvb2xfZmFsc2VANAogICAgZHVwCiAgICBwdXNoaW50IDI3IC8vIDI3CiAgICBpbnRjXzEgLy8gMQogICAgYm94X2V4dHJhY3QKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIGJ6IGFyYzU4X3BsdWdpbkNoYW5nZUFkbWluX2Jvb2xfZmFsc2VANAogICAgaW50Y18xIC8vIDEKCmFyYzU4X3BsdWdpbkNoYW5nZUFkbWluX2Jvb2xfbWVyZ2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0ODEtNDg0CiAgICAvLyBhc3NlcnQoCiAgICAvLyAgIHRoaXMucGx1Z2lucyhrZXkpLmV4aXN0cyAmJiB0aGlzLnBsdWdpbnMoa2V5KS52YWx1ZS5hZG1pbiwKICAgIC8vICAgJ1RoaXMgcGx1Z2luIGRvZXMgbm90IGhhdmUgYWRtaW4gcHJpdmlsZWdlcycKICAgIC8vICk7CiAgICBhc3NlcnQgLy8gVGhpcyBwbHVnaW4gZG9lcyBub3QgaGF2ZSBhZG1pbiBwcml2aWxlZ2VzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIGFkbWluID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0FkbWluIH0pCiAgICBieXRlY18yIC8vICJhZG1pbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0ODYKICAgIC8vIHRoaXMuYWRtaW4udmFsdWUgPSBuZXdBZG1pbi5uYXRpdmU7CiAgICBkaWcgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0ODcKICAgIC8vIGlmICh0aGlzLnBsdWdpbnMoa2V5KS52YWx1ZS5kZWxlZ2F0aW9uVHlwZSA9PT0gRGVsZWdhdGlvblR5cGVTZWxmKSB7CiAgICBkdXAKICAgIGludGNfMyAvLyA4CiAgICBpbnRjXzEgLy8gMQogICAgYm94X2V4dHJhY3QKICAgIGJ5dGVjIDE1IC8vIDB4MDEKICAgID09CiAgICBieiBhcmM1OF9wbHVnaW5DaGFuZ2VBZG1pbl9hZnRlcl9pZl9lbHNlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gbGFzdFVzZXJJbnRlcmFjdGlvbiA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0xhc3RVc2VySW50ZXJhY3Rpb24gfSkKICAgIGJ5dGVjXzMgLy8gImxhc3RfdXNlcl9pbnRlcmFjdGlvbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NAogICAgLy8gdGhpcy5sYXN0VXNlckludGVyYWN0aW9uLnZhbHVlID0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgYXBwX2dsb2JhbF9wdXQKCmFyYzU4X3BsdWdpbkNoYW5nZUFkbWluX2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMgogICAgLy8gbGFzdENoYW5nZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0xhc3RDaGFuZ2UgfSkKICAgIGJ5dGVjIDYgLy8gImxhc3RfY2hhbmdlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyB0aGlzLmxhc3RDaGFuZ2UudmFsdWUgPSBHbG9iYWwubGF0ZXN0VGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ3MAogICAgLy8gYXJjNThfcGx1Z2luQ2hhbmdlQWRtaW4obmV3QWRtaW46IEFkZHJlc3MpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmFyYzU4X3BsdWdpbkNoYW5nZUFkbWluX2Jvb2xfZmFsc2VANDoKICAgIGludGNfMCAvLyAwCiAgICBiIGFyYzU4X3BsdWdpbkNoYW5nZUFkbWluX2Jvb2xfbWVyZ2VANQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfZ2V0QWRtaW5bcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF9nZXRBZG1pbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0OTkKICAgIC8vIHJldHVybiBuZXcgQWRkcmVzcyh0aGlzLmFkbWluLnZhbHVlKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIGFkbWluID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0FkbWluIH0pCiAgICBieXRlY18yIC8vICJhZG1pbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0OTkKICAgIC8vIHJldHVybiBuZXcgQWRkcmVzcyh0aGlzLmFkbWluLnZhbHVlKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDk3CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGJ5dGVjIDcgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3ZlcmlmeUF1dGhBZGRyZXNzW3JvdXRpbmddKCkgLT4gdm9pZDoKYXJjNThfdmVyaWZ5QXV0aEFkZHJlc3M6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTA2CiAgICAvLyBhc3NlcnQodGhpcy5zcGVuZGluZ0FkZHJlc3MudmFsdWUuYXV0aEFkZHJlc3MgPT09IHRoaXMuZ2V0QXV0aEFkZHJlc3MoKSk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI2CiAgICAvLyBzcGVuZGluZ0FkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzU3BlbmRpbmdBZGRyZXNzIH0pCiAgICBieXRlYyAxMSAvLyAic3BlbmRpbmdfYWRkcmVzcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1MDYKICAgIC8vIGFzc2VydCh0aGlzLnNwZW5kaW5nQWRkcmVzcy52YWx1ZS5hdXRoQWRkcmVzcyA9PT0gdGhpcy5nZXRBdXRoQWRkcmVzcygpKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBkdXAKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QXV0aEFkZHIKICAgIHN3YXAKICAgIGNvdmVyIDIKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM5NwogICAgLy8gdGhpcy5zcGVuZGluZ0FkZHJlc3MudmFsdWUgPT09IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGNvbnRyb2xsZWRBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0NvbnRyb2xsZWRBZGRyZXNzIH0pOwogICAgYnl0ZWNfMCAvLyAiY29udHJvbGxlZF9hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM5NwogICAgLy8gdGhpcy5zcGVuZGluZ0FkZHJlc3MudmFsdWUgPT09IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM5Ny0zOTgKICAgIC8vIHRoaXMuc3BlbmRpbmdBZGRyZXNzLnZhbHVlID09PSB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlCiAgICAvLyAmJiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgYnogYXJjNThfdmVyaWZ5QXV0aEFkZHJlc3NfdGVybmFyeV9mYWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Mzk4CiAgICAvLyAmJiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29udHJvbGxlZEFkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ29udHJvbGxlZEFkZHJlc3MgfSk7CiAgICBieXRlY18wIC8vICJjb250cm9sbGVkX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Mzk4CiAgICAvLyAmJiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM5Ny0zOTgKICAgIC8vIHRoaXMuc3BlbmRpbmdBZGRyZXNzLnZhbHVlID09PSB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlCiAgICAvLyAmJiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgYnogYXJjNThfdmVyaWZ5QXV0aEFkZHJlc3NfdGVybmFyeV9mYWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Mzk5CiAgICAvLyApID8gR2xvYmFsLnplcm9BZGRyZXNzIDogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwoKYXJjNThfdmVyaWZ5QXV0aEFkZHJlc3NfdGVybmFyeV9tZXJnZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjUwNgogICAgLy8gYXNzZXJ0KHRoaXMuc3BlbmRpbmdBZGRyZXNzLnZhbHVlLmF1dGhBZGRyZXNzID09PSB0aGlzLmdldEF1dGhBZGRyZXNzKCkpOwogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNgogICAgLy8gc3BlbmRpbmdBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c1NwZW5kaW5nQWRkcmVzcyB9KQogICAgYnl0ZWMgMTEgLy8gInNwZW5kaW5nX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTA3CiAgICAvLyB0aGlzLnNwZW5kaW5nQWRkcmVzcy52YWx1ZSA9IEdsb2JhbC56ZXJvQWRkcmVzcwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjUwOAogICAgLy8gdGhpcy5jdXJyZW50UGx1Z2luLnZhbHVlID0geyBwbHVnaW46IDAsIGNhbGxlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsIGVzY3JvdzogJycgfQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGludGNfMCAvLyAwCiAgICBpdG9iCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDAwMmEwMDAwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyOAogICAgLy8gY3VycmVudFBsdWdpbiA9IEdsb2JhbFN0YXRlPFBsdWdpbktleT4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0N1cnJlbnRQbHVnaW4gfSkKICAgIGJ5dGVjIDE5IC8vICJjdXJyZW50X3BsdWdpbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1MDgKICAgIC8vIHRoaXMuY3VycmVudFBsdWdpbi52YWx1ZSA9IHsgcGx1Z2luOiAwLCBjYWxsZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLCBlc2Nyb3c6ICcnIH0KICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzAKICAgIC8vIHJla2V5SW5kZXggPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwLCBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c1Jla2V5SW5kZXggfSkKICAgIGJ5dGVjIDE3IC8vICJyZWtleV9pbmRleCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1MDkKICAgIC8vIHRoaXMucmVrZXlJbmRleC52YWx1ZSA9IDAKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjUwNQogICAgLy8gYXJjNThfdmVyaWZ5QXV0aEFkZHJlc3MoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgphcmM1OF92ZXJpZnlBdXRoQWRkcmVzc190ZXJuYXJ5X2ZhbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Mzk5CiAgICAvLyApID8gR2xvYmFsLnplcm9BZGRyZXNzIDogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBiIGFyYzU4X3ZlcmlmeUF1dGhBZGRyZXNzX3Rlcm5hcnlfbWVyZ2VANQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmFyYzU4X3Jla2V5VG86CiAgICBieXRlY18xIC8vICIiCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1MTgKICAgIC8vIGFyYzU4X3Jla2V5VG8oYWRkcmVzczogQWRkcmVzcywgZmxhc2g6IGJvb2xlYW4pOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDMyIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50OFszMl0KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYm9vbDgKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1MTkKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSB0aGlzLmFkbWluLnZhbHVlLCBFUlJfQURNSU5fT05MWSk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE2CiAgICAvLyBhZG1pbiA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNBZG1pbiB9KQogICAgYnl0ZWNfMiAvLyAiYWRtaW4iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTE5CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSwgRVJSX0FETUlOX09OTFkpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gYWRtaW4gb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjUyMS01MjgKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcjogYWRkcmVzcy5uYXRpdmUsCiAgICAvLyAgICAgcmVrZXlUbzogYWRkcmVzcy5uYXRpdmUsCiAgICAvLyAgICAgbm90ZTogJ3Jla2V5aW5nIGFic3RyYWN0ZWQgYWNjb3VudCcKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjUyMwogICAgLy8gc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29udHJvbGxlZEFkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ29udHJvbGxlZEFkZHJlc3MgfSk7CiAgICBieXRlY18wIC8vICJjb250cm9sbGVkX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTIzCiAgICAvLyBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjUyNgogICAgLy8gbm90ZTogJ3Jla2V5aW5nIGFic3RyYWN0ZWQgYWNjb3VudCcKICAgIHB1c2hieXRlcyAicmVrZXlpbmcgYWJzdHJhY3RlZCBhY2NvdW50IgogICAgaXR4bl9maWVsZCBOb3RlCiAgICBkaWcgMgogICAgaXR4bl9maWVsZCBSZWtleVRvCiAgICB1bmNvdmVyIDIKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTIxLTUyNwogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIHJlY2VpdmVyOiBhZGRyZXNzLm5hdGl2ZSwKICAgIC8vICAgICByZWtleVRvOiBhZGRyZXNzLm5hdGl2ZSwKICAgIC8vICAgICBub3RlOiAncmVrZXlpbmcgYWJzdHJhY3RlZCBhY2NvdW50JwogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjUyMS01MjgKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcjogYWRkcmVzcy5uYXRpdmUsCiAgICAvLyAgICAgcmVrZXlUbzogYWRkcmVzcy5uYXRpdmUsCiAgICAvLyAgICAgbm90ZTogJ3Jla2V5aW5nIGFic3RyYWN0ZWQgYWNjb3VudCcKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1MzAKICAgIC8vIGlmIChmbGFzaCkgdGhpcy5hc3NlcnRSZWtleXNCYWNrKCk7CiAgICBieiBhcmM1OF9yZWtleVRvX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE2MAogICAgLy8gbGV0IHJla2V5c0JhY2sgPSBmYWxzZTsKICAgIGludGNfMCAvLyAwCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNjEKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IChUeG4uZ3JvdXBJbmRleCArIDEpOyBpIDwgR2xvYmFsLmdyb3VwU2l6ZTsgaSArPSAxKSB7CiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgMgoKYXJjNThfcmVrZXlUb193aGlsZV90b3BANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNjEKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IChUeG4uZ3JvdXBJbmRleCArIDEpOyBpIDwgR2xvYmFsLmdyb3VwU2l6ZTsgaSArPSAxKSB7CiAgICBkaWcgMQogICAgZ2xvYmFsIEdyb3VwU2l6ZQogICAgPAogICAgYnogYXJjNThfcmVrZXlUb19ibG9ja0AxMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE2NAogICAgLy8gaWYgKHRoaXMudHhuUmVrZXlzQmFjayh0eG4pKSB7CiAgICBkaWcgMQogICAgY2FsbHN1YiB0eG5SZWtleXNCYWNrCiAgICBieiBhcmM1OF9yZWtleVRvX2FmdGVyX2lmX2Vsc2VAOQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE2NQogICAgLy8gcmVrZXlzQmFjayA9IHRydWU7CiAgICBpbnRjXzEgLy8gMQogICAgYnVyeSAxCgphcmM1OF9yZWtleVRvX2Jsb2NrQDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE3MAogICAgLy8gYXNzZXJ0KHJla2V5c0JhY2ssIEVSUl9NSVNTSU5HX1JFS0VZX0JBQ0spOwogICAgZHVwCiAgICBhc3NlcnQgLy8gbWlzc2luZyByZWtleSBiYWNrCgphcmM1OF9yZWtleVRvX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gbGFzdFVzZXJJbnRlcmFjdGlvbiA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0xhc3RVc2VySW50ZXJhY3Rpb24gfSkKICAgIGJ5dGVjXzMgLy8gImxhc3RfdXNlcl9pbnRlcmFjdGlvbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NAogICAgLy8gdGhpcy5sYXN0VXNlckludGVyYWN0aW9uLnZhbHVlID0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1MTgKICAgIC8vIGFyYzU4X3Jla2V5VG8oYWRkcmVzczogQWRkcmVzcywgZmxhc2g6IGJvb2xlYW4pOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmFyYzU4X3Jla2V5VG9fYWZ0ZXJfaWZfZWxzZUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE2MQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gKFR4bi5ncm91cEluZGV4ICsgMSk7IGkgPCBHbG9iYWwuZ3JvdXBTaXplOyBpICs9IDEpIHsKICAgIGRpZyAxCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAyCiAgICBiIGFyYzU4X3Jla2V5VG9fd2hpbGVfdG9wQDYKCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X2NhbkNhbGxbcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF9jYW5DYWxsOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU0NAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBib29sOAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBjb3ZlciAyCiAgICBsZW4KICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ4WzMyXQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICBzd2FwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGxlbgogICAgcHVzaGludCA0IC8vIDQKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ4WzRdCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTUyCiAgICAvLyBpZiAoZ2xvYmFsKSB7CiAgICBieiBhcmM1OF9jYW5DYWxsX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU1MwogICAgLy8gdGhpcy5wbHVnaW5DYWxsQWxsb3dlZChwbHVnaW4sIEdsb2JhbC56ZXJvQWRkcmVzcywgZXNjcm93LCBtZXRob2QpOwogICAgZGlnIDMKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgZGlnIDMKICAgIGRpZyAzCiAgICBjYWxsc3ViIHBsdWdpbkNhbGxBbGxvd2VkCiAgICBwb3AKCmFyYzU4X2NhbkNhbGxfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU1NQogICAgLy8gcmV0dXJuIHRoaXMucGx1Z2luQ2FsbEFsbG93ZWQocGx1Z2luLCBhZGRyZXNzLm5hdGl2ZSwgZXNjcm93LCBtZXRob2QpOwogICAgZGlnIDMKICAgIGRpZyAzCiAgICBkaWcgMwogICAgZGlnIDMKICAgIGNhbGxzdWIgcGx1Z2luQ2FsbEFsbG93ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1NDQKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgYnl0ZWMgOSAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjIDcgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5bcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF9yZWtleVRvUGx1Z2luOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU2Ny01NzMKICAgIC8vIGFyYzU4X3Jla2V5VG9QbHVnaW4oCiAgICAvLyAgIHBsdWdpbjogdWludDY0LAogICAgLy8gICBnbG9iYWw6IGJvb2xlYW4sCiAgICAvLyAgIGVzY3Jvdzogc3RyaW5nLAogICAgLy8gICBtZXRob2RPZmZzZXRzOiB1aW50NjRbXSwKICAgIC8vICAgZnVuZHNSZXF1ZXN0OiBGdW5kc1JlcXVlc3RbXQogICAgLy8gKTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBib29sOAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3VpbnQ2NFtdKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIHB1c2hpbnQgMTYgLy8gMTYKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuKyh1aW50NjQsdWludDY0KVtdKQogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW4KICAgIHBvcG4gMgogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb05hbWVkUGx1Z2luW3JvdXRpbmddKCkgLT4gdm9pZDoKYXJjNThfcmVrZXlUb05hbWVkUGx1Z2luOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjYxOS02MjQKICAgIC8vIGFyYzU4X3Jla2V5VG9OYW1lZFBsdWdpbigKICAgIC8vICAgbmFtZTogc3RyaW5nLAogICAgLy8gICBnbG9iYWw6IGJvb2xlYW4sCiAgICAvLyAgIGVzY3Jvdzogc3RyaW5nLAogICAgLy8gICBtZXRob2RPZmZzZXRzOiB1aW50NjRbXSwKICAgIC8vICAgZnVuZHNSZXF1ZXN0OiBGdW5kc1JlcXVlc3RbXSk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGJvb2w4CiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdXRmOFtdKQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzMgLy8gOAogICAgKgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdWludDY0W10pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgcHVzaGludCAxNiAvLyAxNgogICAgKgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rKHVpbnQ2NCx1aW50NjQpW10pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzUKICAgIC8vIG5hbWVkUGx1Z2lucyA9IEJveE1hcDxzdHJpbmcsIFBsdWdpbktleT4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeE5hbWVkUGx1Z2lucyB9KTsKICAgIGJ5dGVjIDE2IC8vICJuIgogICAgdW5jb3ZlciA1CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2MjYKICAgIC8vIHRoaXMubmFtZWRQbHVnaW5zKG5hbWUpLnZhbHVlLnBsdWdpbiwKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzMgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2MjUtNjMxCiAgICAvLyB0aGlzLmFyYzU4X3Jla2V5VG9QbHVnaW4oCiAgICAvLyAgIHRoaXMubmFtZWRQbHVnaW5zKG5hbWUpLnZhbHVlLnBsdWdpbiwKICAgIC8vICAgZ2xvYmFsLAogICAgLy8gICBlc2Nyb3csCiAgICAvLyAgIG1ldGhvZE9mZnNldHMsCiAgICAvLyAgIGZ1bmRzUmVxdWVzdAogICAgLy8gKTsKICAgIGNvdmVyIDQKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luCiAgICBwb3BuIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2MTktNjI0CiAgICAvLyBhcmM1OF9yZWtleVRvTmFtZWRQbHVnaW4oCiAgICAvLyAgIG5hbWU6IHN0cmluZywKICAgIC8vICAgZ2xvYmFsOiBib29sZWFuLAogICAgLy8gICBlc2Nyb3c6IHN0cmluZywKICAgIC8vICAgbWV0aG9kT2Zmc2V0czogdWludDY0W10sCiAgICAvLyAgIGZ1bmRzUmVxdWVzdDogRnVuZHNSZXF1ZXN0W10pOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X2FkZFBsdWdpbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmFyYzU4X2FkZFBsdWdpbjoKICAgIGludGNfMCAvLyAwCiAgICBkdXBuIDMKICAgIGJ5dGVjXzEgLy8gIiIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY0OC02NjAKICAgIC8vIGFyYzU4X2FkZFBsdWdpbigKICAgIC8vICAgcGx1Z2luOiB1aW50NjQsCiAgICAvLyAgIGNhbGxlcjogQWRkcmVzcywKICAgIC8vICAgZXNjcm93OiBzdHJpbmcsCiAgICAvLyAgIGFkbWluOiBib29sZWFuLAogICAgLy8gICBkZWxlZ2F0aW9uVHlwZTogVWludDgsCiAgICAvLyAgIGxhc3RWYWxpZDogdWludDY0LAogICAgLy8gICBjb29sZG93bjogdWludDY0LAogICAgLy8gICBtZXRob2RzOiBNZXRob2RSZXN0cmljdGlvbltdLAogICAgLy8gICB1c2VSb3VuZHM6IGJvb2xlYW4sCiAgICAvLyAgIHVzZUV4ZWN1dGlvbktleTogYm9vbGVhbiwKICAgIC8vICAgZGVmYXVsdFRvRXNjcm93OiBib29sZWFuCiAgICAvLyApOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDhbMzJdCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdXRmOFtdKQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYm9vbDgKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDUKICAgIGR1cG4gMgogICAgbGVuCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICBzd2FwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA3CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgc3dhcAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgOAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwCiAgICBjb3ZlciAzCiAgICBwdXNoaW50IDEyIC8vIDEyCiAgICAqCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgc3dhcAogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuKyh1aW50OFs0XSx1aW50NjQpW10pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA5CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGJvb2w4CiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBzd2FwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxMAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBib29sOAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgc3dhcAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYm9vbDgKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2NjEKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSB0aGlzLmFkbWluLnZhbHVlLCBFUlJfQURNSU5fT05MWSk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE2CiAgICAvLyBhZG1pbiA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNBZG1pbiB9KQogICAgYnl0ZWNfMiAvLyAiYWRtaW4iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NjYxCiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSwgRVJSX0FETUlOX09OTFkpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gYWRtaW4gb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY2NAogICAgLy8gZGVsZWdhdGlvblR5cGUgPT09IERlbGVnYXRpb25UeXBlU2VsZiAmJgogICAgYnl0ZWMgMTUgLy8gMHgwMQogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2NjQtNjY1CiAgICAvLyBkZWxlZ2F0aW9uVHlwZSA9PT0gRGVsZWdhdGlvblR5cGVTZWxmICYmCiAgICAvLyBjYWxsZXIubmF0aXZlID09PSBHbG9iYWwuemVyb0FkZHJlc3MKICAgIGJ6IGFyYzU4X2FkZFBsdWdpbl9ib29sX2ZhbHNlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2NjUKICAgIC8vIGNhbGxlci5uYXRpdmUgPT09IEdsb2JhbC56ZXJvQWRkcmVzcwogICAgZGlnIDEwCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NjY0LTY2NQogICAgLy8gZGVsZWdhdGlvblR5cGUgPT09IERlbGVnYXRpb25UeXBlU2VsZiAmJgogICAgLy8gY2FsbGVyLm5hdGl2ZSA9PT0gR2xvYmFsLnplcm9BZGRyZXNzCiAgICBieiBhcmM1OF9hZGRQbHVnaW5fYm9vbF9mYWxzZUA0CiAgICBpbnRjXzEgLy8gMQoKYXJjNThfYWRkUGx1Z2luX2Jvb2xfbWVyZ2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2NjMtNjY2CiAgICAvLyAhKAogICAgLy8gICBkZWxlZ2F0aW9uVHlwZSA9PT0gRGVsZWdhdGlvblR5cGVTZWxmICYmCiAgICAvLyAgIGNhbGxlci5uYXRpdmUgPT09IEdsb2JhbC56ZXJvQWRkcmVzcwogICAgLy8gKSwKICAgICEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2NjItNjY4CiAgICAvLyBhc3NlcnQoCiAgICAvLyAgICEoCiAgICAvLyAgICAgZGVsZWdhdGlvblR5cGUgPT09IERlbGVnYXRpb25UeXBlU2VsZiAmJgogICAgLy8gICAgIGNhbGxlci5uYXRpdmUgPT09IEdsb2JhbC56ZXJvQWRkcmVzcwogICAgLy8gICApLAogICAgLy8gICBFUlJfWkVST19BRERSRVNTX0RFTEVHQVRJT05fVFlQRQogICAgLy8gKQogICAgYXNzZXJ0IC8vIGRlbGVnYXRpb24gdHlwZSBtdXN0IG5vdCBiZSBzZWxmIGZvciBnbG9iYWwgcGx1Z2lucwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY3MS02NzIKICAgIC8vIHVzZUV4ZWN1dGlvbktleSAmJgogICAgLy8gY2FsbGVyLm5hdGl2ZSAhPT0gR2xvYmFsLnplcm9BZGRyZXNzCiAgICBkaWcgMQogICAgYnogYXJjNThfYWRkUGx1Z2luX2Jvb2xfZmFsc2VAOAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY3MgogICAgLy8gY2FsbGVyLm5hdGl2ZSAhPT0gR2xvYmFsLnplcm9BZGRyZXNzCiAgICBkaWcgMTAKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgIT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2NzEtNjcyCiAgICAvLyB1c2VFeGVjdXRpb25LZXkgJiYKICAgIC8vIGNhbGxlci5uYXRpdmUgIT09IEdsb2JhbC56ZXJvQWRkcmVzcwogICAgYnogYXJjNThfYWRkUGx1Z2luX2Jvb2xfZmFsc2VAOAogICAgaW50Y18xIC8vIDEKCmFyYzU4X2FkZFBsdWdpbl9ib29sX21lcmdlQDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NjcwLTY3MwogICAgLy8gISgKICAgIC8vICAgdXNlRXhlY3V0aW9uS2V5ICYmCiAgICAvLyAgIGNhbGxlci5uYXRpdmUgIT09IEdsb2JhbC56ZXJvQWRkcmVzcwogICAgLy8gKSwKICAgICEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2NjktNjc1CiAgICAvLyBhc3NlcnQoCiAgICAvLyAgICEoCiAgICAvLyAgICAgdXNlRXhlY3V0aW9uS2V5ICYmCiAgICAvLyAgICAgY2FsbGVyLm5hdGl2ZSAhPT0gR2xvYmFsLnplcm9BZGRyZXNzCiAgICAvLyAgICksCiAgICAvLyAgIEVSUl9VU0lOR19FWEVDVVRJT05fS0VZX1JFUVVJUkVTX0dMT0JBTAogICAgLy8gKQogICAgYXNzZXJ0IC8vIHVzaW5nIGV4ZWN1dGlvbiBrZXkgcmVxdWlyZXMgZ2xvYmFsIHBsdWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY3OAogICAgLy8gaWYgKGRlZmF1bHRUb0VzY3JvdykgewogICAgZHVwCiAgICBibnogYXJjNThfYWRkUGx1Z2luX2lmX2JvZHlAMTAKICAgIGRpZyA5CiAgICBidXJ5IDE3CgphcmM1OF9hZGRQbHVnaW5fYWZ0ZXJfaWZfZWxzZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2ODMKICAgIC8vIGNvbnN0IGtleTogUGx1Z2luS2V5ID0geyBwbHVnaW4sIGNhbGxlcjogY2FsbGVyLm5hdGl2ZSwgZXNjcm93OiBlc2Nyb3dLZXkgfQogICAgZGlnIDExCiAgICBpdG9iCiAgICBkaWcgMTEKICAgIGNvbmNhdAogICAgZGlnIDE3CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgYnl0ZWMgMTIgLy8gMHgwMDJhCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnVyeSAxNgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY4NQogICAgLy8gbGV0IG1ldGhvZEluZm9zOiBNZXRob2RJbmZvW10gPSBbXQogICAgaW50Y18wIC8vIDAKICAgIGl0b2IKICAgIGJ1cnkgMTgKICAgIGJ5dGVjIDEwIC8vIDB4MDAwMAogICAgYnVyeSAxNQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY4NgogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IG1ldGhvZHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMCAvLyAwCiAgICBidXJ5IDEzCgphcmM1OF9hZGRQbHVnaW5fd2hpbGVfdG9wQDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY4NgogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IG1ldGhvZHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGRpZyAxMgogICAgZGlnIDQKICAgIDwKICAgIGJ6IGFyYzU4X2FkZFBsdWdpbl9hZnRlcl93aGlsZUAxNAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY4NwogICAgLy8gbWV0aG9kSW5mb3MucHVzaCh7IC4uLm1ldGhvZHNbaV0sIGxhc3RDYWxsZWQ6IDAgfSkKICAgIGRpZyA0CiAgICBleHRyYWN0IDIgMAogICAgZGlnIDEzCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIHB1c2hpbnQgMTIgLy8gMTIKICAgICoKICAgIHB1c2hpbnQgMTIgLy8gMTIKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZHVwCiAgICBleHRyYWN0IDAgNAogICAgc3dhcAogICAgZXh0cmFjdCA0IDgKICAgIGRpZyAxCiAgICBsZW4KICAgIHB1c2hpbnQgNCAvLyA0CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgc2l6ZQogICAgY29uY2F0CiAgICBkaWcgMTkKICAgIGNvbmNhdAogICAgZGlnIDE2CiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgY29uY2F0IC8vIG9uIGVycm9yOiBtYXggYXJyYXkgbGVuZ3RoIGV4Y2VlZGVkCiAgICBzd2FwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgcmVwbGFjZTIgMAogICAgYnVyeSAxNgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY4NgogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IG1ldGhvZHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDEzCiAgICBiIGFyYzU4X2FkZFBsdWdpbl93aGlsZV90b3BAMTIKCmFyYzU4X2FkZFBsdWdpbl9hZnRlcl93aGlsZUAxNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2OTAKICAgIC8vIGNvbnN0IGVwb2NoUmVmID0gdXNlUm91bmRzID8gR2xvYmFsLnJvdW5kIDogR2xvYmFsLmxhdGVzdFRpbWVzdGFtcDsKICAgIGRpZyAyCiAgICBieiBhcmM1OF9hZGRQbHVnaW5fdGVybmFyeV9mYWxzZUAxNgogICAgZ2xvYmFsIFJvdW5kCiAgICBidXJ5IDE0CgphcmM1OF9hZGRQbHVnaW5fdGVybmFyeV9tZXJnZUAxNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2OTIKICAgIC8vIGlmICh0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlICE9PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcykgewogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29udHJvbGxlZEFkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ29udHJvbGxlZEFkZHJlc3MgfSk7CiAgICBieXRlY18wIC8vICJjb250cm9sbGVkX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NjkyCiAgICAvLyBpZiAodGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSAhPT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MpIHsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgIT0KICAgIGJ6IGFyYzU4X2FkZFBsdWdpbl9hZnRlcl9pZl9lbHNlQDIwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NjkzLTY5OQogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IHRoaXMucGx1Z2luc01icihlc2Nyb3dLZXksIG1ldGhvZEluZm9zLmxlbmd0aCkKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Njk1CiAgICAvLyBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBjb250cm9sbGVkQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNDb250cm9sbGVkQWRkcmVzcyB9KTsKICAgIGJ5dGVjXzAgLy8gImNvbnRyb2xsZWRfYWRkcmVzcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2OTUKICAgIC8vIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Njk2CiAgICAvLyByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY5NwogICAgLy8gYW1vdW50OiB0aGlzLnBsdWdpbnNNYnIoZXNjcm93S2V5LCBtZXRob2RJbmZvcy5sZW5ndGgpCiAgICBkaWcgMTYKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDE5CiAgICBzd2FwCiAgICBjYWxsc3ViIHBsdWdpbnNNYnIKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY5My02OTgKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiB0aGlzLnBsdWdpbnNNYnIoZXNjcm93S2V5LCBtZXRob2RJbmZvcy5sZW5ndGgpCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NjkzLTY5OQogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IHRoaXMucGx1Z2luc01icihlc2Nyb3dLZXksIG1ldGhvZEluZm9zLmxlbmd0aCkKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAoKYXJjNThfYWRkUGx1Z2luX2FmdGVyX2lmX2Vsc2VAMjA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzAyCiAgICAvLyBjb25zdCBlc2Nyb3dJRCA9IHRoaXMubWF5YmVOZXdFc2Nyb3coZXNjcm93KTsKICAgIGRpZyA5CiAgICBjYWxsc3ViIG1heWJlTmV3RXNjcm93CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzA0LTcxNQogICAgLy8gdGhpcy5wbHVnaW5zKGtleSkudmFsdWUgPSB7CiAgICAvLyAgIGVzY3JvdzogZXNjcm93SUQsCiAgICAvLyAgIGFkbWluLAogICAgLy8gICBkZWxlZ2F0aW9uVHlwZSwKICAgIC8vICAgbGFzdFZhbGlkLAogICAgLy8gICBjb29sZG93biwKICAgIC8vICAgbWV0aG9kczogY2xvbmUobWV0aG9kSW5mb3MpLAogICAgLy8gICB1c2VSb3VuZHMsCiAgICAvLyAgIHVzZUV4ZWN1dGlvbktleSwKICAgIC8vICAgbGFzdENhbGxlZDogMCwKICAgIC8vICAgc3RhcnQ6IGVwb2NoUmVmLAogICAgLy8gfQogICAgaXRvYgogICAgZGlnIDgKICAgIGNvbmNhdAogICAgZGlnIDcKICAgIGl0b2IKICAgIGNvbmNhdAogICAgZGlnIDYKICAgIGl0b2IKICAgIGNvbmNhdAogICAgYnl0ZWMgMjMgLy8gMHgwMDJjCiAgICBjb25jYXQKICAgIGJ5dGVjIDkgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIGRpZyAxMQogICAgc2V0Yml0CiAgICBpbnRjXzEgLy8gMQogICAgZGlnIDUKICAgIHNldGJpdAogICAgaW50Y18yIC8vIDIKICAgIGRpZyA0CiAgICBzZXRiaXQKICAgIGNvbmNhdAogICAgZGlnIDE4CiAgICBjb25jYXQKICAgIGRpZyAxNAogICAgaXRvYgogICAgY29uY2F0CiAgICBkaWcgMTUKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBwbHVnaW5zID0gQm94TWFwPFBsdWdpbktleSwgUGx1Z2luSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeFBsdWdpbnMgfSk7CiAgICBieXRlYyA0IC8vICJwIgogICAgZGlnIDE3CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo3MDQtNzE1CiAgICAvLyB0aGlzLnBsdWdpbnMoa2V5KS52YWx1ZSA9IHsKICAgIC8vICAgZXNjcm93OiBlc2Nyb3dJRCwKICAgIC8vICAgYWRtaW4sCiAgICAvLyAgIGRlbGVnYXRpb25UeXBlLAogICAgLy8gICBsYXN0VmFsaWQsCiAgICAvLyAgIGNvb2xkb3duLAogICAgLy8gICBtZXRob2RzOiBjbG9uZShtZXRob2RJbmZvcyksCiAgICAvLyAgIHVzZVJvdW5kcywKICAgIC8vICAgdXNlRXhlY3V0aW9uS2V5LAogICAgLy8gICBsYXN0Q2FsbGVkOiAwLAogICAgLy8gICBzdGFydDogZXBvY2hSZWYsCiAgICAvLyB9CiAgICBkdXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyBsYXN0VXNlckludGVyYWN0aW9uID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzTGFzdFVzZXJJbnRlcmFjdGlvbiB9KQogICAgYnl0ZWNfMyAvLyAibGFzdF91c2VyX2ludGVyYWN0aW9uIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyB0aGlzLmxhc3RVc2VySW50ZXJhY3Rpb24udmFsdWUgPSBHbG9iYWwubGF0ZXN0VGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIyCiAgICAvLyBsYXN0Q2hhbmdlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzTGFzdENoYW5nZSB9KQogICAgYnl0ZWMgNiAvLyAibGFzdF9jaGFuZ2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIHRoaXMubGFzdENoYW5nZS52YWx1ZSA9IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NjQ4LTY2MAogICAgLy8gYXJjNThfYWRkUGx1Z2luKAogICAgLy8gICBwbHVnaW46IHVpbnQ2NCwKICAgIC8vICAgY2FsbGVyOiBBZGRyZXNzLAogICAgLy8gICBlc2Nyb3c6IHN0cmluZywKICAgIC8vICAgYWRtaW46IGJvb2xlYW4sCiAgICAvLyAgIGRlbGVnYXRpb25UeXBlOiBVaW50OCwKICAgIC8vICAgbGFzdFZhbGlkOiB1aW50NjQsCiAgICAvLyAgIGNvb2xkb3duOiB1aW50NjQsCiAgICAvLyAgIG1ldGhvZHM6IE1ldGhvZFJlc3RyaWN0aW9uW10sCiAgICAvLyAgIHVzZVJvdW5kczogYm9vbGVhbiwKICAgIC8vICAgdXNlRXhlY3V0aW9uS2V5OiBib29sZWFuLAogICAgLy8gICBkZWZhdWx0VG9Fc2Nyb3c6IGJvb2xlYW4KICAgIC8vICk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKYXJjNThfYWRkUGx1Z2luX3Rlcm5hcnlfZmFsc2VAMTY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NjkwCiAgICAvLyBjb25zdCBlcG9jaFJlZiA9IHVzZVJvdW5kcyA/IEdsb2JhbC5yb3VuZCA6IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXA7CiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBidXJ5IDE0CiAgICBiIGFyYzU4X2FkZFBsdWdpbl90ZXJuYXJ5X21lcmdlQDE3CgphcmM1OF9hZGRQbHVnaW5faWZfYm9keUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2NzkKICAgIC8vIGFzc2VydChlc2Nyb3cgIT09ICcnLCBFUlJfRVNDUk9XX1JFUVVJUkVEX1RPX0JFX1NFVF9BU19ERUZBVUxUKQogICAgZGlnIDkKICAgIGJ5dGVjXzEgLy8gIiIKICAgICE9CiAgICBhc3NlcnQgLy8gZXNjcm93IG11c3QgYmUgc2V0IGlmIGRlZmF1bHRUb0VzY3JvdyBpcyB0cnVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NjgwCiAgICAvLyBlc2Nyb3dLZXkgPSAnJwogICAgYnl0ZWNfMSAvLyAiIgogICAgYnVyeSAxNwogICAgYiBhcmM1OF9hZGRQbHVnaW5fYWZ0ZXJfaWZfZWxzZUAxMQoKYXJjNThfYWRkUGx1Z2luX2Jvb2xfZmFsc2VAODoKICAgIGludGNfMCAvLyAwCiAgICBiIGFyYzU4X2FkZFBsdWdpbl9ib29sX21lcmdlQDkKCmFyYzU4X2FkZFBsdWdpbl9ib29sX2ZhbHNlQDQ6CiAgICBpbnRjXzAgLy8gMAogICAgYiBhcmM1OF9hZGRQbHVnaW5fYm9vbF9tZXJnZUA1CgoKLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZW1vdmVQbHVnaW5bcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF9yZW1vdmVQbHVnaW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzI3CiAgICAvLyBhcmM1OF9yZW1vdmVQbHVnaW4ocGx1Z2luOiB1aW50NjQsIGNhbGxlcjogQWRkcmVzcywgZXNjcm93OiBzdHJpbmcpOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDhbMzJdCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdXRmOFtdKQogICAgZXh0cmFjdCAyIDAKICAgIGR1cAogICAgY292ZXIgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjcyOAogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuYWRtaW4udmFsdWUsIEVSUl9BRE1JTl9PTkxZKTsKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIGFkbWluID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0FkbWluIH0pCiAgICBieXRlY18yIC8vICJhZG1pbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo3MjgKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSB0aGlzLmFkbWluLnZhbHVlLCBFUlJfQURNSU5fT05MWSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBhZG1pbiBvbmx5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzMwCiAgICAvLyBjb25zdCBrZXk6IFBsdWdpbktleSA9IHsgcGx1Z2luLCBjYWxsZXI6IGNhbGxlci5uYXRpdmUsIGVzY3JvdyB9CiAgICB1bmNvdmVyIDIKICAgIGl0b2IKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBkaWcgMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGJ5dGVjIDEyIC8vIDB4MDAyYQogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozMwogICAgLy8gcGx1Z2lucyA9IEJveE1hcDxQbHVnaW5LZXksIFBsdWdpbkluZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhQbHVnaW5zIH0pOwogICAgYnl0ZWMgNCAvLyAicCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjczMQogICAgLy8gYXNzZXJ0KHRoaXMucGx1Z2lucyhrZXkpLmV4aXN0cywgRVJSX1BMVUdJTl9ET0VTX05PVF9FWElTVCkKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gcGx1Z2luIGRvZXMgbm90IGV4aXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzMzCiAgICAvLyBjb25zdCBtZXRob2RzTGVuZ3RoOiB1aW50NjQgPSB0aGlzLnBsdWdpbnMoa2V5KS52YWx1ZS5tZXRob2RzLmxlbmd0aAogICAgZHVwCiAgICBwdXNoaW50IDQ0IC8vIDQ0CiAgICBpbnRjXzIgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo3MzUKICAgIC8vIHRoaXMucGx1Z2lucyhrZXkpLmRlbGV0ZSgpOwogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzM3CiAgICAvLyBpZiAodGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSAhPT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MpIHsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGNvbnRyb2xsZWRBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0NvbnRyb2xsZWRBZGRyZXNzIH0pOwogICAgYnl0ZWNfMCAvLyAiY29udHJvbGxlZF9hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjczNwogICAgLy8gaWYgKHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUgIT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzKSB7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgICE9CiAgICBieiBhcmM1OF9yZW1vdmVQbHVnaW5fYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzM4LTc0MwogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgcmVjZWl2ZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgYW1vdW50OiB0aGlzLnBsdWdpbnNNYnIoZXNjcm93LCBtZXRob2RzTGVuZ3RoKQogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo3NDAKICAgIC8vIHJlY2VpdmVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29udHJvbGxlZEFkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ29udHJvbGxlZEFkZHJlc3MgfSk7CiAgICBieXRlY18wIC8vICJjb250cm9sbGVkX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzQwCiAgICAvLyByZWNlaXZlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzQxCiAgICAvLyBhbW91bnQ6IHRoaXMucGx1Z2luc01icihlc2Nyb3csIG1ldGhvZHNMZW5ndGgpCiAgICBkaWcgMgogICAgZGlnIDIKICAgIGNhbGxzdWIgcGx1Z2luc01icgogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo3MzgtNzQyCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICBhbW91bnQ6IHRoaXMucGx1Z2luc01icihlc2Nyb3csIG1ldGhvZHNMZW5ndGgpCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzM4LTc0MwogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgcmVjZWl2ZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgYW1vdW50OiB0aGlzLnBsdWdpbnNNYnIoZXNjcm93LCBtZXRob2RzTGVuZ3RoKQogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CgphcmM1OF9yZW1vdmVQbHVnaW5fYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyBsYXN0VXNlckludGVyYWN0aW9uID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzTGFzdFVzZXJJbnRlcmFjdGlvbiB9KQogICAgYnl0ZWNfMyAvLyAibGFzdF91c2VyX2ludGVyYWN0aW9uIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyB0aGlzLmxhc3RVc2VySW50ZXJhY3Rpb24udmFsdWUgPSBHbG9iYWwubGF0ZXN0VGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIyCiAgICAvLyBsYXN0Q2hhbmdlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzTGFzdENoYW5nZSB9KQogICAgYnl0ZWMgNiAvLyAibGFzdF9jaGFuZ2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIHRoaXMubGFzdENoYW5nZS52YWx1ZSA9IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzI3CiAgICAvLyBhcmM1OF9yZW1vdmVQbHVnaW4ocGx1Z2luOiB1aW50NjQsIGNhbGxlcjogQWRkcmVzcywgZXNjcm93OiBzdHJpbmcpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X2FkZE5hbWVkUGx1Z2luW3JvdXRpbmddKCkgLT4gdm9pZDoKYXJjNThfYWRkTmFtZWRQbHVnaW46CiAgICBpbnRjXzAgLy8gMAogICAgZHVwbiAzCiAgICBieXRlY18xIC8vICIiCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo3NjUtNzc4CiAgICAvLyBhcmM1OF9hZGROYW1lZFBsdWdpbigKICAgIC8vICAgbmFtZTogc3RyaW5nLAogICAgLy8gICBwbHVnaW46IHVpbnQ2NCwKICAgIC8vICAgY2FsbGVyOiBBZGRyZXNzLAogICAgLy8gICBlc2Nyb3c6IHN0cmluZywKICAgIC8vICAgYWRtaW46IGJvb2xlYW4sCiAgICAvLyAgIGRlbGVnYXRpb25UeXBlOiBVaW50OCwKICAgIC8vICAgbGFzdFZhbGlkOiB1aW50NjQsCiAgICAvLyAgIGNvb2xkb3duOiB1aW50NjQsCiAgICAvLyAgIG1ldGhvZHM6IE1ldGhvZFJlc3RyaWN0aW9uW10sCiAgICAvLyAgIHVzZVJvdW5kczogYm9vbGVhbiwKICAgIC8vICAgdXNlRXhlY3V0aW9uS2V5OiBib29sZWFuLAogICAgLy8gICBkZWZhdWx0VG9Fc2Nyb3c6IGJvb2xlYW4KICAgIC8vICk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICBkdXAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICBzd2FwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGxlbgogICAgcHVzaGludCAzMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDhbMzJdCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdXRmOFtdKQogICAgZXh0cmFjdCAyIDAKICAgIHN3YXAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDUKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYm9vbDgKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHN3YXAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIGR1cAogICAgY292ZXIgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50NjQKICAgIGJ0b2kKICAgIGNvdmVyIDIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDgKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICBjb3ZlciAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA5CiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAKICAgIGNvdmVyIDQKICAgIHB1c2hpbnQgMTIgLy8gMTIKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rKHVpbnQ4WzRdLHVpbnQ2NClbXSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEwCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGJvb2w4CiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBjb3ZlciAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBib29sOAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgY292ZXIgMgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYm9vbDgKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIGNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo3NzkKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSB0aGlzLmFkbWluLnZhbHVlLCBFUlJfQURNSU5fT05MWSk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE2CiAgICAvLyBhZG1pbiA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNBZG1pbiB9KQogICAgYnl0ZWNfMiAvLyAiYWRtaW4iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Nzc5CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSwgRVJSX0FETUlOX09OTFkpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gYWRtaW4gb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM1CiAgICAvLyBuYW1lZFBsdWdpbnMgPSBCb3hNYXA8c3RyaW5nLCBQbHVnaW5LZXk+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhOYW1lZFBsdWdpbnMgfSk7CiAgICBieXRlYyAxNiAvLyAibiIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo3ODAKICAgIC8vIGFzc2VydCghdGhpcy5uYW1lZFBsdWdpbnMobmFtZSkuZXhpc3RzKTsKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzgzCiAgICAvLyBkZWxlZ2F0aW9uVHlwZSA9PT0gRGVsZWdhdGlvblR5cGVTZWxmICYmCiAgICBieXRlYyAxNSAvLyAweDAxCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjc4My03ODQKICAgIC8vIGRlbGVnYXRpb25UeXBlID09PSBEZWxlZ2F0aW9uVHlwZVNlbGYgJiYKICAgIC8vIGNhbGxlci5uYXRpdmUgPT09IEdsb2JhbC56ZXJvQWRkcmVzcwogICAgYnogYXJjNThfYWRkTmFtZWRQbHVnaW5fYm9vbF9mYWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Nzg0CiAgICAvLyBjYWxsZXIubmF0aXZlID09PSBHbG9iYWwuemVyb0FkZHJlc3MKICAgIGRpZyAxMQogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjc4My03ODQKICAgIC8vIGRlbGVnYXRpb25UeXBlID09PSBEZWxlZ2F0aW9uVHlwZVNlbGYgJiYKICAgIC8vIGNhbGxlci5uYXRpdmUgPT09IEdsb2JhbC56ZXJvQWRkcmVzcwogICAgYnogYXJjNThfYWRkTmFtZWRQbHVnaW5fYm9vbF9mYWxzZUA0CiAgICBpbnRjXzEgLy8gMQoKYXJjNThfYWRkTmFtZWRQbHVnaW5fYm9vbF9tZXJnZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjc4Mi03ODUKICAgIC8vICEoCiAgICAvLyAgIGRlbGVnYXRpb25UeXBlID09PSBEZWxlZ2F0aW9uVHlwZVNlbGYgJiYKICAgIC8vICAgY2FsbGVyLm5hdGl2ZSA9PT0gR2xvYmFsLnplcm9BZGRyZXNzCiAgICAvLyApLAogICAgIQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjc4MS03ODcKICAgIC8vIGFzc2VydCgKICAgIC8vICAgISgKICAgIC8vICAgICBkZWxlZ2F0aW9uVHlwZSA9PT0gRGVsZWdhdGlvblR5cGVTZWxmICYmCiAgICAvLyAgICAgY2FsbGVyLm5hdGl2ZSA9PT0gR2xvYmFsLnplcm9BZGRyZXNzCiAgICAvLyAgICksCiAgICAvLyAgIEVSUl9aRVJPX0FERFJFU1NfREVMRUdBVElPTl9UWVBFCiAgICAvLyApCiAgICBhc3NlcnQgLy8gZGVsZWdhdGlvbiB0eXBlIG11c3Qgbm90IGJlIHNlbGYgZm9yIGdsb2JhbCBwbHVnaW5zCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzkwLTc5MQogICAgLy8gdXNlRXhlY3V0aW9uS2V5ICYmCiAgICAvLyBjYWxsZXIubmF0aXZlICE9PSBHbG9iYWwuemVyb0FkZHJlc3MKICAgIGRpZyAyCiAgICBieiBhcmM1OF9hZGROYW1lZFBsdWdpbl9ib29sX2ZhbHNlQDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo3OTEKICAgIC8vIGNhbGxlci5uYXRpdmUgIT09IEdsb2JhbC56ZXJvQWRkcmVzcwogICAgZGlnIDExCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgICE9CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzkwLTc5MQogICAgLy8gdXNlRXhlY3V0aW9uS2V5ICYmCiAgICAvLyBjYWxsZXIubmF0aXZlICE9PSBHbG9iYWwuemVyb0FkZHJlc3MKICAgIGJ6IGFyYzU4X2FkZE5hbWVkUGx1Z2luX2Jvb2xfZmFsc2VAOAogICAgaW50Y18xIC8vIDEKCmFyYzU4X2FkZE5hbWVkUGx1Z2luX2Jvb2xfbWVyZ2VAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo3ODktNzkyCiAgICAvLyAhKAogICAgLy8gICB1c2VFeGVjdXRpb25LZXkgJiYKICAgIC8vICAgY2FsbGVyLm5hdGl2ZSAhPT0gR2xvYmFsLnplcm9BZGRyZXNzCiAgICAvLyApLAogICAgIQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjc4OC03OTQKICAgIC8vIGFzc2VydCgKICAgIC8vICAgISgKICAgIC8vICAgICB1c2VFeGVjdXRpb25LZXkgJiYKICAgIC8vICAgICBjYWxsZXIubmF0aXZlICE9PSBHbG9iYWwuemVyb0FkZHJlc3MKICAgIC8vICAgKSwKICAgIC8vICAgRVJSX1VTSU5HX0VYRUNVVElPTl9LRVlfUkVRVUlSRVNfR0xPQkFMCiAgICAvLyApCiAgICBhc3NlcnQgLy8gdXNpbmcgZXhlY3V0aW9uIGtleSByZXF1aXJlcyBnbG9iYWwgcGx1Z2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Nzk3CiAgICAvLyBpZiAoZGVmYXVsdFRvRXNjcm93KSB7CiAgICBkaWcgMQogICAgYm56IGFyYzU4X2FkZE5hbWVkUGx1Z2luX2lmX2JvZHlAMTAKICAgIGRpZyAxMAogICAgYnVyeSAxOQoKYXJjNThfYWRkTmFtZWRQbHVnaW5fYWZ0ZXJfaWZfZWxzZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4MDIKICAgIC8vIGNvbnN0IGtleTogUGx1Z2luS2V5ID0geyBwbHVnaW4sIGNhbGxlcjogY2FsbGVyLm5hdGl2ZSwgZXNjcm93OiBlc2Nyb3dLZXkgfQogICAgZGlnIDEyCiAgICBpdG9iCiAgICBkaWcgMTIKICAgIGNvbmNhdAogICAgZGlnIDE5CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgYnl0ZWMgMTIgLy8gMHgwMDJhCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBidXJ5IDE5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODAzCiAgICAvLyB0aGlzLm5hbWVkUGx1Z2lucyhuYW1lKS52YWx1ZSA9IGNsb25lKGtleSkKICAgIGRpZyAxCiAgICBkdXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjgwNQogICAgLy8gbGV0IG1ldGhvZEluZm9zOiBNZXRob2RJbmZvW10gPSBbXQogICAgaW50Y18wIC8vIDAKICAgIGl0b2IKICAgIGJ1cnkgMjAKICAgIGJ5dGVjIDEwIC8vIDB4MDAwMAogICAgYnVyeSAxNwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjgwNgogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IG1ldGhvZHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMCAvLyAwCiAgICBidXJ5IDE1CgphcmM1OF9hZGROYW1lZFBsdWdpbl93aGlsZV90b3BAMTI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODA2CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7IGkgKz0gMSkgewogICAgZGlnIDE0CiAgICBkaWcgNQogICAgPAogICAgYnogYXJjNThfYWRkTmFtZWRQbHVnaW5fYWZ0ZXJfd2hpbGVAMTQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4MDcKICAgIC8vIG1ldGhvZEluZm9zLnB1c2goeyAuLi5tZXRob2RzW2ldLCBsYXN0Q2FsbGVkOiAwIH0pCiAgICBkaWcgNQogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAxNQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBwdXNoaW50IDEyIC8vIDEyCiAgICAqCiAgICBwdXNoaW50IDEyIC8vIDEyCiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGR1cAogICAgZXh0cmFjdCAwIDQKICAgIHN3YXAKICAgIGV4dHJhY3QgNCA4CiAgICBkaWcgMQogICAgbGVuCiAgICBwdXNoaW50IDQgLy8gNAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHNpemUKICAgIGNvbmNhdAogICAgZGlnIDIxCiAgICBjb25jYXQKICAgIGRpZyAxOAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdCAvLyBvbiBlcnJvcjogbWF4IGFycmF5IGxlbmd0aCBleGNlZWRlZAogICAgc3dhcAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHJlcGxhY2UyIDAKICAgIGJ1cnkgMTgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4MDYKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBtZXRob2RzLmxlbmd0aDsgaSArPSAxKSB7CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAxNQogICAgYiBhcmM1OF9hZGROYW1lZFBsdWdpbl93aGlsZV90b3BAMTIKCmFyYzU4X2FkZE5hbWVkUGx1Z2luX2FmdGVyX3doaWxlQDE0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjgxMAogICAgLy8gaWYgKHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUgIT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzKSB7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBjb250cm9sbGVkQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNDb250cm9sbGVkQWRkcmVzcyB9KTsKICAgIGJ5dGVjXzAgLy8gImNvbnRyb2xsZWRfYWRkcmVzcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4MTAKICAgIC8vIGlmICh0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlICE9PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcykgewogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAhPQogICAgYnogYXJjNThfYWRkTmFtZWRQbHVnaW5fYWZ0ZXJfaWZfZWxzZUAxNwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjgxMS04MTcKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiB0aGlzLnBsdWdpbnNNYnIoZXNjcm93S2V5LCBtZXRob2RJbmZvcy5sZW5ndGgpICsgdGhpcy5uYW1lZFBsdWdpbnNNYnIobmFtZSkKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODEzCiAgICAvLyBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBjb250cm9sbGVkQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNDb250cm9sbGVkQWRkcmVzcyB9KTsKICAgIGJ5dGVjXzAgLy8gImNvbnRyb2xsZWRfYWRkcmVzcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4MTMKICAgIC8vIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODE0CiAgICAvLyByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjgxNQogICAgLy8gYW1vdW50OiB0aGlzLnBsdWdpbnNNYnIoZXNjcm93S2V5LCBtZXRob2RJbmZvcy5sZW5ndGgpICsgdGhpcy5uYW1lZFBsdWdpbnNNYnIobmFtZSkKICAgIGRpZyAxOAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMjEKICAgIHN3YXAKICAgIGNhbGxzdWIgcGx1Z2luc01icgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyByZXR1cm4gTWluTmFtZWRQbHVnaW5NQlIgKyAoQm94Q29zdFBlckJ5dGUgKiBCeXRlcyhuYW1lKS5sZW5ndGgpOwogICAgZGlnIDE2CiAgICBsZW4KICAgIGludGMgNCAvLyA0MDAKICAgICoKICAgIGludGMgNSAvLyAyMTcwMAogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjgxNQogICAgLy8gYW1vdW50OiB0aGlzLnBsdWdpbnNNYnIoZXNjcm93S2V5LCBtZXRob2RJbmZvcy5sZW5ndGgpICsgdGhpcy5uYW1lZFBsdWdpbnNNYnIobmFtZSkKICAgICsKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjgxMS04MTYKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiB0aGlzLnBsdWdpbnNNYnIoZXNjcm93S2V5LCBtZXRob2RJbmZvcy5sZW5ndGgpICsgdGhpcy5uYW1lZFBsdWdpbnNNYnIobmFtZSkKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4MTEtODE3CiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogdGhpcy5wbHVnaW5zTWJyKGVzY3Jvd0tleSwgbWV0aG9kSW5mb3MubGVuZ3RoKSArIHRoaXMubmFtZWRQbHVnaW5zTWJyKG5hbWUpCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKCmFyYzU4X2FkZE5hbWVkUGx1Z2luX2FmdGVyX2lmX2Vsc2VAMTc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODIwCiAgICAvLyBjb25zdCBlc2Nyb3dJRCA9IHRoaXMubWF5YmVOZXdFc2Nyb3coZXNjcm93KTsKICAgIGRpZyAxMAogICAgY2FsbHN1YiBtYXliZU5ld0VzY3JvdwogICAgYnVyeSAxNgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjgyMgogICAgLy8gY29uc3QgZXBvY2hSZWYgPSB1c2VSb3VuZHMgPyBHbG9iYWwucm91bmQgOiBHbG9iYWwubGF0ZXN0VGltZXN0YW1wOwogICAgZGlnIDMKICAgIGJ6IGFyYzU4X2FkZE5hbWVkUGx1Z2luX3Rlcm5hcnlfZmFsc2VAMTkKICAgIGdsb2JhbCBSb3VuZAoKYXJjNThfYWRkTmFtZWRQbHVnaW5fdGVybmFyeV9tZXJnZUAyMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4MjQtODM1CiAgICAvLyB0aGlzLnBsdWdpbnMoa2V5KS52YWx1ZSA9IHsKICAgIC8vICAgZXNjcm93OiBlc2Nyb3dJRCwKICAgIC8vICAgYWRtaW4sCiAgICAvLyAgIGRlbGVnYXRpb25UeXBlLAogICAgLy8gICBsYXN0VmFsaWQsCiAgICAvLyAgIGNvb2xkb3duLAogICAgLy8gICBtZXRob2RzOiBjbG9uZShtZXRob2RJbmZvcyksCiAgICAvLyAgIHVzZVJvdW5kcywKICAgIC8vICAgdXNlRXhlY3V0aW9uS2V5LAogICAgLy8gICBsYXN0Q2FsbGVkOiAwLAogICAgLy8gICBzdGFydDogZXBvY2hSZWYKICAgIC8vIH0KICAgIGRpZyAxNgogICAgaXRvYgogICAgZGlnIDEwCiAgICBjb25jYXQKICAgIGRpZyA5CiAgICBpdG9iCiAgICBjb25jYXQKICAgIGRpZyA4CiAgICBpdG9iCiAgICBjb25jYXQKICAgIGJ5dGVjIDIzIC8vIDB4MDAyYwogICAgY29uY2F0CiAgICBieXRlYyA5IC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICBkaWcgMTMKICAgIHNldGJpdAogICAgaW50Y18xIC8vIDEKICAgIGRpZyA3CiAgICBzZXRiaXQKICAgIGludGNfMiAvLyAyCiAgICBkaWcgNgogICAgc2V0Yml0CiAgICBjb25jYXQKICAgIGRpZyAyMQogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIGRpZyAxNwogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIHBsdWdpbnMgPSBCb3hNYXA8UGx1Z2luS2V5LCBQbHVnaW5JbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4UGx1Z2lucyB9KTsKICAgIGJ5dGVjIDQgLy8gInAiCiAgICBkaWcgMTkKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjgyNC04MzUKICAgIC8vIHRoaXMucGx1Z2lucyhrZXkpLnZhbHVlID0gewogICAgLy8gICBlc2Nyb3c6IGVzY3Jvd0lELAogICAgLy8gICBhZG1pbiwKICAgIC8vICAgZGVsZWdhdGlvblR5cGUsCiAgICAvLyAgIGxhc3RWYWxpZCwKICAgIC8vICAgY29vbGRvd24sCiAgICAvLyAgIG1ldGhvZHM6IGNsb25lKG1ldGhvZEluZm9zKSwKICAgIC8vICAgdXNlUm91bmRzLAogICAgLy8gICB1c2VFeGVjdXRpb25LZXksCiAgICAvLyAgIGxhc3RDYWxsZWQ6IDAsCiAgICAvLyAgIHN0YXJ0OiBlcG9jaFJlZgogICAgLy8gfQogICAgZHVwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gbGFzdFVzZXJJbnRlcmFjdGlvbiA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0xhc3RVc2VySW50ZXJhY3Rpb24gfSkKICAgIGJ5dGVjXzMgLy8gImxhc3RfdXNlcl9pbnRlcmFjdGlvbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NAogICAgLy8gdGhpcy5sYXN0VXNlckludGVyYWN0aW9uLnZhbHVlID0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMgogICAgLy8gbGFzdENoYW5nZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0xhc3RDaGFuZ2UgfSkKICAgIGJ5dGVjIDYgLy8gImxhc3RfY2hhbmdlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyB0aGlzLmxhc3RDaGFuZ2UudmFsdWUgPSBHbG9iYWwubGF0ZXN0VGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjc2NS03NzgKICAgIC8vIGFyYzU4X2FkZE5hbWVkUGx1Z2luKAogICAgLy8gICBuYW1lOiBzdHJpbmcsCiAgICAvLyAgIHBsdWdpbjogdWludDY0LAogICAgLy8gICBjYWxsZXI6IEFkZHJlc3MsCiAgICAvLyAgIGVzY3Jvdzogc3RyaW5nLAogICAgLy8gICBhZG1pbjogYm9vbGVhbiwKICAgIC8vICAgZGVsZWdhdGlvblR5cGU6IFVpbnQ4LAogICAgLy8gICBsYXN0VmFsaWQ6IHVpbnQ2NCwKICAgIC8vICAgY29vbGRvd246IHVpbnQ2NCwKICAgIC8vICAgbWV0aG9kczogTWV0aG9kUmVzdHJpY3Rpb25bXSwKICAgIC8vICAgdXNlUm91bmRzOiBib29sZWFuLAogICAgLy8gICB1c2VFeGVjdXRpb25LZXk6IGJvb2xlYW4sCiAgICAvLyAgIGRlZmF1bHRUb0VzY3JvdzogYm9vbGVhbgogICAgLy8gKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgphcmM1OF9hZGROYW1lZFBsdWdpbl90ZXJuYXJ5X2ZhbHNlQDE5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjgyMgogICAgLy8gY29uc3QgZXBvY2hSZWYgPSB1c2VSb3VuZHMgPyBHbG9iYWwucm91bmQgOiBHbG9iYWwubGF0ZXN0VGltZXN0YW1wOwogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgYiBhcmM1OF9hZGROYW1lZFBsdWdpbl90ZXJuYXJ5X21lcmdlQDIwCgphcmM1OF9hZGROYW1lZFBsdWdpbl9pZl9ib2R5QDEwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjc5OAogICAgLy8gYXNzZXJ0KGVzY3JvdyAhPT0gJycsIEVSUl9FU0NST1dfUkVRVUlSRURfVE9fQkVfU0VUX0FTX0RFRkFVTFQpCiAgICBkaWcgMTAKICAgIGJ5dGVjXzEgLy8gIiIKICAgICE9CiAgICBhc3NlcnQgLy8gZXNjcm93IG11c3QgYmUgc2V0IGlmIGRlZmF1bHRUb0VzY3JvdyBpcyB0cnVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Nzk5CiAgICAvLyBlc2Nyb3dLZXkgPSAnJwogICAgYnl0ZWNfMSAvLyAiIgogICAgYnVyeSAxOQogICAgYiBhcmM1OF9hZGROYW1lZFBsdWdpbl9hZnRlcl9pZl9lbHNlQDExCgphcmM1OF9hZGROYW1lZFBsdWdpbl9ib29sX2ZhbHNlQDg6CiAgICBpbnRjXzAgLy8gMAogICAgYiBhcmM1OF9hZGROYW1lZFBsdWdpbl9ib29sX21lcmdlQDkKCmFyYzU4X2FkZE5hbWVkUGx1Z2luX2Jvb2xfZmFsc2VANDoKICAgIGludGNfMCAvLyAwCiAgICBiIGFyYzU4X2FkZE5hbWVkUGx1Z2luX2Jvb2xfbWVyZ2VANQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVtb3ZlTmFtZWRQbHVnaW5bcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF9yZW1vdmVOYW1lZFBsdWdpbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4NDYKICAgIC8vIGFyYzU4X3JlbW92ZU5hbWVkUGx1Z2luKG5hbWU6IHN0cmluZyk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4NDcKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSB0aGlzLmFkbWluLnZhbHVlLCBFUlJfQURNSU5fT05MWSk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE2CiAgICAvLyBhZG1pbiA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNBZG1pbiB9KQogICAgYnl0ZWNfMiAvLyAiYWRtaW4iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODQ3CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSwgRVJSX0FETUlOX09OTFkpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gYWRtaW4gb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM1CiAgICAvLyBuYW1lZFBsdWdpbnMgPSBCb3hNYXA8c3RyaW5nLCBQbHVnaW5LZXk+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhOYW1lZFBsdWdpbnMgfSk7CiAgICBieXRlYyAxNiAvLyAibiIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg0OAogICAgLy8gYXNzZXJ0KHRoaXMubmFtZWRQbHVnaW5zKG5hbWUpLmV4aXN0cywgRVJSX1BMVUdJTl9ET0VTX05PVF9FWElTVCk7CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIHBsdWdpbiBkb2VzIG5vdCBleGlzdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg0OQogICAgLy8gY29uc3QgYXBwID0gY2xvbmUodGhpcy5uYW1lZFBsdWdpbnMobmFtZSkudmFsdWUpCiAgICBkdXAKICAgIGJveF9nZXQKICAgIHBvcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIHBsdWdpbnMgPSBCb3hNYXA8UGx1Z2luS2V5LCBQbHVnaW5JbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4UGx1Z2lucyB9KTsKICAgIGJ5dGVjIDQgLy8gInAiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4NTAKICAgIC8vIGFzc2VydCh0aGlzLnBsdWdpbnMoYXBwKS5leGlzdHMsIEVSUl9QTFVHSU5fRE9FU19OT1RfRVhJU1QpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBwbHVnaW4gZG9lcyBub3QgZXhpc3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4NTIKICAgIC8vIGNvbnN0IG1ldGhvZHNMZW5ndGg6IHVpbnQ2NCA9IHRoaXMucGx1Z2lucyhhcHApLnZhbHVlLm1ldGhvZHMubGVuZ3RoCiAgICBkdXAKICAgIHB1c2hpbnQgNDQgLy8gNDQKICAgIGludGNfMiAvLyAyCiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgY292ZXIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg1NAogICAgLy8gdGhpcy5uYW1lZFBsdWdpbnMobmFtZSkuZGVsZXRlKCk7CiAgICBzd2FwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4NTUKICAgIC8vIHRoaXMucGx1Z2lucyhhcHApLmRlbGV0ZSgpOwogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODU3CiAgICAvLyBpZiAodGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSAhPT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MpIHsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGNvbnRyb2xsZWRBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0NvbnRyb2xsZWRBZGRyZXNzIH0pOwogICAgYnl0ZWNfMCAvLyAiY29udHJvbGxlZF9hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg1NwogICAgLy8gaWYgKHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUgIT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzKSB7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgICE9CiAgICBieiBhcmM1OF9yZW1vdmVOYW1lZFBsdWdpbl9hZnRlcl9pZl9lbHNlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4NTgtODYzCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICBhbW91bnQ6IHRoaXMubmFtZWRQbHVnaW5zTWJyKG5hbWUpICsgdGhpcy5wbHVnaW5zTWJyKGFwcC5lc2Nyb3csIG1ldGhvZHNMZW5ndGgpCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg2MAogICAgLy8gcmVjZWl2ZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBjb250cm9sbGVkQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNDb250cm9sbGVkQWRkcmVzcyB9KTsKICAgIGJ5dGVjXzAgLy8gImNvbnRyb2xsZWRfYWRkcmVzcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4NjAKICAgIC8vIHJlY2VpdmVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1OAogICAgLy8gcmV0dXJuIE1pbk5hbWVkUGx1Z2luTUJSICsgKEJveENvc3RQZXJCeXRlICogQnl0ZXMobmFtZSkubGVuZ3RoKTsKICAgIGRpZyAzCiAgICBsZW4KICAgIGludGMgNCAvLyA0MDAKICAgICoKICAgIGludGMgNSAvLyAyMTcwMAogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg2MQogICAgLy8gYW1vdW50OiB0aGlzLm5hbWVkUGx1Z2luc01icihuYW1lKSArIHRoaXMucGx1Z2luc01icihhcHAuZXNjcm93LCBtZXRob2RzTGVuZ3RoKQogICAgZGlnIDMKICAgIGR1cAogICAgcHVzaGludCA0MCAvLyA0MAogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAxCiAgICBsZW4KICAgIHN1YnN0cmluZzMKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMwogICAgY2FsbHN1YiBwbHVnaW5zTWJyCiAgICArCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg1OC04NjIKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHJlY2VpdmVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIGFtb3VudDogdGhpcy5uYW1lZFBsdWdpbnNNYnIobmFtZSkgKyB0aGlzLnBsdWdpbnNNYnIoYXBwLmVzY3JvdywgbWV0aG9kc0xlbmd0aCkKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4NTgtODYzCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICBhbW91bnQ6IHRoaXMubmFtZWRQbHVnaW5zTWJyKG5hbWUpICsgdGhpcy5wbHVnaW5zTWJyKGFwcC5lc2Nyb3csIG1ldGhvZHNMZW5ndGgpCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKCmFyYzU4X3JlbW92ZU5hbWVkUGx1Z2luX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gbGFzdFVzZXJJbnRlcmFjdGlvbiA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0xhc3RVc2VySW50ZXJhY3Rpb24gfSkKICAgIGJ5dGVjXzMgLy8gImxhc3RfdXNlcl9pbnRlcmFjdGlvbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NAogICAgLy8gdGhpcy5sYXN0VXNlckludGVyYWN0aW9uLnZhbHVlID0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMgogICAgLy8gbGFzdENoYW5nZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0xhc3RDaGFuZ2UgfSkKICAgIGJ5dGVjIDYgLy8gImxhc3RfY2hhbmdlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyB0aGlzLmxhc3RDaGFuZ2UudmFsdWUgPSBHbG9iYWwubGF0ZXN0VGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg0NgogICAgLy8gYXJjNThfcmVtb3ZlTmFtZWRQbHVnaW4obmFtZTogc3RyaW5nKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9uZXdFc2Nyb3dbcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF9uZXdFc2Nyb3c6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODc1CiAgICAvLyBhcmM1OF9uZXdFc2Nyb3coZXNjcm93OiBzdHJpbmcpOiB1aW50NjQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODc2CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSwgRVJSX0FETUlOX09OTFkpOwogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNgogICAgLy8gYWRtaW4gPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQWRtaW4gfSkKICAgIGJ5dGVjXzIgLy8gImFkbWluIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg3NgogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuYWRtaW4udmFsdWUsIEVSUl9BRE1JTl9PTkxZKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIGFkbWluIG9ubHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNwogICAgLy8gZXNjcm93cyA9IEJveE1hcDxzdHJpbmcsIEVzY3Jvd0luZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhFc2Nyb3dzIH0pCiAgICBieXRlYyA1IC8vICJlIgogICAgZGlnIDEKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg3NwogICAgLy8gYXNzZXJ0KCF0aGlzLmVzY3Jvd3MoZXNjcm93KS5leGlzdHMsIEVSUl9FU0NST1dfQUxSRUFEWV9FWElTVFMpOwogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gZXNjcm93IGFscmVhZHkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODc4CiAgICAvLyBhc3NlcnQoZXNjcm93ICE9PSAnJywgRVJSX0VTQ1JPV19OQU1FX1JFUVVJUkVEKTsKICAgIGR1cAogICAgYnl0ZWNfMSAvLyAiIgogICAgIT0KICAgIGFzc2VydCAvLyBFc2Nyb3cgbmFtZSBpcyByZXF1aXJlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg3OQogICAgLy8gcmV0dXJuIHRoaXMubmV3RXNjcm93KGVzY3Jvdyk7CiAgICBjYWxsc3ViIG5ld0VzY3JvdwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg3NQogICAgLy8gYXJjNThfbmV3RXNjcm93KGVzY3Jvdzogc3RyaW5nKTogdWludDY0IHsKICAgIGl0b2IKICAgIGJ5dGVjIDcgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3RvZ2dsZUVzY3Jvd0xvY2tbcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF90b2dnbGVFc2Nyb3dMb2NrOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg4NwogICAgLy8gYXJjNThfdG9nZ2xlRXNjcm93TG9jayhlc2Nyb3c6IHN0cmluZyk6IEVzY3Jvd0luZm8gewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODg4CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSwgRVJSX0FETUlOX09OTFkpOwogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNgogICAgLy8gYWRtaW4gPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQWRtaW4gfSkKICAgIGJ5dGVjXzIgLy8gImFkbWluIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg4OAogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuYWRtaW4udmFsdWUsIEVSUl9BRE1JTl9PTkxZKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIGFkbWluIG9ubHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNwogICAgLy8gZXNjcm93cyA9IEJveE1hcDxzdHJpbmcsIEVzY3Jvd0luZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhFc2Nyb3dzIH0pCiAgICBieXRlYyA1IC8vICJlIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODg5CiAgICAvLyBhc3NlcnQodGhpcy5lc2Nyb3dzKGVzY3JvdykuZXhpc3RzLCBFUlJfRVNDUk9XX0RPRVNfTk9UX0VYSVNUKTsKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gZXNjcm93IGRvZXMgbm90IGV4aXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODkxCiAgICAvLyB0aGlzLmVzY3Jvd3MoZXNjcm93KS52YWx1ZS5sb2NrZWQgPSAhdGhpcy5lc2Nyb3dzKGVzY3JvdykudmFsdWUubG9ja2VkOwogICAgZHVwCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIHB1c2hpbnQgNjQgLy8gNjQKICAgIGdldGJpdAogICAgIQogICAgZGlnIDEKICAgIGludGNfMyAvLyA4CiAgICBpbnRjXzEgLy8gMQogICAgYm94X2V4dHJhY3QKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgZGlnIDEKICAgIGludGNfMyAvLyA4CiAgICB1bmNvdmVyIDIKICAgIGJveF9yZXBsYWNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIGxhc3RVc2VySW50ZXJhY3Rpb24gPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNMYXN0VXNlckludGVyYWN0aW9uIH0pCiAgICBieXRlY18zIC8vICJsYXN0X3VzZXJfaW50ZXJhY3Rpb24iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHRoaXMubGFzdFVzZXJJbnRlcmFjdGlvbi52YWx1ZSA9IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjIKICAgIC8vIGxhc3RDaGFuZ2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNMYXN0Q2hhbmdlIH0pCiAgICBieXRlYyA2IC8vICJsYXN0X2NoYW5nZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0OAogICAgLy8gdGhpcy5sYXN0Q2hhbmdlLnZhbHVlID0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4OTYKICAgIC8vIHJldHVybiB0aGlzLmVzY3Jvd3MoZXNjcm93KS52YWx1ZTsKICAgIGJveF9nZXQKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg4NwogICAgLy8gYXJjNThfdG9nZ2xlRXNjcm93TG9jayhlc2Nyb3c6IHN0cmluZyk6IEVzY3Jvd0luZm8gewogICAgYnl0ZWMgNyAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVjbGFpbVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmFyYzU4X3JlY2xhaW06CiAgICBpbnRjXzAgLy8gMAogICAgZHVwCiAgICBieXRlY18xIC8vICIiCiAgICBkdXBuIDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MDUKICAgIC8vIGFyYzU4X3JlY2xhaW0oZXNjcm93OiBzdHJpbmcsIHJlY2xhaW1zOiBFc2Nyb3dSZWNsYWltW10pOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbit1dGY4W10pCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwCiAgICBjb3ZlciAzCiAgICBwdXNoaW50IDE3IC8vIDE3CiAgICAqCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgc3dhcAogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuKyh1aW50NjQsdWludDY0LGJvb2wxKVtdKQogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTA2CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSwgRVJSX0ZPUkJJRERFTik7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE2CiAgICAvLyBhZG1pbiA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNBZG1pbiB9KQogICAgYnl0ZWNfMiAvLyAiYWRtaW4iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTA2CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSwgRVJSX0ZPUkJJRERFTik7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBmb3JiaWRkZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNwogICAgLy8gZXNjcm93cyA9IEJveE1hcDxzdHJpbmcsIEVzY3Jvd0luZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhFc2Nyb3dzIH0pCiAgICBieXRlYyA1IC8vICJlIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTA3CiAgICAvLyBhc3NlcnQodGhpcy5lc2Nyb3dzKGVzY3JvdykuZXhpc3RzLCBFUlJfRVNDUk9XX0RPRVNfTk9UX0VYSVNUKTsKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gZXNjcm93IGRvZXMgbm90IGV4aXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTA4CiAgICAvLyBjb25zdCBzZW5kZXIgPSBBcHBsaWNhdGlvbih0aGlzLmVzY3Jvd3MoZXNjcm93KS52YWx1ZS5pZCkuYWRkcmVzcwogICAgYm94X2dldAogICAgcG9wCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MTAKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCByZWNsYWltcy5sZW5ndGg7IGkgKz0gMSkgewogICAgaW50Y18wIC8vIDAKCmFyYzU4X3JlY2xhaW1fd2hpbGVfdG9wQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTEwCiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgcmVjbGFpbXMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGR1cAogICAgZGlnIDUKICAgIDwKICAgIGJ6IGFyYzU4X3JlY2xhaW1fYWZ0ZXJfd2hpbGVAMTcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MTEKICAgIC8vIGlmIChyZWNsYWltc1tpXS5hc3NldCA9PT0gMCkgewogICAgZGlnIDUKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMQogICAgcHVzaGludCAxNyAvLyAxNwogICAgKgogICAgcHVzaGludCAxNyAvLyAxNwogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZHVwCiAgICBidXJ5IDEyCiAgICBibnogYXJjNThfcmVjbGFpbV9lbHNlX2JvZHlAMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MTQKICAgIC8vIHJlY2VpdmVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29udHJvbGxlZEFkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ29udHJvbGxlZEFkZHJlc3MgfSk7CiAgICBieXRlY18wIC8vICJjb250cm9sbGVkX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTE0CiAgICAvLyByZWNlaXZlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBidXJ5IDE1CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTE1CiAgICAvLyBhbW91bnQ6IHJlY2xhaW1zW2ldLmFtb3VudAogICAgZHVwCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIGJ1cnkgMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MTIKICAgIC8vIGNvbnN0IHBtdCA9IGl0eG4ucGF5bWVudCh7CiAgICBpbnRjXzAgLy8gMAogICAgYnVyeSAxMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjkxOAogICAgLy8gaWYgKHJlY2xhaW1zW2ldLmNsb3NlT3V0KSB7CiAgICBwdXNoaW50IDEyOCAvLyAxMjgKICAgIGdldGJpdAogICAgYnogYXJjNThfcmVjbGFpbV9hZnRlcl9pZl9lbHNlQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MTkKICAgIC8vIHBtdC5zZXQoeyBjbG9zZVJlbWFpbmRlclRvOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlIH0pOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29udHJvbGxlZEFkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ29udHJvbGxlZEFkZHJlc3MgfSk7CiAgICBieXRlY18wIC8vICJjb250cm9sbGVkX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTE5CiAgICAvLyBwbXQuc2V0KHsgY2xvc2VSZW1haW5kZXJUbzogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSB9KTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpbnRjXzEgLy8gMQogICAgYnVyeSAxMgogICAgYnVyeSAzCgphcmM1OF9yZWNsYWltX2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MjIKICAgIC8vIHBtdC5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIGRpZyAxMAogICAgYnogYXJjNThfcmVjbGFpbV9uZXh0X2ZpZWxkQDgKICAgIGRpZyAyCiAgICBpdHhuX2ZpZWxkIENsb3NlUmVtYWluZGVyVG8KCmFyYzU4X3JlY2xhaW1fbmV4dF9maWVsZEA4OgogICAgZGlnIDgKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBkaWcgMTIKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjkxMi05MTYKICAgIC8vIGNvbnN0IHBtdCA9IGl0eG4ucGF5bWVudCh7CiAgICAvLyAgIHNlbmRlciwKICAgIC8vICAgcmVjZWl2ZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgIGFtb3VudDogcmVjbGFpbXNbaV0uYW1vdW50CiAgICAvLyB9KQogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjkyMgogICAgLy8gcG10LnN1Ym1pdCgpOwogICAgaXR4bl9zdWJtaXQKCmFyYzU4X3JlY2xhaW1fYWZ0ZXJfaWZfZWxzZUAxNjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MTAKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCByZWNsYWltcy5sZW5ndGg7IGkgKz0gMSkgewogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIGFyYzU4X3JlY2xhaW1fd2hpbGVfdG9wQDIKCmFyYzU4X3JlY2xhaW1fZWxzZV9ib2R5QDEwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjkyNgogICAgLy8gYXNzZXRSZWNlaXZlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGNvbnRyb2xsZWRBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0NvbnRyb2xsZWRBZGRyZXNzIH0pOwogICAgYnl0ZWNfMCAvLyAiY29udHJvbGxlZF9hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjkyNgogICAgLy8gYXNzZXRSZWNlaXZlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBidXJ5IDE0CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTI3CiAgICAvLyBhc3NldEFtb3VudDogcmVjbGFpbXNbaV0uYW1vdW50LAogICAgZHVwCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIGJ1cnkgOQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjkyNAogICAgLy8gY29uc3QgeGZlciA9IGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICBpbnRjXzAgLy8gMAogICAgYnVyeSA4CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTMxCiAgICAvLyBpZiAocmVjbGFpbXNbaV0uY2xvc2VPdXQpIHsKICAgIHB1c2hpbnQgMTI4IC8vIDEyOAogICAgZ2V0Yml0CiAgICBieiBhcmM1OF9yZWNsYWltX2FmdGVyX2lmX2Vsc2VAMTIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MzIKICAgIC8vIHhmZXIuc2V0KHsgYXNzZXRDbG9zZVRvOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlIH0pOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29udHJvbGxlZEFkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ29udHJvbGxlZEFkZHJlc3MgfSk7CiAgICBieXRlY18wIC8vICJjb250cm9sbGVkX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTMyCiAgICAvLyB4ZmVyLnNldCh7IGFzc2V0Q2xvc2VUbzogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSB9KTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpbnRjXzEgLy8gMQogICAgYnVyeSA4CiAgICBidXJ5IDQKCmFyYzU4X3JlY2xhaW1fYWZ0ZXJfaWZfZWxzZUAxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MzUKICAgIC8vIHhmZXIuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICBkaWcgNgogICAgYnogYXJjNThfcmVjbGFpbV9uZXh0X2ZpZWxkQDE0CiAgICBkaWcgMwogICAgaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCmFyYzU4X3JlY2xhaW1fbmV4dF9maWVsZEAxNDoKICAgIGRpZyA5CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgZGlnIDcKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGRpZyAxMQogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBkaWcgMQogICAgaXR4bl9maWVsZCBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MjQtOTI5CiAgICAvLyBjb25zdCB4ZmVyID0gaXR4bi5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgc2VuZGVyLAogICAgLy8gICBhc3NldFJlY2VpdmVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICBhc3NldEFtb3VudDogcmVjbGFpbXNbaV0uYW1vdW50LAogICAgLy8gICB4ZmVyQXNzZXQ6IHJlY2xhaW1zW2ldLmFzc2V0CiAgICAvLyB9KQogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjkzNQogICAgLy8geGZlci5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0CiAgICBiIGFyYzU4X3JlY2xhaW1fYWZ0ZXJfaWZfZWxzZUAxNgoKYXJjNThfcmVjbGFpbV9hZnRlcl93aGlsZUAxNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MDUKICAgIC8vIGFyYzU4X3JlY2xhaW0oZXNjcm93OiBzdHJpbmcsIHJlY2xhaW1zOiBFc2Nyb3dSZWNsYWltW10pOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X29wdGluRXNjcm93W3JvdXRpbmddKCkgLT4gdm9pZDoKYXJjNThfb3B0aW5Fc2Nyb3c6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTQ2CiAgICAvLyBhcmM1OF9vcHRpbkVzY3Jvdyhlc2Nyb3c6IHN0cmluZywgYXNzZXRzOiB1aW50NjRbXSk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICBkdXAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgY292ZXIgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cAogICAgY292ZXIgMwogICAgZHVwCiAgICBpbnRjXzMgLy8gOAogICAgKgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIHVuY292ZXIgMgogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3VpbnQ2NFtdKQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjk0NwogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuYWRtaW4udmFsdWUsIEVSUl9GT1JCSURERU4pOwogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNgogICAgLy8gYWRtaW4gPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQWRtaW4gfSkKICAgIGJ5dGVjXzIgLy8gImFkbWluIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjk0NwogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuYWRtaW4udmFsdWUsIEVSUl9GT1JCSURERU4pOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gZm9yYmlkZGVuCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzcKICAgIC8vIGVzY3Jvd3MgPSBCb3hNYXA8c3RyaW5nLCBFc2Nyb3dJbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4RXNjcm93cyB9KQogICAgYnl0ZWMgNSAvLyAiZSIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTQ4CiAgICAvLyBhc3NlcnQodGhpcy5lc2Nyb3dzKGVzY3JvdykuZXhpc3RzLCBFUlJfRVNDUk9XX0RPRVNfTk9UX0VYSVNUKQogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBlc2Nyb3cgZG9lcyBub3QgZXhpc3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5NDkKICAgIC8vIGNvbnN0IGVzY3Jvd0lEID0gdGhpcy5lc2Nyb3dzKGVzY3JvdykudmFsdWUuaWQKICAgIGJveF9nZXQKICAgIHBvcAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5NTAKICAgIC8vIGNvbnN0IGVzY3Jvd0FkZHJlc3MgPSBBcHBsaWNhdGlvbihlc2Nyb3dJRCkuYWRkcmVzcwogICAgYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAzCiAgICBjb3ZlciA0CiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTUxCiAgICAvLyBhc3NlcnQoIXRoaXMuZXNjcm93cyhlc2Nyb3cpLnZhbHVlLmxvY2tlZCwgRVJSX0VTQ1JPV19MT0NLRUQpCiAgICBwdXNoaW50IDY0IC8vIDY0CiAgICBnZXRiaXQKICAgICEKICAgIGFzc2VydCAvLyBFc2Nyb3cgaXMgbG9ja2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTUzLTk1OQogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIHJlY2VpdmVyOiBlc2Nyb3dBZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogR2xvYmFsLmFzc2V0T3B0SW5NaW5CYWxhbmNlICogYXNzZXRzLmxlbmd0aAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTU1CiAgICAvLyBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBjb250cm9sbGVkQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNDb250cm9sbGVkQWRkcmVzcyB9KTsKICAgIGJ5dGVjXzAgLy8gImNvbnRyb2xsZWRfYWRkcmVzcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5NTUKICAgIC8vIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTU3CiAgICAvLyBhbW91bnQ6IEdsb2JhbC5hc3NldE9wdEluTWluQmFsYW5jZSAqIGFzc2V0cy5sZW5ndGgKICAgIGdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQogICAgdW5jb3ZlciAzCiAgICAqCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaXR4bl9maWVsZCBTZW5kZXIKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5NTMtOTU4CiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgcmVjZWl2ZXI6IGVzY3Jvd0FkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiBHbG9iYWwuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKiBhc3NldHMubGVuZ3RoCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTUzLTk1OQogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIHJlY2VpdmVyOiBlc2Nyb3dBZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogR2xvYmFsLmFzc2V0T3B0SW5NaW5CYWxhbmNlICogYXNzZXRzLmxlbmd0aAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjk2MQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGFzc2V0cy5sZW5ndGg7IGkgKz0gMSkgewogICAgaW50Y18wIC8vIDAKCmFyYzU4X29wdGluRXNjcm93X3doaWxlX3RvcEAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjk2MQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGFzc2V0cy5sZW5ndGg7IGkgKz0gMSkgewogICAgZHVwCiAgICBkaWcgMwogICAgPAogICAgYnogYXJjNThfb3B0aW5Fc2Nyb3dfYWZ0ZXJfd2hpbGVANgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjk2MwogICAgLy8gdGhpcy5hbGxvd2FuY2VzKHsgZXNjcm93LCBhc3NldDogYXNzZXRzW2ldIH0pLmV4aXN0cywKICAgIGRpZyAzCiAgICBleHRyYWN0IDIgMAogICAgZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGV4dHJhY3RfdWludDY0CiAgICBkaWcgNgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBpdG9iCiAgICBieXRlYyAxMyAvLyAweDAwMGEKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGFsbG93YW5jZXMgPSBCb3hNYXA8QWxsb3dhbmNlS2V5LCBBbGxvd2FuY2VJbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4QWxsb3dhbmNlcyB9KSAvLyAzOF81MDAKICAgIGJ5dGVjIDE0IC8vICJhIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTYzCiAgICAvLyB0aGlzLmFsbG93YW5jZXMoeyBlc2Nyb3csIGFzc2V0OiBhc3NldHNbaV0gfSkuZXhpc3RzLAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTYyLTk2NQogICAgLy8gYXNzZXJ0KAogICAgLy8gICB0aGlzLmFsbG93YW5jZXMoeyBlc2Nyb3csIGFzc2V0OiBhc3NldHNbaV0gfSkuZXhpc3RzLAogICAgLy8gICBFUlJfQUxMT1dBTkNFX0RPRVNfTk9UX0VYSVNUCiAgICAvLyApOwogICAgYXNzZXJ0IC8vIGFsbG93YW5jZSBkb2VzIG5vdCBleGlzdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjk2Ny05NzQKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIHNlbmRlcjogZXNjcm93QWRkcmVzcywKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBlc2Nyb3dBZGRyZXNzLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIHhmZXJBc3NldDogYXNzZXRzW2ldCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTcxCiAgICAvLyBhc3NldEFtb3VudDogMCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBkaWcgMgogICAgZHVwCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTY3LTk3MwogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgc2VuZGVyOiBlc2Nyb3dBZGRyZXNzLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IGVzY3Jvd0FkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDAsCiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldHNbaV0KICAgIC8vICAgfSkKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5NjctOTc0CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBzZW5kZXI6IGVzY3Jvd0FkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogZXNjcm93QWRkcmVzcywKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0c1tpXQogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjk2MQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGFzc2V0cy5sZW5ndGg7IGkgKz0gMSkgewogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiBhcmM1OF9vcHRpbkVzY3Jvd193aGlsZV90b3BAMwoKYXJjNThfb3B0aW5Fc2Nyb3dfYWZ0ZXJfd2hpbGVANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5NDYKICAgIC8vIGFyYzU4X29wdGluRXNjcm93KGVzY3Jvdzogc3RyaW5nLCBhc3NldHM6IHVpbnQ2NFtdKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9wbHVnaW5PcHRpbkVzY3Jvd1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmFyYzU4X3BsdWdpbk9wdGluRXNjcm93OgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gIiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5ODYtOTkyCiAgICAvLyBhcmM1OF9wbHVnaW5PcHRpbkVzY3JvdygKICAgIC8vICAgcGx1Z2luOiB1aW50NjQsCiAgICAvLyAgIGNhbGxlcjogQWRkcmVzcywKICAgIC8vICAgZXNjcm93OiBzdHJpbmcsCiAgICAvLyAgIGFzc2V0czogdWludDY0W10sCiAgICAvLyAgIG1iclBheW1lbnQ6IGd0eG4uUGF5bWVudFR4bgogICAgLy8gKTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDhbMzJdCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdXRmOFtdKQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgY292ZXIgNAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cAogICAgY292ZXIgNQogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdWludDY0W10pCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgY292ZXIgNAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5OTMKICAgIC8vIGNvbnN0IGtleTogUGx1Z2luS2V5ID0geyBwbHVnaW4sIGNhbGxlcjogY2FsbGVyLm5hdGl2ZSwgZXNjcm93IH0KICAgIGRpZyAyCiAgICBpdG9iCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIGR1cAogICAgY292ZXIgNAogICAgc3dhcAogICAgYnl0ZWMgMTIgLy8gMHgwMDJhCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBwbHVnaW5zID0gQm94TWFwPFBsdWdpbktleSwgUGx1Z2luSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeFBsdWdpbnMgfSk7CiAgICBieXRlYyA0IC8vICJwIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTk1CiAgICAvLyBhc3NlcnQodGhpcy5wbHVnaW5zKGtleSkuZXhpc3RzLCBFUlJfUExVR0lOX0RPRVNfTk9UX0VYSVNUKQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gcGx1Z2luIGRvZXMgbm90IGV4aXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzcKICAgIC8vIGVzY3Jvd3MgPSBCb3hNYXA8c3RyaW5nLCBFc2Nyb3dJbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4RXNjcm93cyB9KQogICAgYnl0ZWMgNSAvLyAiZSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjk5NgogICAgLy8gYXNzZXJ0KHRoaXMuZXNjcm93cyhlc2Nyb3cpLmV4aXN0cywgRVJSX0VTQ1JPV19ET0VTX05PVF9FWElTVCkKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gZXNjcm93IGRvZXMgbm90IGV4aXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTk3CiAgICAvLyBhc3NlcnQoIXRoaXMuZXNjcm93cyhlc2Nyb3cpLnZhbHVlLmxvY2tlZCwgRVJSX0VTQ1JPV19MT0NLRUQpCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIGR1cAogICAgcHVzaGludCA2NCAvLyA2NAogICAgZ2V0Yml0CiAgICAhCiAgICBhc3NlcnQgLy8gRXNjcm93IGlzIGxvY2tlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjk5OQogICAgLy8gY29uc3QgZXNjcm93SUQgPSB0aGlzLmVzY3Jvd3MoZXNjcm93KS52YWx1ZS5pZAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTAwMgogICAgLy8gVHhuLnNlbmRlciA9PT0gQXBwbGljYXRpb24ocGx1Z2luKS5hZGRyZXNzIHx8CiAgICB0eG4gU2VuZGVyCiAgICBzd2FwCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwMDItMTAwMwogICAgLy8gVHhuLnNlbmRlciA9PT0gQXBwbGljYXRpb24ocGx1Z2luKS5hZGRyZXNzIHx8CiAgICAvLyBUeG4uc2VuZGVyID09PSBjYWxsZXIubmF0aXZlIHx8CiAgICBibnogYXJjNThfcGx1Z2luT3B0aW5Fc2Nyb3dfYm9vbF90cnVlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDAzCiAgICAvLyBUeG4uc2VuZGVyID09PSBjYWxsZXIubmF0aXZlIHx8CiAgICB0eG4gU2VuZGVyCiAgICBkaWcgNgogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDAyLTEwMDMKICAgIC8vIFR4bi5zZW5kZXIgPT09IEFwcGxpY2F0aW9uKHBsdWdpbikuYWRkcmVzcyB8fAogICAgLy8gVHhuLnNlbmRlciA9PT0gY2FsbGVyLm5hdGl2ZSB8fAogICAgYm56IGFyYzU4X3BsdWdpbk9wdGluRXNjcm93X2Jvb2xfdHJ1ZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTAwNAogICAgLy8gY2FsbGVyLm5hdGl2ZSA9PT0gR2xvYmFsLnplcm9BZGRyZXNzLAogICAgZGlnIDUKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDAyLTEwMDQKICAgIC8vIFR4bi5zZW5kZXIgPT09IEFwcGxpY2F0aW9uKHBsdWdpbikuYWRkcmVzcyB8fAogICAgLy8gVHhuLnNlbmRlciA9PT0gY2FsbGVyLm5hdGl2ZSB8fAogICAgLy8gY2FsbGVyLm5hdGl2ZSA9PT0gR2xvYmFsLnplcm9BZGRyZXNzLAogICAgYnogYXJjNThfcGx1Z2luT3B0aW5Fc2Nyb3dfYm9vbF9mYWxzZUA1CgphcmM1OF9wbHVnaW5PcHRpbkVzY3Jvd19ib29sX3RydWVANDoKICAgIGludGNfMSAvLyAxCgphcmM1OF9wbHVnaW5PcHRpbkVzY3Jvd19ib29sX21lcmdlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTAwMS0xMDA2CiAgICAvLyBhc3NlcnQoCiAgICAvLyAgIFR4bi5zZW5kZXIgPT09IEFwcGxpY2F0aW9uKHBsdWdpbikuYWRkcmVzcyB8fAogICAgLy8gICBUeG4uc2VuZGVyID09PSBjYWxsZXIubmF0aXZlIHx8CiAgICAvLyAgIGNhbGxlci5uYXRpdmUgPT09IEdsb2JhbC56ZXJvQWRkcmVzcywKICAgIC8vICAgRVJSX0ZPUkJJRERFTgogICAgLy8gKQogICAgYXNzZXJ0IC8vIGZvcmJpZGRlbgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwMDgKICAgIC8vIGNvbnN0IGVzY3Jvd0FkZHJlc3MgPSBBcHBsaWNhdGlvbihlc2Nyb3dJRCkuYWRkcmVzcwogICAgZHVwCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGJ1cnkgMTAKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDEwLTEwMTcKICAgIC8vIGFzc2VydE1hdGNoKAogICAgLy8gICBtYnJQYXltZW50LAogICAgLy8gICB7CiAgICAvLyAgICAgcmVjZWl2ZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgYW1vdW50OiBHbG9iYWwuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKiBhc3NldHMubGVuZ3RoCiAgICAvLyAgIH0sCiAgICAvLyAgIEVSUl9JTlZBTElEX1BBWU1FTlQKICAgIC8vICkKICAgIGRpZyAzCiAgICBkdXAKICAgIGd0eG5zIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTAxMwogICAgLy8gcmVjZWl2ZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBjb250cm9sbGVkQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNDb250cm9sbGVkQWRkcmVzcyB9KTsKICAgIGJ5dGVjXzAgLy8gImNvbnRyb2xsZWRfYWRkcmVzcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDEzCiAgICAvLyByZWNlaXZlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTAxMC0xMDE3CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgbWJyUGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIGFtb3VudDogR2xvYmFsLmFzc2V0T3B0SW5NaW5CYWxhbmNlICogYXNzZXRzLmxlbmd0aAogICAgLy8gICB9LAogICAgLy8gICBFUlJfSU5WQUxJRF9QQVlNRU5UCiAgICAvLyApCiAgICBzd2FwCiAgICBkaWcgMQogICAgPT0KICAgIHVuY292ZXIgMgogICAgZ3R4bnMgQW1vdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTAxNAogICAgLy8gYW1vdW50OiBHbG9iYWwuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKiBhc3NldHMubGVuZ3RoCiAgICBnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKICAgIGRpZyA4CiAgICBkdXAKICAgIGNvdmVyIDQKICAgICoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDEwLTEwMTcKICAgIC8vIGFzc2VydE1hdGNoKAogICAgLy8gICBtYnJQYXltZW50LAogICAgLy8gICB7CiAgICAvLyAgICAgcmVjZWl2ZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgYW1vdW50OiBHbG9iYWwuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKiBhc3NldHMubGVuZ3RoCiAgICAvLyAgIH0sCiAgICAvLyAgIEVSUl9JTlZBTElEX1BBWU1FTlQKICAgIC8vICkKICAgID09CiAgICAmJgogICAgYXNzZXJ0IC8vIGludmFsaWQgcGF5bWVudAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwMTktMTAyNQogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIHJlY2VpdmVyOiBlc2Nyb3dBZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogR2xvYmFsLmFzc2V0T3B0SW5NaW5CYWxhbmNlICogYXNzZXRzLmxlbmd0aAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTAyMwogICAgLy8gYW1vdW50OiBHbG9iYWwuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKiBhc3NldHMubGVuZ3RoCiAgICBnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKICAgICoKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpdHhuX2ZpZWxkIFNlbmRlcgogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwMTktMTAyNAogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIHJlY2VpdmVyOiBlc2Nyb3dBZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogR2xvYmFsLmFzc2V0T3B0SW5NaW5CYWxhbmNlICogYXNzZXRzLmxlbmd0aAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwMTktMTAyNQogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIHJlY2VpdmVyOiBlc2Nyb3dBZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogR2xvYmFsLmFzc2V0T3B0SW5NaW5CYWxhbmNlICogYXNzZXRzLmxlbmd0aAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwMjcKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhc3NldHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMCAvLyAwCiAgICBidXJ5IDcKCmFyYzU4X3BsdWdpbk9wdGluRXNjcm93X3doaWxlX3RvcEA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwMjcKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhc3NldHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGRpZyA2CiAgICBkaWcgNAogICAgPAogICAgYnogYXJjNThfcGx1Z2luT3B0aW5Fc2Nyb3dfYWZ0ZXJfd2hpbGVAMTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDI5CiAgICAvLyB0aGlzLmFsbG93YW5jZXMoeyBlc2Nyb3csIGFzc2V0OiBhc3NldHNbaV0gfSkuZXhpc3RzLAogICAgZGlnIDQKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgNwogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzMgLy8gOAogICAgKgogICAgZXh0cmFjdF91aW50NjQKICAgIGR1cAogICAgaXRvYgogICAgYnl0ZWMgMTMgLy8gMHgwMDBhCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGRpZyA0CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozOQogICAgLy8gYWxsb3dhbmNlcyA9IEJveE1hcDxBbGxvd2FuY2VLZXksIEFsbG93YW5jZUluZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhBbGxvd2FuY2VzIH0pIC8vIDM4XzUwMAogICAgYnl0ZWMgMTQgLy8gImEiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDI5CiAgICAvLyB0aGlzLmFsbG93YW5jZXMoeyBlc2Nyb3csIGFzc2V0OiBhc3NldHNbaV0gfSkuZXhpc3RzLAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTAyOC0xMDMxCiAgICAvLyBhc3NlcnQoCiAgICAvLyAgIHRoaXMuYWxsb3dhbmNlcyh7IGVzY3JvdywgYXNzZXQ6IGFzc2V0c1tpXSB9KS5leGlzdHMsCiAgICAvLyAgIEVSUl9BTExPV0FOQ0VfRE9FU19OT1RfRVhJU1QKICAgIC8vICk7CiAgICBhc3NlcnQgLy8gYWxsb3dhbmNlIGRvZXMgbm90IGV4aXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTAzMy0xMDQwCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBzZW5kZXI6IGVzY3Jvd0FkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogZXNjcm93QWRkcmVzcywKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0c1tpXQogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwMzcKICAgIC8vIGFzc2V0QW1vdW50OiAwLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGRpZyA4CiAgICBkdXAKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDMzLTEwMzkKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIHNlbmRlcjogZXNjcm93QWRkcmVzcywKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBlc2Nyb3dBZGRyZXNzLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIHhmZXJBc3NldDogYXNzZXRzW2ldCiAgICAvLyAgIH0pCiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTAzMy0xMDQwCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBzZW5kZXI6IGVzY3Jvd0FkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogZXNjcm93QWRkcmVzcywKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0c1tpXQogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwMjcKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhc3NldHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDcKICAgIGIgYXJjNThfcGx1Z2luT3B0aW5Fc2Nyb3dfd2hpbGVfdG9wQDgKCmFyYzU4X3BsdWdpbk9wdGluRXNjcm93X2FmdGVyX3doaWxlQDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjk4Ni05OTIKICAgIC8vIGFyYzU4X3BsdWdpbk9wdGluRXNjcm93KAogICAgLy8gICBwbHVnaW46IHVpbnQ2NCwKICAgIC8vICAgY2FsbGVyOiBBZGRyZXNzLAogICAgLy8gICBlc2Nyb3c6IHN0cmluZywKICAgIC8vICAgYXNzZXRzOiB1aW50NjRbXSwKICAgIC8vICAgbWJyUGF5bWVudDogZ3R4bi5QYXltZW50VHhuCiAgICAvLyApOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmFyYzU4X3BsdWdpbk9wdGluRXNjcm93X2Jvb2xfZmFsc2VANToKICAgIGludGNfMCAvLyAwCiAgICBiIGFyYzU4X3BsdWdpbk9wdGluRXNjcm93X2Jvb2xfbWVyZ2VANgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfYWRkQWxsb3dhbmNlc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmFyYzU4X2FkZEFsbG93YW5jZXM6CiAgICBpbnRjXzAgLy8gMAogICAgZHVwbiA0CiAgICBieXRlY18xIC8vICIiCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDUwCiAgICAvLyBhcmM1OF9hZGRBbGxvd2FuY2VzKGVzY3Jvdzogc3RyaW5nLCBhbGxvd2FuY2VzOiBBZGRBbGxvd2FuY2VJbmZvW10pOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbit1dGY4W10pCiAgICBleHRyYWN0IDIgMAogICAgZHVwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAKICAgIGNvdmVyIDMKICAgIHB1c2hpbnQgMzQgLy8gMzQKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rKHVpbnQ2NCx1aW50OCx1aW50NjQsdWludDY0LHVpbnQ2NCxib29sMSlbXSkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDUxCiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSwgRVJSX0FETUlOX09OTFkpOwogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNgogICAgLy8gYWRtaW4gPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQWRtaW4gfSkKICAgIGJ5dGVjXzIgLy8gImFkbWluIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwNTEKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSB0aGlzLmFkbWluLnZhbHVlLCBFUlJfQURNSU5fT05MWSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBhZG1pbiBvbmx5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzcKICAgIC8vIGVzY3Jvd3MgPSBCb3hNYXA8c3RyaW5nLCBFc2Nyb3dJbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4RXNjcm93cyB9KQogICAgYnl0ZWMgNSAvLyAiZSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwNTIKICAgIC8vIGFzc2VydCh0aGlzLmVzY3Jvd3MoZXNjcm93KS5leGlzdHMsIEVSUl9FU0NST1dfRE9FU19OT1RfRVhJU1QpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBlc2Nyb3cgZG9lcyBub3QgZXhpc3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDUzCiAgICAvLyBhc3NlcnQoIXRoaXMuZXNjcm93cyhlc2Nyb3cpLnZhbHVlLmxvY2tlZCwgRVJSX0VTQ1JPV19MT0NLRUQpOwogICAgYm94X2dldAogICAgcG9wCiAgICBwdXNoaW50IDY0IC8vIDY0CiAgICBnZXRiaXQKICAgICEKICAgIGFzc2VydCAvLyBFc2Nyb3cgaXMgbG9ja2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTA1NQogICAgLy8gaWYgKHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUgIT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzKSB7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBjb250cm9sbGVkQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNDb250cm9sbGVkQWRkcmVzcyB9KTsKICAgIGJ5dGVjXzAgLy8gImNvbnRyb2xsZWRfYWRkcmVzcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDU1CiAgICAvLyBpZiAodGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSAhPT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MpIHsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgIT0KICAgIGJ6IGFyYzU4X2FkZEFsbG93YW5jZXNfYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTA1Ni0xMDYyCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogdGhpcy5hbGxvd2FuY2VzTWJyKGVzY3JvdykgKiBhbGxvd2FuY2VzLmxlbmd0aAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDU4CiAgICAvLyBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBjb250cm9sbGVkQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNDb250cm9sbGVkQWRkcmVzcyB9KTsKICAgIGJ5dGVjXzAgLy8gImNvbnRyb2xsZWRfYWRkcmVzcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDU4CiAgICAvLyBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwNTkKICAgIC8vIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NjYKICAgIC8vIHJldHVybiBNaW5BbGxvd2FuY2VNQlIgKyAoQm94Q29zdFBlckJ5dGUgKiBCeXRlcyhlc2Nyb3cpLmxlbmd0aCk7CiAgICBkaWcgNAogICAgbGVuCiAgICBpbnRjIDQgLy8gNDAwCiAgICAqCiAgICBpbnRjIDYgLy8gMjc3MDAKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDYwCiAgICAvLyBhbW91bnQ6IHRoaXMuYWxsb3dhbmNlc01icihlc2Nyb3cpICogYWxsb3dhbmNlcy5sZW5ndGgKICAgIGRpZyAzCiAgICAqCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgaXR4bl9maWVsZCBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDU2LTEwNjEKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiB0aGlzLmFsbG93YW5jZXNNYnIoZXNjcm93KSAqIGFsbG93YW5jZXMubGVuZ3RoCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTA1Ni0xMDYyCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogdGhpcy5hbGxvd2FuY2VzTWJyKGVzY3JvdykgKiBhbGxvd2FuY2VzLmxlbmd0aAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CgphcmM1OF9hZGRBbGxvd2FuY2VzX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDY1CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgYWxsb3dhbmNlcy5sZW5ndGg7IGkgKz0gMSkgewogICAgaW50Y18wIC8vIDAKICAgIGJ1cnkgNQoKYXJjNThfYWRkQWxsb3dhbmNlc193aGlsZV90b3BANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDY1CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgYWxsb3dhbmNlcy5sZW5ndGg7IGkgKz0gMSkgewogICAgZGlnIDQKICAgIGRpZyAxCiAgICA8CiAgICBieiBhcmM1OF9hZGRBbGxvd2FuY2VzX2FmdGVyX3doaWxlQDEwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTA2NgogICAgLy8gY29uc3QgeyBhc3NldCwgdHlwZSwgYW1vdW50LCBtYXgsIGludGVydmFsLCB1c2VSb3VuZHMgfSA9IGFsbG93YW5jZXNbaV07CiAgICBkaWcgMQogICAgZXh0cmFjdCAyIDAKICAgIGRpZyA1CiAgICBwdXNoaW50IDM0IC8vIDM0CiAgICAqCiAgICBwdXNoaW50IDM0IC8vIDM0CiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGR1cAogICAgZXh0cmFjdCAwIDgKICAgIGRpZyAxCiAgICBleHRyYWN0IDggMQogICAgYnVyeSA4CiAgICBkaWcgMQogICAgZXh0cmFjdCA5IDgKICAgIGJ1cnkgMTIKICAgIGRpZyAxCiAgICBleHRyYWN0IDE3IDgKICAgIGJ1cnkgMTEKICAgIGRpZyAxCiAgICBleHRyYWN0IDI1IDgKICAgIGJ1cnkgMTAKICAgIHN3YXAKICAgIHB1c2hpbnQgMjY0IC8vIDI2NAogICAgZ2V0Yml0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGJ1cnkgNgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwNjcKICAgIC8vIGNvbnN0IGtleTogQWxsb3dhbmNlS2V5ID0geyBlc2Nyb3csIGFzc2V0IH0KICAgIGRpZyA0CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWMgMTMgLy8gMHgwMDBhCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGFsbG93YW5jZXMgPSBCb3hNYXA8QWxsb3dhbmNlS2V5LCBBbGxvd2FuY2VJbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4QWxsb3dhbmNlcyB9KSAvLyAzOF81MDAKICAgIGJ5dGVjIDE0IC8vICJhIgogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGJ1cnkgOQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwNjgKICAgIC8vIGFzc2VydCghdGhpcy5hbGxvd2FuY2VzKGtleSkuZXhpc3RzLCBFUlJfQUxMT1dBTkNFX0FMUkVBRFlfRVhJU1RTKTsKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIGFsbG93YW5jZSBhbHJlYWR5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwNjkKICAgIC8vIGNvbnN0IHN0YXJ0ID0gdXNlUm91bmRzID8gR2xvYmFsLnJvdW5kIDogR2xvYmFsLmxhdGVzdFRpbWVzdGFtcDsKICAgIGJ6IGFyYzU4X2FkZEFsbG93YW5jZXNfdGVybmFyeV9mYWxzZUA4CiAgICBnbG9iYWwgUm91bmQKCmFyYzU4X2FkZEFsbG93YW5jZXNfdGVybmFyeV9tZXJnZUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwNzEtMTA4MAogICAgLy8gdGhpcy5hbGxvd2FuY2VzKGtleSkudmFsdWUgPSB7CiAgICAvLyAgIHR5cGUsCiAgICAvLyAgIHNwZW50OiAwLAogICAgLy8gICBhbW91bnQsCiAgICAvLyAgIGxhc3Q6IDAsCiAgICAvLyAgIG1heCwKICAgIC8vICAgaW50ZXJ2YWwsCiAgICAvLyAgIHN0YXJ0LAogICAgLy8gICB1c2VSb3VuZHMKICAgIC8vIH0KICAgIGRpZyA2CiAgICBkaWcgMTAKICAgIGNvbmNhdAogICAgZGlnIDExCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDczCiAgICAvLyBzcGVudDogMCwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTA3MS0xMDgwCiAgICAvLyB0aGlzLmFsbG93YW5jZXMoa2V5KS52YWx1ZSA9IHsKICAgIC8vICAgdHlwZSwKICAgIC8vICAgc3BlbnQ6IDAsCiAgICAvLyAgIGFtb3VudCwKICAgIC8vICAgbGFzdDogMCwKICAgIC8vICAgbWF4LAogICAgLy8gICBpbnRlcnZhbCwKICAgIC8vICAgc3RhcnQsCiAgICAvLyAgIHVzZVJvdW5kcwogICAgLy8gfQogICAgaXRvYgogICAgc3dhcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZGlnIDEwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICBieXRlYyA5IC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICBkaWcgNgogICAgc2V0Yml0CiAgICBjb25jYXQKICAgIGRpZyA3CiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTA2NQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGFsbG93YW5jZXMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGRpZyA0CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSA1CiAgICBiIGFyYzU4X2FkZEFsbG93YW5jZXNfd2hpbGVfdG9wQDUKCmFyYzU4X2FkZEFsbG93YW5jZXNfdGVybmFyeV9mYWxzZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwNjkKICAgIC8vIGNvbnN0IHN0YXJ0ID0gdXNlUm91bmRzID8gR2xvYmFsLnJvdW5kIDogR2xvYmFsLmxhdGVzdFRpbWVzdGFtcDsKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGIgYXJjNThfYWRkQWxsb3dhbmNlc190ZXJuYXJ5X21lcmdlQDkKCmFyYzU4X2FkZEFsbG93YW5jZXNfYWZ0ZXJfd2hpbGVAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIGxhc3RVc2VySW50ZXJhY3Rpb24gPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNMYXN0VXNlckludGVyYWN0aW9uIH0pCiAgICBieXRlY18zIC8vICJsYXN0X3VzZXJfaW50ZXJhY3Rpb24iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHRoaXMubGFzdFVzZXJJbnRlcmFjdGlvbi52YWx1ZSA9IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjIKICAgIC8vIGxhc3RDaGFuZ2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNMYXN0Q2hhbmdlIH0pCiAgICBieXRlYyA2IC8vICJsYXN0X2NoYW5nZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0OAogICAgLy8gdGhpcy5sYXN0Q2hhbmdlLnZhbHVlID0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDUwCiAgICAvLyBhcmM1OF9hZGRBbGxvd2FuY2VzKGVzY3Jvdzogc3RyaW5nLCBhbGxvd2FuY2VzOiBBZGRBbGxvd2FuY2VJbmZvW10pOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3JlbW92ZUFsbG93YW5jZXNbcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF9yZW1vdmVBbGxvd2FuY2VzOgogICAgYnl0ZWNfMSAvLyAiIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwOTMKICAgIC8vIGFyYzU4X3JlbW92ZUFsbG93YW5jZXMoZXNjcm93OiBzdHJpbmcsIGFzc2V0czogdWludDY0W10pOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbit1dGY4W10pCiAgICBleHRyYWN0IDIgMAogICAgZHVwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgc3dhcAogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3VpbnQ2NFtdKQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwOTQKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSB0aGlzLmFkbWluLnZhbHVlLCBFUlJfQURNSU5fT05MWSk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE2CiAgICAvLyBhZG1pbiA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNBZG1pbiB9KQogICAgYnl0ZWNfMiAvLyAiYWRtaW4iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTA5NAogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuYWRtaW4udmFsdWUsIEVSUl9BRE1JTl9PTkxZKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIGFkbWluIG9ubHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNwogICAgLy8gZXNjcm93cyA9IEJveE1hcDxzdHJpbmcsIEVzY3Jvd0luZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhFc2Nyb3dzIH0pCiAgICBieXRlYyA1IC8vICJlIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTA5NQogICAgLy8gYXNzZXJ0KHRoaXMuZXNjcm93cyhlc2Nyb3cpLmV4aXN0cywgRVJSX0VTQ1JPV19ET0VTX05PVF9FWElTVCk7CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGVzY3JvdyBkb2VzIG5vdCBleGlzdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwOTYKICAgIC8vIGFzc2VydCghdGhpcy5lc2Nyb3dzKGVzY3JvdykudmFsdWUubG9ja2VkLCBFUlJfRVNDUk9XX0xPQ0tFRCk7CiAgICBib3hfZ2V0CiAgICBwb3AKICAgIHB1c2hpbnQgNjQgLy8gNjQKICAgIGdldGJpdAogICAgIQogICAgYXNzZXJ0IC8vIEVzY3JvdyBpcyBsb2NrZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDk4CiAgICAvLyBpZiAodGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSAhPT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MpIHsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGNvbnRyb2xsZWRBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0NvbnRyb2xsZWRBZGRyZXNzIH0pOwogICAgYnl0ZWNfMCAvLyAiY29udHJvbGxlZF9hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwOTgKICAgIC8vIGlmICh0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlICE9PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcykgewogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAhPQogICAgYnogYXJjNThfcmVtb3ZlQWxsb3dhbmNlc19hZnRlcl9pZl9lbHNlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDk5LTExMDQKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHJlY2VpdmVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIGFtb3VudDogdGhpcy5hbGxvd2FuY2VzTWJyKGVzY3JvdykgKiBhc3NldHMubGVuZ3RoCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExMDEKICAgIC8vIHJlY2VpdmVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29udHJvbGxlZEFkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ29udHJvbGxlZEFkZHJlc3MgfSk7CiAgICBieXRlY18wIC8vICJjb250cm9sbGVkX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTEwMQogICAgLy8gcmVjZWl2ZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY2CiAgICAvLyByZXR1cm4gTWluQWxsb3dhbmNlTUJSICsgKEJveENvc3RQZXJCeXRlICogQnl0ZXMoZXNjcm93KS5sZW5ndGgpOwogICAgZGlnIDMKICAgIGxlbgogICAgaW50YyA0IC8vIDQwMAogICAgKgogICAgaW50YyA2IC8vIDI3NzAwCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTEwMgogICAgLy8gYW1vdW50OiB0aGlzLmFsbG93YW5jZXNNYnIoZXNjcm93KSAqIGFzc2V0cy5sZW5ndGgKICAgIGRpZyAyCiAgICAqCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwOTktMTEwMwogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgcmVjZWl2ZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgYW1vdW50OiB0aGlzLmFsbG93YW5jZXNNYnIoZXNjcm93KSAqIGFzc2V0cy5sZW5ndGgKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDk5LTExMDQKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHJlY2VpdmVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIGFtb3VudDogdGhpcy5hbGxvd2FuY2VzTWJyKGVzY3JvdykgKiBhc3NldHMubGVuZ3RoCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKCmFyYzU4X3JlbW92ZUFsbG93YW5jZXNfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExMDcKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhc3NldHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMCAvLyAwCiAgICBidXJ5IDQKCmFyYzU4X3JlbW92ZUFsbG93YW5jZXNfd2hpbGVfdG9wQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTEwNwogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGFzc2V0cy5sZW5ndGg7IGkgKz0gMSkgewogICAgZGlnIDMKICAgIGRpZyAxCiAgICA8CiAgICBieiBhcmM1OF9yZW1vdmVBbGxvd2FuY2VzX2FmdGVyX3doaWxlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTEwCiAgICAvLyBhc3NldDogYXNzZXRzW2ldCiAgICBkaWcgMQogICAgZXh0cmFjdCAyIDAKICAgIGRpZyA0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTEwOC0xMTExCiAgICAvLyBjb25zdCBrZXk6IEFsbG93YW5jZUtleSA9IHsKICAgIC8vICAgZXNjcm93LAogICAgLy8gICBhc3NldDogYXNzZXRzW2ldCiAgICAvLyB9CiAgICBkaWcgNAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjIDEzIC8vIDB4MDAwYQogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBhbGxvd2FuY2VzID0gQm94TWFwPEFsbG93YW5jZUtleSwgQWxsb3dhbmNlSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeEFsbG93YW5jZXMgfSkgLy8gMzhfNTAwCiAgICBieXRlYyAxNCAvLyAiYSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExMTIKICAgIC8vIGFzc2VydCh0aGlzLmFsbG93YW5jZXMoa2V5KS5leGlzdHMsIEVSUl9BTExPV0FOQ0VfRE9FU19OT1RfRVhJU1QpCiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFsbG93YW5jZSBkb2VzIG5vdCBleGlzdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExMTMKICAgIC8vIHRoaXMuYWxsb3dhbmNlcyhrZXkpLmRlbGV0ZSgpCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTA3CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgYXNzZXRzLmxlbmd0aDsgaSArPSAxKSB7CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSA0CiAgICBiIGFyYzU4X3JlbW92ZUFsbG93YW5jZXNfd2hpbGVfdG9wQDUKCmFyYzU4X3JlbW92ZUFsbG93YW5jZXNfYWZ0ZXJfd2hpbGVANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gbGFzdFVzZXJJbnRlcmFjdGlvbiA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0xhc3RVc2VySW50ZXJhY3Rpb24gfSkKICAgIGJ5dGVjXzMgLy8gImxhc3RfdXNlcl9pbnRlcmFjdGlvbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NAogICAgLy8gdGhpcy5sYXN0VXNlckludGVyYWN0aW9uLnZhbHVlID0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMgogICAgLy8gbGFzdENoYW5nZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0xhc3RDaGFuZ2UgfSkKICAgIGJ5dGVjIDYgLy8gImxhc3RfY2hhbmdlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyB0aGlzLmxhc3RDaGFuZ2UudmFsdWUgPSBHbG9iYWwubGF0ZXN0VGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwOTMKICAgIC8vIGFyYzU4X3JlbW92ZUFsbG93YW5jZXMoZXNjcm93OiBzdHJpbmcsIGFzc2V0czogdWludDY0W10pOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X2FkZEV4ZWN1dGlvbktleVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmFyYzU4X2FkZEV4ZWN1dGlvbktleToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTIwCiAgICAvLyBhcmM1OF9hZGRFeGVjdXRpb25LZXkobGVhc2U6IGJ5dGVzPDMyPiwgZ3JvdXBzOiBieXRlczwzMj5bXSwgZmlyc3RWYWxpZDogdWludDY0LCBsYXN0VmFsaWQ6IHVpbnQ2NCk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ4WzMyXQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgcHVzaGludCAzMiAvLyAzMgogICAgKgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbit1aW50OFszMl1bXSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICBjb3ZlciAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgY292ZXIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExMjEKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSB0aGlzLmFkbWluLnZhbHVlLCBFUlJfQURNSU5fT05MWSkKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIGFkbWluID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0FkbWluIH0pCiAgICBieXRlY18yIC8vICJhZG1pbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTIxCiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSwgRVJSX0FETUlOX09OTFkpCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBhZG1pbiBvbmx5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIGV4ZWN1dGlvbnMgPSBCb3hNYXA8Ynl0ZXM8MzI+LCBFeGVjdXRpb25JbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4RXhlY3V0aW9ucyB9KQogICAgYnl0ZWMgOCAvLyAieCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBjb3ZlciAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTEyMgogICAgLy8gaWYgKCF0aGlzLmV4ZWN1dGlvbnMobGVhc2UpLmV4aXN0cykgewogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBibnogYXJjNThfYWRkRXhlY3V0aW9uS2V5X2Vsc2VfYm9keUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTEyMy0xMTI3CiAgICAvLyB0aGlzLmV4ZWN1dGlvbnMobGVhc2UpLnZhbHVlID0gewogICAgLy8gICBncm91cHM6IGNsb25lKGdyb3VwcyksCiAgICAvLyAgIGZpcnN0VmFsaWQsCiAgICAvLyAgIGxhc3RWYWxpZAogICAgLy8gfQogICAgZGlnIDMKICAgIGl0b2IKICAgIHB1c2hieXRlcyAweDAwMTIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBzd2FwCiAgICBib3hfcHV0CgphcmM1OF9hZGRFeGVjdXRpb25LZXlfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyBsYXN0VXNlckludGVyYWN0aW9uID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzTGFzdFVzZXJJbnRlcmFjdGlvbiB9KQogICAgYnl0ZWNfMyAvLyAibGFzdF91c2VyX2ludGVyYWN0aW9uIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyB0aGlzLmxhc3RVc2VySW50ZXJhY3Rpb24udmFsdWUgPSBHbG9iYWwubGF0ZXN0VGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIyCiAgICAvLyBsYXN0Q2hhbmdlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzTGFzdENoYW5nZSB9KQogICAgYnl0ZWMgNiAvLyAibGFzdF9jaGFuZ2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIHRoaXMubGFzdENoYW5nZS52YWx1ZSA9IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTEyMAogICAgLy8gYXJjNThfYWRkRXhlY3V0aW9uS2V5KGxlYXNlOiBieXRlczwzMj4sIGdyb3VwczogYnl0ZXM8MzI+W10sIGZpcnN0VmFsaWQ6IHVpbnQ2NCwgbGFzdFZhbGlkOiB1aW50NjQpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmFyYzU4X2FkZEV4ZWN1dGlvbktleV9lbHNlX2JvZHlAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTI5CiAgICAvLyBhc3NlcnQodGhpcy5leGVjdXRpb25zKGxlYXNlKS52YWx1ZS5maXJzdFZhbGlkID09PSBmaXJzdFZhbGlkLCBFUlJfRVhFQ1VUSU9OX0tFWV9VUERBVEVfTVVTVF9NQVRDSF9GSVJTVF9WQUxJRCkKICAgIGRpZyAyCiAgICBkdXAKICAgIGludGNfMiAvLyAyCiAgICBpbnRjXzMgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGRpZyA1CiAgICA9PQogICAgYXNzZXJ0IC8vIGV4ZWN1dGlvbiBrZXkgdXBkYXRlIG11c3QgbWF0Y2ggZmlyc3QgdmFsaWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTMwCiAgICAvLyBhc3NlcnQodGhpcy5leGVjdXRpb25zKGxlYXNlKS52YWx1ZS5sYXN0VmFsaWQgPT09IGxhc3RWYWxpZCwgRVJSX0VYRUNVVElPTl9LRVlfVVBEQVRFX01VU1RfTUFUQ0hfTEFTVF9WQUxJRCkKICAgIGR1cAogICAgcHVzaGludCAxMCAvLyAxMAogICAgaW50Y18zIC8vIDgKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICB1bmNvdmVyIDMKICAgID09CiAgICBhc3NlcnQgLy8gZXhlY3V0aW9uIGtleSB1cGRhdGUgbXVzdCBtYXRjaCBsYXN0IHZhbGlkCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTEzMgogICAgLy8gdGhpcy5leGVjdXRpb25zKGxlYXNlKS52YWx1ZS5ncm91cHMgPSBbLi4uY2xvbmUodGhpcy5leGVjdXRpb25zKGxlYXNlKS52YWx1ZS5ncm91cHMpLCAuLi5jbG9uZShncm91cHMpXQogICAgZHVwCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMQogICAgbGVuCiAgICBkaWcgMgogICAgZGlnIDIKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgdW5jb3ZlciA0CiAgICBleHRyYWN0IDIgMAogICAgY29uY2F0IC8vIG9uIGVycm9yOiBtYXggYXJyYXkgbGVuZ3RoIGV4Y2VlZGVkCiAgICBkdXAKICAgIGV4dHJhY3QgMiAwCiAgICBsZW4KICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgIC8KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICByZXBsYWNlMiAwCiAgICB1bmNvdmVyIDIKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDMKICAgIGV4dHJhY3QzCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGJveF9wdXQKICAgIGIgYXJjNThfYWRkRXhlY3V0aW9uS2V5X2FmdGVyX2lmX2Vsc2VANAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVtb3ZlRXhlY3V0aW9uS2V5W3JvdXRpbmddKCkgLT4gdm9pZDoKYXJjNThfcmVtb3ZlRXhlY3V0aW9uS2V5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExMzkKICAgIC8vIGFyYzU4X3JlbW92ZUV4ZWN1dGlvbktleShsZWFzZTogYnl0ZXM8MzI+KTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDhbMzJdCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIGV4ZWN1dGlvbnMgPSBCb3hNYXA8Ynl0ZXM8MzI+LCBFeGVjdXRpb25JbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4RXhlY3V0aW9ucyB9KQogICAgYnl0ZWMgOCAvLyAieCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE0MAogICAgLy8gYXNzZXJ0KHRoaXMuZXhlY3V0aW9ucyhsZWFzZSkuZXhpc3RzLCBFUlJfRVhFQ1VUSU9OX0tFWV9ET0VTX05PVF9FWElTVCkKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGV4ZWN1dGlvbiBrZXkgZG9lcyBub3QgZXhpc3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTQxCiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSB8fCB0aGlzLmV4ZWN1dGlvbnMobGVhc2UpLnZhbHVlLmxhc3RWYWxpZCA8IEdsb2JhbC5yb3VuZCwgRVJSX0FETUlOX09OTFkpCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE2CiAgICAvLyBhZG1pbiA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNBZG1pbiB9KQogICAgYnl0ZWNfMiAvLyAiYWRtaW4iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE0MQogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuYWRtaW4udmFsdWUgfHwgdGhpcy5leGVjdXRpb25zKGxlYXNlKS52YWx1ZS5sYXN0VmFsaWQgPCBHbG9iYWwucm91bmQsIEVSUl9BRE1JTl9PTkxZKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBibnogYXJjNThfcmVtb3ZlRXhlY3V0aW9uS2V5X2Jvb2xfdHJ1ZUAzCiAgICBkdXAKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIGludGNfMyAvLyA4CiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgZ2xvYmFsIFJvdW5kCiAgICA8CiAgICBieiBhcmM1OF9yZW1vdmVFeGVjdXRpb25LZXlfYm9vbF9mYWxzZUA0CgphcmM1OF9yZW1vdmVFeGVjdXRpb25LZXlfYm9vbF90cnVlQDM6CiAgICBpbnRjXzEgLy8gMQoKYXJjNThfcmVtb3ZlRXhlY3V0aW9uS2V5X2Jvb2xfbWVyZ2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTQxCiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSB8fCB0aGlzLmV4ZWN1dGlvbnMobGVhc2UpLnZhbHVlLmxhc3RWYWxpZCA8IEdsb2JhbC5yb3VuZCwgRVJSX0FETUlOX09OTFkpCiAgICBhc3NlcnQgLy8gYWRtaW4gb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNDMKICAgIC8vIHRoaXMuZXhlY3V0aW9ucyhsZWFzZSkuZGVsZXRlKCkKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIGxhc3RVc2VySW50ZXJhY3Rpb24gPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNMYXN0VXNlckludGVyYWN0aW9uIH0pCiAgICBieXRlY18zIC8vICJsYXN0X3VzZXJfaW50ZXJhY3Rpb24iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHRoaXMubGFzdFVzZXJJbnRlcmFjdGlvbi52YWx1ZSA9IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjIKICAgIC8vIGxhc3RDaGFuZ2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNMYXN0Q2hhbmdlIH0pCiAgICBieXRlYyA2IC8vICJsYXN0X2NoYW5nZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0OAogICAgLy8gdGhpcy5sYXN0Q2hhbmdlLnZhbHVlID0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTM5CiAgICAvLyBhcmM1OF9yZW1vdmVFeGVjdXRpb25LZXkobGVhc2U6IGJ5dGVzPDMyPik6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKYXJjNThfcmVtb3ZlRXhlY3V0aW9uS2V5X2Jvb2xfZmFsc2VANDoKICAgIGludGNfMCAvLyAwCiAgICBiIGFyYzU4X3JlbW92ZUV4ZWN1dGlvbktleV9ib29sX21lcmdlQDUKCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X2dldFBsdWdpbnNbcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF9nZXRQbHVnaW5zOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gIiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTQ5CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTUxCiAgICAvLyBsZXQgcGx1Z2luczogUGx1Z2luSW5mb1tdID0gW10KICAgIGJ5dGVjIDEwIC8vIDB4MDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNTIKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSArPSAxKSB7CiAgICBpbnRjXzAgLy8gMAoKYXJjNThfZ2V0UGx1Z2luc193aGlsZV90b3BAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTUyCiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkgKz0gMSkgewogICAgZGlnIDIKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwCiAgICBidXJ5IDUKICAgIGRpZyAxCiAgICA+CiAgICBieiBhcmM1OF9nZXRQbHVnaW5zX2FmdGVyX3doaWxlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTUzCiAgICAvLyBpZiAodGhpcy5wbHVnaW5zKGtleXNbaV0pLmV4aXN0cykgewogICAgZGlnIDIKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgZGlnIDEKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICB1bmNvdmVyIDIKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBkdXAKICAgIGJ1cnkgNAogICAgZGlnIDYKICAgIGRpZyAxCiAgICAtIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZGlnIDMKICAgIGxlbgogICAgdW5jb3ZlciAyCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgZGlnIDQKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgc3Vic3RyaW5nMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBwbHVnaW5zID0gQm94TWFwPFBsdWdpbktleSwgUGx1Z2luSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeFBsdWdpbnMgfSk7CiAgICBieXRlYyA0IC8vICJwIgogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGJ1cnkgNgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNTMKICAgIC8vIGlmICh0aGlzLnBsdWdpbnMoa2V5c1tpXSkuZXhpc3RzKSB7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJ6IGFyYzU4X2dldFBsdWdpbnNfYWZ0ZXJfaWZfZWxzZUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE1NAogICAgLy8gcGx1Z2lucy5wdXNoKHRoaXMucGx1Z2lucyhrZXlzW2ldKS52YWx1ZSkKICAgIGRpZyA0CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgZGlnIDIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBleHRyYWN0IDIgMAogICAgYnl0ZWMgMjAgLy8gMHgwMDAyCiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgY292ZXIgMgogICAgaW50Y18xIC8vIDEKICAgIHVuY292ZXIgMwogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnQKICAgIGJ1cnkgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNTUKICAgIC8vIGNvbnRpbnVlCiAgICBiIGFyYzU4X2dldFBsdWdpbnNfd2hpbGVfdG9wQDIKCmFyYzU4X2dldFBsdWdpbnNfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNTcKICAgIC8vIHBsdWdpbnMucHVzaChlbXB0eVBsdWdpbkluZm8oKSkKICAgIGRpZyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgc3dhcAogICAgZXh0cmFjdCAyIDAKICAgIGludGNfMSAvLyAxCiAgICBieXRlYyAyMSAvLyAweDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnQKICAgIGJ1cnkgMgogICAgYiBhcmM1OF9nZXRQbHVnaW5zX3doaWxlX3RvcEAyCgphcmM1OF9nZXRQbHVnaW5zX2FmdGVyX3doaWxlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE0OQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBieXRlYyA3IC8vIDB4MTUxZjdjNzUKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfZ2V0TmFtZWRQbHVnaW5zW3JvdXRpbmddKCkgLT4gdm9pZDoKYXJjNThfZ2V0TmFtZWRQbHVnaW5zOgogICAgaW50Y18wIC8vIDAKICAgIGR1cAogICAgYnl0ZWNfMSAvLyAiIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNjIKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNjQKICAgIC8vIGxldCBwbHVnaW5zOiBQbHVnaW5JbmZvW10gPSBbXQogICAgYnl0ZWMgMTAgLy8gMHgwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE2NQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSArPSAxKSB7CiAgICBpbnRjXzAgLy8gMAoKYXJjNThfZ2V0TmFtZWRQbHVnaW5zX3doaWxlX3RvcEAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNjUKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkgKz0gMSkgewogICAgZGlnIDIKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDEKICAgID4KICAgIGR1cAogICAgYnVyeSA1CiAgICBieiBhcmM1OF9nZXROYW1lZFBsdWdpbnNfYWZ0ZXJfd2hpbGVAOQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNjYKICAgIC8vIGlmICh0aGlzLm5hbWVkUGx1Z2lucyhuYW1lc1tpXSkuZXhpc3RzKSB7CiAgICBkaWcgMgogICAgZXh0cmFjdCAyIDAKICAgIGRpZyA0CiAgICBhc3NlcnQgLy8gaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGRpZyAxCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgZGlnIDEKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGV4dHJhY3QzCiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM1CiAgICAvLyBuYW1lZFBsdWdpbnMgPSBCb3hNYXA8c3RyaW5nLCBQbHVnaW5LZXk+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhOYW1lZFBsdWdpbnMgfSk7CiAgICBieXRlYyAxNiAvLyAibiIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBidXJ5IDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTY2CiAgICAvLyBpZiAodGhpcy5uYW1lZFBsdWdpbnMobmFtZXNbaV0pLmV4aXN0cykgewogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBhcmM1OF9nZXROYW1lZFBsdWdpbnNfYWZ0ZXJfaWZfZWxzZUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE2NwogICAgLy8gY29uc3QgbmFtZUtleSA9IGNsb25lKHRoaXMubmFtZWRQbHVnaW5zKG5hbWVzW2ldKS52YWx1ZSkKICAgIGRpZyA1CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBwbHVnaW5zID0gQm94TWFwPFBsdWdpbktleSwgUGx1Z2luSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeFBsdWdpbnMgfSk7CiAgICBieXRlYyA0IC8vICJwIgogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGJ1cnkgNgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNjgKICAgIC8vIGlmICh0aGlzLnBsdWdpbnMobmFtZUtleSkuZXhpc3RzKSB7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJ6IGFyYzU4X2dldE5hbWVkUGx1Z2luc19hZnRlcl9pZl9lbHNlQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTY5CiAgICAvLyBwbHVnaW5zLnB1c2godGhpcy5wbHVnaW5zKG5hbWVLZXkpLnZhbHVlKQogICAgZGlnIDQKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBkaWcgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIHN3YXAKICAgIGV4dHJhY3QgMiAwCiAgICBieXRlYyAyMCAvLyAweDAwMDIKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICBjb3ZlciAyCiAgICBpbnRjXzEgLy8gMQogICAgdW5jb3ZlciAzCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudAogICAgYnVyeSAyCgphcmM1OF9nZXROYW1lZFBsdWdpbnNfYmxvY2tAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTY1CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGR1cAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiBhcmM1OF9nZXROYW1lZFBsdWdpbnNfd2hpbGVfdG9wQDIKCmFyYzU4X2dldE5hbWVkUGx1Z2luc19hZnRlcl9pZl9lbHNlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE3MgogICAgLy8gcGx1Z2lucy5wdXNoKGVtcHR5UGx1Z2luSW5mbygpKQogICAgZGlnIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBleHRyYWN0IDIgMAogICAgaW50Y18xIC8vIDEKICAgIGJ5dGVjIDIxIC8vIDB4MDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudAogICAgYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE3MwogICAgLy8gY29udGludWUKICAgIGIgYXJjNThfZ2V0TmFtZWRQbHVnaW5zX2Jsb2NrQDgKCmFyYzU4X2dldE5hbWVkUGx1Z2luc19hZnRlcl9pZl9lbHNlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE3NQogICAgLy8gcGx1Z2lucy5wdXNoKGVtcHR5UGx1Z2luSW5mbygpKQogICAgZGlnIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBleHRyYWN0IDIgMAogICAgaW50Y18xIC8vIDEKICAgIGJ5dGVjIDIxIC8vIDB4MDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudAogICAgYnVyeSAyCiAgICBiIGFyYzU4X2dldE5hbWVkUGx1Z2luc19ibG9ja0A4CgphcmM1OF9nZXROYW1lZFBsdWdpbnNfYWZ0ZXJfd2hpbGVAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTYyCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGJ5dGVjIDcgLy8gMHgxNTFmN2M3NQogICAgZGlnIDIKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9nZXRFc2Nyb3dzW3JvdXRpbmddKCkgLT4gdm9pZDoKYXJjNThfZ2V0RXNjcm93czoKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE4MAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE4MgogICAgLy8gbGV0IHJlc3VsdDogRXNjcm93SW5mb1tdID0gW10KICAgIGJ5dGVjIDEwIC8vIDB4MDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExODMKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBlc2Nyb3dzLmxlbmd0aDsgaSArPSAxKSB7CiAgICBpbnRjXzAgLy8gMAoKYXJjNThfZ2V0RXNjcm93c193aGlsZV90b3BAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTgzCiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgZXNjcm93cy5sZW5ndGg7IGkgKz0gMSkgewogICAgZGlnIDIKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDEKICAgID4KICAgIGR1cAogICAgYnVyeSA1CiAgICBieiBhcmM1OF9nZXRFc2Nyb3dzX2FmdGVyX3doaWxlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTg0CiAgICAvLyBpZiAodGhpcy5lc2Nyb3dzKGVzY3Jvd3NbaV0pLmV4aXN0cykgewogICAgZGlnIDIKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgNAogICAgYXNzZXJ0IC8vIGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkaWcgMQogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGRpZyAxCiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwMgogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBleHRyYWN0MwogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNwogICAgLy8gZXNjcm93cyA9IEJveE1hcDxzdHJpbmcsIEVzY3Jvd0luZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhFc2Nyb3dzIH0pCiAgICBieXRlYyA1IC8vICJlIgogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGJ1cnkgNgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExODQKICAgIC8vIGlmICh0aGlzLmVzY3Jvd3MoZXNjcm93c1tpXSkuZXhpc3RzKSB7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJ6IGFyYzU4X2dldEVzY3Jvd3NfYWZ0ZXJfaWZfZWxzZUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE4NQogICAgLy8gcmVzdWx0LnB1c2godGhpcy5lc2Nyb3dzKGVzY3Jvd3NbaV0pLnZhbHVlKQogICAgZGlnIDQKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBkaWcgMgogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdCAvLyBvbiBlcnJvcjogbWF4IGFycmF5IGxlbmd0aCBleGNlZWRlZAogICAgc3dhcAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHJlcGxhY2UyIDAKICAgIGJ1cnkgMgoKYXJjNThfZ2V0RXNjcm93c19ibG9ja0A2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExODMKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBlc2Nyb3dzLmxlbmd0aDsgaSArPSAxKSB7CiAgICBkdXAKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgYXJjNThfZ2V0RXNjcm93c193aGlsZV90b3BAMgoKYXJjNThfZ2V0RXNjcm93c19hZnRlcl9pZl9lbHNlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE4OAogICAgLy8gcmVzdWx0LnB1c2goZW1wdHlFc2Nyb3dJbmZvKCkpCiAgICBkaWcgMQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L3V0aWxzLnRzOjIwLTIzCiAgICAvLyByZXR1cm4gewogICAgLy8gICBpZDogMCwKICAgIC8vICAgbG9ja2VkOiBmYWxzZQogICAgLy8gfTsKICAgIHB1c2hieXRlcyAweDAwMDAwMDAwMDAwMDAwMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExODgKICAgIC8vIHJlc3VsdC5wdXNoKGVtcHR5RXNjcm93SW5mbygpKQogICAgY29uY2F0IC8vIG9uIGVycm9yOiBtYXggYXJyYXkgbGVuZ3RoIGV4Y2VlZGVkCiAgICBzd2FwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgcmVwbGFjZTIgMAogICAgYnVyeSAyCiAgICBiIGFyYzU4X2dldEVzY3Jvd3NfYmxvY2tANgoKYXJjNThfZ2V0RXNjcm93c19hZnRlcl93aGlsZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExODAKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgYnl0ZWMgNyAvLyAweDE1MWY3Yzc1CiAgICBkaWcgMgogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X2dldEFsbG93YW5jZXNbcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF9nZXRBbGxvd2FuY2VzOgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTkzCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbit1dGY4W10pCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwbiAyCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdWludDY0W10pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE5NQogICAgLy8gbGV0IHJlc3VsdDogQWxsb3dhbmNlSW5mb1tdID0gW10KICAgIGJ5dGVjIDEwIC8vIDB4MDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExOTYKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhc3NldHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMCAvLyAwCgphcmM1OF9nZXRBbGxvd2FuY2VzX3doaWxlX3RvcEAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExOTYKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhc3NldHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGR1cAogICAgZGlnIDMKICAgIDwKICAgIGJ6IGFyYzU4X2dldEFsbG93YW5jZXNfYWZ0ZXJfd2hpbGVANwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExOTcKICAgIC8vIGNvbnN0IGtleTogQWxsb3dhbmNlS2V5ID0geyBlc2Nyb3csIGFzc2V0OiBhc3NldHNbaV0gfQogICAgZGlnIDMKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMQogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGRpZyA1CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWMgMTMgLy8gMHgwMDBhCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGFsbG93YW5jZXMgPSBCb3hNYXA8QWxsb3dhbmNlS2V5LCBBbGxvd2FuY2VJbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4QWxsb3dhbmNlcyB9KSAvLyAzOF81MDAKICAgIGJ5dGVjIDE0IC8vICJhIgogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGJ1cnkgNwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExOTgKICAgIC8vIGlmICh0aGlzLmFsbG93YW5jZXMoa2V5KS5leGlzdHMpIHsKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYnogYXJjNThfZ2V0QWxsb3dhbmNlc19hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTk5CiAgICAvLyByZXN1bHQucHVzaCh0aGlzLmFsbG93YW5jZXMoa2V5KS52YWx1ZSkKICAgIGRpZyA1CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgZGlnIDIKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQgLy8gb24gZXJyb3I6IG1heCBhcnJheSBsZW5ndGggZXhjZWVkZWQKICAgIHN3YXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICByZXBsYWNlMiAwCiAgICBidXJ5IDIKCmFyYzU4X2dldEFsbG93YW5jZXNfYmxvY2tANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTk2CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgYXNzZXRzLmxlbmd0aDsgaSArPSAxKSB7CiAgICBkdXAKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgYXJjNThfZ2V0QWxsb3dhbmNlc193aGlsZV90b3BAMgoKYXJjNThfZ2V0QWxsb3dhbmNlc19hZnRlcl9pZl9lbHNlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTIwMgogICAgLy8gcmVzdWx0LnB1c2goZW1wdHlBbGxvd2FuY2VJbmZvKCkpCiAgICBkaWcgMQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L3V0aWxzLnRzOjI3LTM2CiAgICAvLyByZXR1cm4gewogICAgLy8gICB0eXBlOiBuZXcgVWludDgoMCksCiAgICAvLyAgIG1heDogMCwKICAgIC8vICAgYW1vdW50OiAwLAogICAgLy8gICBzcGVudDogMCwKICAgIC8vICAgaW50ZXJ2YWw6IDAsCiAgICAvLyAgIGxhc3Q6IDAsCiAgICAvLyAgIHN0YXJ0OiAwLAogICAgLy8gICB1c2VSb3VuZHM6IGZhbHNlCiAgICAvLyB9OwogICAgcHVzaGJ5dGVzIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyMDIKICAgIC8vIHJlc3VsdC5wdXNoKGVtcHR5QWxsb3dhbmNlSW5mbygpKQogICAgY29uY2F0IC8vIG9uIGVycm9yOiBtYXggYXJyYXkgbGVuZ3RoIGV4Y2VlZGVkCiAgICBzd2FwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgcmVwbGFjZTIgMAogICAgYnVyeSAyCiAgICBiIGFyYzU4X2dldEFsbG93YW5jZXNfYmxvY2tANgoKYXJjNThfZ2V0QWxsb3dhbmNlc19hZnRlcl93aGlsZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExOTMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgYnl0ZWMgNyAvLyAweDE1MWY3Yzc1CiAgICBkaWcgMgogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X2dldEV4ZWN1dGlvbnNbcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF9nZXRFeGVjdXRpb25zOgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMjA3CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdWludDhbMzJdW10pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTIwOQogICAgLy8gbGV0IHJlc3VsdDogRXhlY3V0aW9uSW5mb1tdID0gW10KICAgIGJ5dGVjIDEwIC8vIDB4MDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyMTAKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBsZWFzZXMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMCAvLyAwCgphcmM1OF9nZXRFeGVjdXRpb25zX3doaWxlX3RvcEAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyMTAKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBsZWFzZXMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGR1cAogICAgZGlnIDMKICAgIDwKICAgIGJ6IGFyYzU4X2dldEV4ZWN1dGlvbnNfYWZ0ZXJfd2hpbGVANwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyMTEKICAgIC8vIGlmICh0aGlzLmV4ZWN1dGlvbnMobGVhc2VzW2ldKS5leGlzdHMpIHsKICAgIGRpZyAzCiAgICBleHRyYWN0IDIgMAogICAgZGlnIDEKICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgICoKICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBleGVjdXRpb25zID0gQm94TWFwPGJ5dGVzPDMyPiwgRXhlY3V0aW9uSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeEV4ZWN1dGlvbnMgfSkKICAgIGJ5dGVjIDggLy8gIngiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgYnVyeSA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTIxMQogICAgLy8gaWYgKHRoaXMuZXhlY3V0aW9ucyhsZWFzZXNbaV0pLmV4aXN0cykgewogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBhcmM1OF9nZXRFeGVjdXRpb25zX2FmdGVyX2lmX2Vsc2VANQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyMTIKICAgIC8vIHJlc3VsdC5wdXNoKHRoaXMuZXhlY3V0aW9ucyhsZWFzZXNbaV0pLnZhbHVlKQogICAgZGlnIDQKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBkaWcgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIHN3YXAKICAgIGV4dHJhY3QgMiAwCiAgICBieXRlYyAyMCAvLyAweDAwMDIKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICBjb3ZlciAyCiAgICBpbnRjXzEgLy8gMQogICAgdW5jb3ZlciAzCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudAogICAgYnVyeSAyCgphcmM1OF9nZXRFeGVjdXRpb25zX2Jsb2NrQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTIxMAogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGxlYXNlcy5sZW5ndGg7IGkgKz0gMSkgewogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIGFyYzU4X2dldEV4ZWN1dGlvbnNfd2hpbGVfdG9wQDIKCmFyYzU4X2dldEV4ZWN1dGlvbnNfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyMTUKICAgIC8vIHJlc3VsdC5wdXNoKGVtcHR5RXhlY3V0aW9uSW5mbygpKQogICAgZGlnIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBleHRyYWN0IDIgMAogICAgaW50Y18xIC8vIDEKICAgIHB1c2hieXRlcyAweDAwMDIwMDEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudAogICAgYnVyeSAyCiAgICBiIGFyYzU4X2dldEV4ZWN1dGlvbnNfYmxvY2tANgoKYXJjNThfZ2V0RXhlY3V0aW9uc19hZnRlcl93aGlsZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyMDcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgYnl0ZWMgNyAvLyAweDE1MWY3Yzc1CiAgICBkaWcgMgogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50Lm1icltyb3V0aW5nXSgpIC0+IHZvaWQ6Cm1icjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMjIwCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbit1dGY4W10pCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbit1dGY4W10pCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2MgogICAgLy8gcmV0dXJuIE1pbkVzY3Jvd3NNQlIgKyAoQm94Q29zdFBlckJ5dGUgKiBCeXRlcyhlc2Nyb3cpLmxlbmd0aCk7CiAgICBkaWcgMwogICAgbGVuCiAgICBpbnRjIDQgLy8gNDAwCiAgICAqCiAgICBwdXNoaW50IDY1MDAgLy8gNjUwMAogICAgZGlnIDEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMjMwCiAgICAvLyBwbHVnaW5zOiB0aGlzLnBsdWdpbnNNYnIoZXNjcm93LCBtZXRob2RDb3VudCksCiAgICBkaWcgNQogICAgdW5jb3ZlciA1CiAgICBjYWxsc3ViIHBsdWdpbnNNYnIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1OAogICAgLy8gcmV0dXJuIE1pbk5hbWVkUGx1Z2luTUJSICsgKEJveENvc3RQZXJCeXRlICogQnl0ZXMobmFtZSkubGVuZ3RoKTsKICAgIHVuY292ZXIgNAogICAgbGVuCiAgICBpbnRjIDQgLy8gNDAwCiAgICAqCiAgICBpbnRjIDUgLy8gMjE3MDAKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2NgogICAgLy8gcmV0dXJuIE1pbkFsbG93YW5jZU1CUiArIChCb3hDb3N0UGVyQnl0ZSAqIEJ5dGVzKGVzY3JvdykubGVuZ3RoKTsKICAgIGludGMgNiAvLyAyNzcwMAogICAgdW5jb3ZlciA0CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzAKICAgIC8vIHJldHVybiBNaW5FeGVjdXRpb25zTUJSICsgKEJveENvc3RQZXJCeXRlICogKGdyb3VwcyAqIDMyKSk7CiAgICB1bmNvdmVyIDQKICAgIHB1c2hpbnQgMTI4MDAgLy8gMTI4MDAKICAgICoKICAgIHB1c2hpbnQgMjA1MDAgLy8gMjA1MDAKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNwogICAgLy8gZXNjcm93cyA9IEJveE1hcDxzdHJpbmcsIEVzY3Jvd0luZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhFc2Nyb3dzIH0pCiAgICBieXRlYyA1IC8vICJlIgogICAgdW5jb3ZlciA2CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMjM1CiAgICAvLyBlc2Nyb3dFeGlzdHM6IHRoaXMuZXNjcm93cyhlc2Nyb3cpLmV4aXN0cywKICAgIGJveF9sZW4KICAgIGNvdmVyIDYKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyMzgKICAgIC8vIEdsb2JhbC5taW5CYWxhbmNlICsKICAgIGdsb2JhbCBNaW5CYWxhbmNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTIzNy0xMjM5CiAgICAvLyBOZXdDb3N0Rm9yQVJDNTggKwogICAgLy8gR2xvYmFsLm1pbkJhbGFuY2UgKwogICAgLy8gQVJDNThXYWxsZXRJRHNCeUFjY291bnRzTWJyICsKICAgIHB1c2hpbnQgMTYyMTAwIC8vIDE2MjEwMAogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyMzctMTI0MAogICAgLy8gTmV3Q29zdEZvckFSQzU4ICsKICAgIC8vIEdsb2JhbC5taW5CYWxhbmNlICsKICAgIC8vIEFSQzU4V2FsbGV0SURzQnlBY2NvdW50c01iciArCiAgICAvLyBlc2Nyb3dzCiAgICBkaWcgNQogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyMjktMTI0MgogICAgLy8gcmV0dXJuIHsKICAgIC8vICAgcGx1Z2luczogdGhpcy5wbHVnaW5zTWJyKGVzY3JvdywgbWV0aG9kQ291bnQpLAogICAgLy8gICBuYW1lZFBsdWdpbnM6IHRoaXMubmFtZWRQbHVnaW5zTWJyKHBsdWdpbiksCiAgICAvLyAgIGVzY3Jvd3MsCiAgICAvLyAgIGFsbG93YW5jZXM6IHRoaXMuYWxsb3dhbmNlc01icihlc2Nyb3cpLAogICAgLy8gICBleGVjdXRpb25zOiB0aGlzLmV4ZWN1dGlvbnNNYnIoZ3JvdXBzKSwKICAgIC8vICAgZXNjcm93RXhpc3RzOiB0aGlzLmVzY3Jvd3MoZXNjcm93KS5leGlzdHMsCiAgICAvLyAgIG5ld0VzY3Jvd01pbnRDb3N0OiAoCiAgICAvLyAgICAgTmV3Q29zdEZvckFSQzU4ICsKICAgIC8vICAgICBHbG9iYWwubWluQmFsYW5jZSArCiAgICAvLyAgICAgQVJDNThXYWxsZXRJRHNCeUFjY291bnRzTWJyICsKICAgIC8vICAgICBlc2Nyb3dzCiAgICAvLyAgICkKICAgIC8vIH0KICAgIHVuY292ZXIgNAogICAgaXRvYgogICAgdW5jb3ZlciA0CiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgNAogICAgaXRvYgogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBpdG9iCiAgICBjb25jYXQKICAgIGJ5dGVjIDkgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgNAogICAgc2V0Yml0CiAgICBjb25jYXQKICAgIHN3YXAKICAgIGl0b2IKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyMjAKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgYnl0ZWMgNyAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQucGx1Z2luc01icihlc2Nyb3c6IGJ5dGVzLCBtZXRob2RDb3VudDogdWludDY0KSAtPiB1aW50NjQ6CnBsdWdpbnNNYnI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIHByaXZhdGUgcGx1Z2luc01icihlc2Nyb3c6IHN0cmluZywgbWV0aG9kQ291bnQ6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAyIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1MwogICAgLy8gQm94Q29zdFBlckJ5dGUgKiAoKE1ldGhvZFJlc3RyaWN0aW9uQnl0ZUxlbmd0aCAqIG1ldGhvZENvdW50KSArIEJ5dGVzKGVzY3JvdykubGVuZ3RoKQogICAgcHVzaGludCAyMCAvLyAyMAogICAgZnJhbWVfZGlnIC0xCiAgICAqCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgKwogICAgaW50YyA0IC8vIDQwMAogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjUyCiAgICAvLyByZXR1cm4gTWluUGx1Z2luTUJSICsgKAogICAgcHVzaGludCAzODkwMCAvLyAzODkwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjUyLTU0CiAgICAvLyByZXR1cm4gTWluUGx1Z2luTUJSICsgKAogICAgLy8gICBCb3hDb3N0UGVyQnl0ZSAqICgoTWV0aG9kUmVzdHJpY3Rpb25CeXRlTGVuZ3RoICogbWV0aG9kQ291bnQpICsgQnl0ZXMoZXNjcm93KS5sZW5ndGgpCiAgICAvLyApOwogICAgKwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5tYXliZU5ld0VzY3Jvdyhlc2Nyb3c6IGJ5dGVzKSAtPiB1aW50NjQ6Cm1heWJlTmV3RXNjcm93OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjczCiAgICAvLyBwcml2YXRlIG1heWJlTmV3RXNjcm93KGVzY3Jvdzogc3RyaW5nKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo3NAogICAgLy8gaWYgKGVzY3JvdyA9PT0gJycpIHsKICAgIGZyYW1lX2RpZyAtMQogICAgYnl0ZWNfMSAvLyAiIgogICAgPT0KICAgIGJ6IG1heWJlTmV3RXNjcm93X2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjc1CiAgICAvLyByZXR1cm4gMDsKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICByZXRzdWIKCm1heWJlTmV3RXNjcm93X2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNwogICAgLy8gZXNjcm93cyA9IEJveE1hcDxzdHJpbmcsIEVzY3Jvd0luZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhFc2Nyb3dzIH0pCiAgICBieXRlYyA1IC8vICJlIgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzgKICAgIC8vIHJldHVybiB0aGlzLmVzY3Jvd3MoZXNjcm93KS5leGlzdHMKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjc4LTgwCiAgICAvLyByZXR1cm4gdGhpcy5lc2Nyb3dzKGVzY3JvdykuZXhpc3RzCiAgICAvLyAgID8gdGhpcy5lc2Nyb3dzKGVzY3JvdykudmFsdWUuaWQKICAgIC8vICAgOiB0aGlzLm5ld0VzY3Jvdyhlc2Nyb3cpOwogICAgYnogbWF5YmVOZXdFc2Nyb3dfdGVybmFyeV9mYWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzkKICAgIC8vID8gdGhpcy5lc2Nyb3dzKGVzY3JvdykudmFsdWUuaWQKICAgIGZyYW1lX2RpZyAwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CgptYXliZU5ld0VzY3Jvd190ZXJuYXJ5X21lcmdlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzgtODAKICAgIC8vIHJldHVybiB0aGlzLmVzY3Jvd3MoZXNjcm93KS5leGlzdHMKICAgIC8vICAgPyB0aGlzLmVzY3Jvd3MoZXNjcm93KS52YWx1ZS5pZAogICAgLy8gICA6IHRoaXMubmV3RXNjcm93KGVzY3Jvdyk7CiAgICBzd2FwCiAgICByZXRzdWIKCm1heWJlTmV3RXNjcm93X3Rlcm5hcnlfZmFsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4MAogICAgLy8gOiB0aGlzLm5ld0VzY3Jvdyhlc2Nyb3cpOwogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIG5ld0VzY3JvdwogICAgYiBtYXliZU5ld0VzY3Jvd190ZXJuYXJ5X21lcmdlQDUKCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50Lm5ld0VzY3Jvdyhlc2Nyb3c6IGJ5dGVzKSAtPiB1aW50NjQ6Cm5ld0VzY3JvdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4MwogICAgLy8gcHJpdmF0ZSBuZXdFc2Nyb3coZXNjcm93OiBzdHJpbmcpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODQKICAgIC8vIGlmICh0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlICE9PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcykgewogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29udHJvbGxlZEFkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ29udHJvbGxlZEFkZHJlc3MgfSk7CiAgICBieXRlY18wIC8vICJjb250cm9sbGVkX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODQKICAgIC8vIGlmICh0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlICE9PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcykgewogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAhPQogICAgYnogbmV3RXNjcm93X2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg1LTkxCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogdGhpcy5lc2Nyb3dzTWJyKGVzY3JvdykKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODcKICAgIC8vIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGNvbnRyb2xsZWRBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0NvbnRyb2xsZWRBZGRyZXNzIH0pOwogICAgYnl0ZWNfMCAvLyAiY29udHJvbGxlZF9hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg3CiAgICAvLyBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg4CiAgICAvLyByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjYyCiAgICAvLyByZXR1cm4gTWluRXNjcm93c01CUiArIChCb3hDb3N0UGVyQnl0ZSAqIEJ5dGVzKGVzY3JvdykubGVuZ3RoKTsKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjIDQgLy8gNDAwCiAgICAqCiAgICBwdXNoaW50IDY1MDAgLy8gNjUwMAogICAgKwogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODUtOTAKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiB0aGlzLmVzY3Jvd3NNYnIoZXNjcm93KQogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg1LTkxCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogdGhpcy5lc2Nyb3dzTWJyKGVzY3JvdykKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAoKbmV3RXNjcm93X2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5NC0xMDQKICAgIC8vIGNvbnN0IGlkID0gYWJpQ2FsbDx0eXBlb2YgRXNjcm93RmFjdG9yeS5wcm90b3R5cGUubmV3Pih7CiAgICAvLyAgIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgYXBwSWQ6IHRoaXMuZXNjcm93RmFjdG9yeS52YWx1ZSwKICAgIC8vICAgYXJnczogWwogICAgLy8gICAgIGl0eG4ucGF5bWVudCh7CiAgICAvLyAgICAgICBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgICBhbW91bnQ6IE5ld0Nvc3RGb3JBUkM1OCArIEdsb2JhbC5taW5CYWxhbmNlLAogICAgLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMuZXNjcm93RmFjdG9yeS52YWx1ZS5hZGRyZXNzCiAgICAvLyAgICAgfSksCiAgICAvLyAgIF0KICAgIC8vIH0pLnJldHVyblZhbHVlCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTkKICAgIC8vIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGNvbnRyb2xsZWRBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0NvbnRyb2xsZWRBZGRyZXNzIH0pOwogICAgYnl0ZWNfMCAvLyAiY29udHJvbGxlZF9hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjk5CiAgICAvLyBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwMAogICAgLy8gYW1vdW50OiBOZXdDb3N0Rm9yQVJDNTggKyBHbG9iYWwubWluQmFsYW5jZSwKICAgIHB1c2hpbnQgMTUwMDAwIC8vIDE1MDAwMAogICAgZ2xvYmFsIE1pbkJhbGFuY2UKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDEKICAgIC8vIHJlY2VpdmVyOiB0aGlzLmVzY3Jvd0ZhY3RvcnkudmFsdWUuYWRkcmVzcwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNAogICAgLy8gZXNjcm93RmFjdG9yeSA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzRXNjcm93RmFjdG9yeSB9KQogICAgYnl0ZWMgMTggLy8gImVzY3Jvd19mYWN0b3J5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwMQogICAgLy8gcmVjZWl2ZXI6IHRoaXMuZXNjcm93RmFjdG9yeS52YWx1ZS5hZGRyZXNzCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZHVwCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgZGlnIDEKICAgIGl0eG5fZmllbGQgU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTgtMTAyCiAgICAvLyBpdHhuLnBheW1lbnQoewogICAgLy8gICBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgIGFtb3VudDogTmV3Q29zdEZvckFSQzU4ICsgR2xvYmFsLm1pbkJhbGFuY2UsCiAgICAvLyAgIHJlY2VpdmVyOiB0aGlzLmVzY3Jvd0ZhY3RvcnkudmFsdWUuYWRkcmVzcwogICAgLy8gfSksCiAgICBpbnRjXzEgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTQtMTA0CiAgICAvLyBjb25zdCBpZCA9IGFiaUNhbGw8dHlwZW9mIEVzY3Jvd0ZhY3RvcnkucHJvdG90eXBlLm5ldz4oewogICAgLy8gICBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgIGFwcElkOiB0aGlzLmVzY3Jvd0ZhY3RvcnkudmFsdWUsCiAgICAvLyAgIGFyZ3M6IFsKICAgIC8vICAgICBpdHhuLnBheW1lbnQoewogICAgLy8gICAgICAgc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgICAgYW1vdW50OiBOZXdDb3N0Rm9yQVJDNTggKyBHbG9iYWwubWluQmFsYW5jZSwKICAgIC8vICAgICAgIHJlY2VpdmVyOiB0aGlzLmVzY3Jvd0ZhY3RvcnkudmFsdWUuYWRkcmVzcwogICAgLy8gICAgIH0pLAogICAgLy8gICBdCiAgICAvLyB9KS5yZXR1cm5WYWx1ZQogICAgaXR4bl9uZXh0CiAgICBwdXNoYnl0ZXMgMHhkODVjZjE4NCAvLyBtZXRob2QgIm5ldyhwYXkpdWludDY0IgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgaXR4bl9maWVsZCBTZW5kZXIKICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBnaXR4biAxIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlYyA3IC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDYKICAgIC8vIHRoaXMuZXNjcm93cyhlc2Nyb3cpLnZhbHVlID0geyBpZCwgbG9ja2VkOiBmYWxzZSB9CiAgICBkdXAKICAgIGl0b2IKICAgIGJ5dGVjIDkgLy8gMHgwMAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzcKICAgIC8vIGVzY3Jvd3MgPSBCb3hNYXA8c3RyaW5nLCBFc2Nyb3dJbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4RXNjcm93cyB9KQogICAgYnl0ZWMgNSAvLyAiZSIKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTA2CiAgICAvLyB0aGlzLmVzY3Jvd3MoZXNjcm93KS52YWx1ZSA9IHsgaWQsIGxvY2tlZDogZmFsc2UgfQogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwOAogICAgLy8gcmV0dXJuIGlkOwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5wbHVnaW5DYWxsQWxsb3dlZChwbHVnaW46IHVpbnQ2NCwgY2FsbGVyOiBieXRlcywgZXNjcm93OiBieXRlcywgbWV0aG9kOiBieXRlcykgLT4gdWludDY0OgpwbHVnaW5DYWxsQWxsb3dlZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTEKICAgIC8vIHByaXZhdGUgcGx1Z2luQ2FsbEFsbG93ZWQocGx1Z2luOiB1aW50NjQsIGNhbGxlcjogQWNjb3VudCwgZXNjcm93OiBzdHJpbmcsIG1ldGhvZDogYnl0ZXM8ND4pOiBib29sZWFuIHsKICAgIHByb3RvIDQgMQogICAgYnl0ZWNfMSAvLyAiIgogICAgZHVwbiA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTEyCiAgICAvLyBjb25zdCBrZXk6IFBsdWdpbktleSA9IHsgcGx1Z2luLCBjYWxsZXIsIGVzY3JvdyB9CiAgICBmcmFtZV9kaWcgLTQKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMwogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBieXRlYyAxMiAvLyAweDAwMmEKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIHBsdWdpbnMgPSBCb3hNYXA8UGx1Z2luS2V5LCBQbHVnaW5JbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4UGx1Z2lucyB9KTsKICAgIGJ5dGVjIDQgLy8gInAiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNAogICAgLy8gaWYgKCF0aGlzLnBsdWdpbnMoa2V5KS5leGlzdHMpIHsKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYm56IHBsdWdpbkNhbGxBbGxvd2VkX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNQogICAgLy8gcmV0dXJuIGZhbHNlOwogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpwbHVnaW5DYWxsQWxsb3dlZF9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE4CiAgICAvLyBjb25zdCB7IG1ldGhvZHMsIHVzZVJvdW5kcywgbGFzdENhbGxlZCwgY29vbGRvd24sIHVzZUV4ZWN1dGlvbktleSB9ID0gdGhpcy5wbHVnaW5zKGtleSkudmFsdWUgYXMgUmVhZG9ubHk8UGx1Z2luSW5mbz4KICAgIGZyYW1lX2RpZyA2CiAgICBkdXAKICAgIHB1c2hpbnQgMTcgLy8gMTcKICAgIGludGNfMyAvLyA4CiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgZnJhbWVfYnVyeSAwCiAgICBkdXAKICAgIHB1c2hpbnQgMjcgLy8gMjcKICAgIGludGNfMSAvLyAxCiAgICBib3hfZXh0cmFjdAogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgZ2V0Yml0CiAgICBmcmFtZV9idXJ5IDUKICAgIGludGNfMiAvLyAyCiAgICBnZXRiaXQKICAgIHN3YXAKICAgIHB1c2hpbnQgMjggLy8gMjgKICAgIGludGNfMyAvLyA4CiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgZnJhbWVfYnVyeSAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTIwCiAgICAvLyBpZiAodXNlRXhlY3V0aW9uS2V5KSB7CiAgICBieiBwbHVnaW5DYWxsQWxsb3dlZF9hZnRlcl9pZl9lbHNlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMjEKICAgIC8vIHJldHVybiBmYWxzZQogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpwbHVnaW5DYWxsQWxsb3dlZF9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTI0CiAgICAvLyBsZXQgbWV0aG9kQWxsb3dlZCA9IG1ldGhvZHMubGVuZ3RoID4gMCA/IGZhbHNlIDogdHJ1ZTsKICAgIGZyYW1lX2RpZyA2CiAgICBwdXNoaW50IDQ0IC8vIDQ0CiAgICBpbnRjXzIgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgICEKICAgIGZyYW1lX2J1cnkgNAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyNQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IG1ldGhvZHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDIKCnBsdWdpbkNhbGxBbGxvd2VkX3doaWxlX3RvcEA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyNQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IG1ldGhvZHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGZyYW1lX2RpZyA2CiAgICBwdXNoaW50IDQ0IC8vIDQ0CiAgICBpbnRjXzIgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGZyYW1lX2RpZyAyCiAgICA+CiAgICBieiBwbHVnaW5DYWxsQWxsb3dlZF9ibG9ja0AxMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyNgogICAgLy8gaWYgKG1ldGhvZHNbaV0uc2VsZWN0b3IgPT09IG1ldGhvZCkgewogICAgZnJhbWVfZGlnIDIKICAgIHB1c2hpbnQgMjAgLy8gMjAKICAgICoKICAgIHB1c2hpbnQgNDYgLy8gNDYKICAgICsKICAgIGZyYW1lX2RpZyA2CiAgICBzd2FwCiAgICBwdXNoaW50IDIwIC8vIDIwCiAgICBib3hfZXh0cmFjdAogICAgZXh0cmFjdCAwIDQKICAgIGZyYW1lX2RpZyAtMQogICAgPT0KICAgIGJ6IHBsdWdpbkNhbGxBbGxvd2VkX2FmdGVyX2lmX2Vsc2VAOAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyNwogICAgLy8gbWV0aG9kQWxsb3dlZCA9IHRydWU7CiAgICBpbnRjXzEgLy8gMQogICAgZnJhbWVfYnVyeSA0CgpwbHVnaW5DYWxsQWxsb3dlZF9ibG9ja0AxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMzIKICAgIC8vIGNvbnN0IGVwb2NoUmVmID0gdXNlUm91bmRzID8gR2xvYmFsLnJvdW5kIDogR2xvYmFsLmxhdGVzdFRpbWVzdGFtcDsKICAgIGZyYW1lX2RpZyA1CiAgICBieiBwbHVnaW5DYWxsQWxsb3dlZF90ZXJuYXJ5X2ZhbHNlQDEyCiAgICBnbG9iYWwgUm91bmQKICAgIGZyYW1lX2J1cnkgMQoKcGx1Z2luQ2FsbEFsbG93ZWRfdGVybmFyeV9tZXJnZUAxMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMzUKICAgIC8vIGxhc3RDYWxsZWQgPj0gZXBvY2hSZWYgJiYKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMQogICAgPj0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMzUtMTM2CiAgICAvLyBsYXN0Q2FsbGVkID49IGVwb2NoUmVmICYmCiAgICAvLyAoZXBvY2hSZWYgLSBsYXN0Q2FsbGVkKSA+PSBjb29sZG93biAmJgogICAgYnogcGx1Z2luQ2FsbEFsbG93ZWRfYm9vbF9mYWxzZUAxNgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEzNgogICAgLy8gKGVwb2NoUmVmIC0gbGFzdENhbGxlZCkgPj0gY29vbGRvd24gJiYKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgMwogICAgLQogICAgZnJhbWVfZGlnIDAKICAgID49CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTM1LTEzNgogICAgLy8gbGFzdENhbGxlZCA+PSBlcG9jaFJlZiAmJgogICAgLy8gKGVwb2NoUmVmIC0gbGFzdENhbGxlZCkgPj0gY29vbGRvd24gJiYKICAgIGJ6IHBsdWdpbkNhbGxBbGxvd2VkX2Jvb2xfZmFsc2VAMTYKICAgIGludGNfMSAvLyAxCgpwbHVnaW5DYWxsQWxsb3dlZF9ib29sX21lcmdlQDE3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEzNS0xMzcKICAgIC8vIGxhc3RDYWxsZWQgPj0gZXBvY2hSZWYgJiYKICAgIC8vIChlcG9jaFJlZiAtIGxhc3RDYWxsZWQpID49IGNvb2xkb3duICYmCiAgICAvLyBtZXRob2RBbGxvd2VkCiAgICBmcmFtZV9kaWcgNAogICAgJiYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMzQtMTM4CiAgICAvLyByZXR1cm4gKAogICAgLy8gICBsYXN0Q2FsbGVkID49IGVwb2NoUmVmICYmCiAgICAvLyAgIChlcG9jaFJlZiAtIGxhc3RDYWxsZWQpID49IGNvb2xkb3duICYmCiAgICAvLyAgIG1ldGhvZEFsbG93ZWQKICAgIC8vICkKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpwbHVnaW5DYWxsQWxsb3dlZF9ib29sX2ZhbHNlQDE2OgogICAgaW50Y18wIC8vIDAKICAgIGIgcGx1Z2luQ2FsbEFsbG93ZWRfYm9vbF9tZXJnZUAxNwoKcGx1Z2luQ2FsbEFsbG93ZWRfdGVybmFyeV9mYWxzZUAxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMzIKICAgIC8vIGNvbnN0IGVwb2NoUmVmID0gdXNlUm91bmRzID8gR2xvYmFsLnJvdW5kIDogR2xvYmFsLmxhdGVzdFRpbWVzdGFtcDsKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGZyYW1lX2J1cnkgMQogICAgYiBwbHVnaW5DYWxsQWxsb3dlZF90ZXJuYXJ5X21lcmdlQDEzCgpwbHVnaW5DYWxsQWxsb3dlZF9hZnRlcl9pZl9lbHNlQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTI1CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7IGkgKz0gMSkgewogICAgZnJhbWVfZGlnIDIKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDIKICAgIGIgcGx1Z2luQ2FsbEFsbG93ZWRfd2hpbGVfdG9wQDUKCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LnR4blJla2V5c0JhY2sodHhuOiB1aW50NjQpIC0+IHVpbnQ2NDoKdHhuUmVrZXlzQmFjazoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNDEKICAgIC8vIHByaXZhdGUgdHhuUmVrZXlzQmFjayh0eG46IGd0eG4uVHJhbnNhY3Rpb24pOiBib29sZWFuIHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE0NAogICAgLy8gdHhuLnNlbmRlciA9PT0gdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSAmJgogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGNvbnRyb2xsZWRBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0NvbnRyb2xsZWRBZGRyZXNzIH0pOwogICAgYnl0ZWNfMCAvLyAiY29udHJvbGxlZF9hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE0NAogICAgLy8gdHhuLnNlbmRlciA9PT0gdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSAmJgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTQ0LTE0NQogICAgLy8gdHhuLnNlbmRlciA9PT0gdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSAmJgogICAgLy8gdHhuLnJla2V5VG8gPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBieiB0eG5SZWtleXNCYWNrX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE0NQogICAgLy8gdHhuLnJla2V5VG8gPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIFJla2V5VG8KICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE0NC0xNDUKICAgIC8vIHR4bi5zZW5kZXIgPT09IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUgJiYKICAgIC8vIHR4bi5yZWtleVRvID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgYnogdHhuUmVrZXlzQmFja19hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNDcKICAgIC8vIHJldHVybiB0cnVlOwogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKdHhuUmVrZXlzQmFja19hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTUxCiAgICAvLyB0eG4udHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLkFwcGxpY2F0aW9uQ2FsbAogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBUeXBlRW51bQogICAgcHVzaGludCA2IC8vIDYKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTUxLTE1MgogICAgLy8gdHhuLnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5BcHBsaWNhdGlvbkNhbGwKICAgIC8vICYmIHR4bi5hcHBJZCA9PT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbklkCiAgICBieiB0eG5SZWtleXNCYWNrX2Jvb2xfZmFsc2VAOQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE1MgogICAgLy8gJiYgdHhuLmFwcElkID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uSWQKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQXBwbGljYXRpb25JRAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbklECiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE1MS0xNTIKICAgIC8vIHR4bi50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuQXBwbGljYXRpb25DYWxsCiAgICAvLyAmJiB0eG4uYXBwSWQgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25JZAogICAgYnogdHhuUmVrZXlzQmFja19ib29sX2ZhbHNlQDkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNTMKICAgIC8vICYmIHR4bi5udW1BcHBBcmdzID09PSAxCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIE51bUFwcEFyZ3MKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE1MS0xNTMKICAgIC8vIHR4bi50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuQXBwbGljYXRpb25DYWxsCiAgICAvLyAmJiB0eG4uYXBwSWQgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25JZAogICAgLy8gJiYgdHhuLm51bUFwcEFyZ3MgPT09IDEKICAgIGJ6IHR4blJla2V5c0JhY2tfYm9vbF9mYWxzZUA5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTU0CiAgICAvLyAmJiB0eG4ub25Db21wbGV0aW9uID09PSBPbkNvbXBsZXRlQWN0aW9uLk5vT3AKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgT25Db21wbGV0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTUxLTE1NAogICAgLy8gdHhuLnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5BcHBsaWNhdGlvbkNhbGwKICAgIC8vICYmIHR4bi5hcHBJZCA9PT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbklkCiAgICAvLyAmJiB0eG4ubnVtQXBwQXJncyA9PT0gMQogICAgLy8gJiYgdHhuLm9uQ29tcGxldGlvbiA9PT0gT25Db21wbGV0ZUFjdGlvbi5Ob09wCiAgICBibnogdHhuUmVrZXlzQmFja19ib29sX2ZhbHNlQDkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNTUKICAgIC8vICYmIHR4bi5hcHBBcmdzKDApID09PSBtZXRob2RTZWxlY3RvcignYXJjNThfdmVyaWZ5QXV0aEFkZHJlc3MoKXZvaWQnKQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgZ3R4bnNhcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGVjIDIyIC8vIG1ldGhvZCAiYXJjNThfdmVyaWZ5QXV0aEFkZHJlc3MoKXZvaWQiCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE1MS0xNTUKICAgIC8vIHR4bi50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuQXBwbGljYXRpb25DYWxsCiAgICAvLyAmJiB0eG4uYXBwSWQgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25JZAogICAgLy8gJiYgdHhuLm51bUFwcEFyZ3MgPT09IDEKICAgIC8vICYmIHR4bi5vbkNvbXBsZXRpb24gPT09IE9uQ29tcGxldGVBY3Rpb24uTm9PcAogICAgLy8gJiYgdHhuLmFwcEFyZ3MoMCkgPT09IG1ldGhvZFNlbGVjdG9yKCdhcmM1OF92ZXJpZnlBdXRoQWRkcmVzcygpdm9pZCcpCiAgICBieiB0eG5SZWtleXNCYWNrX2Jvb2xfZmFsc2VAOQogICAgaW50Y18xIC8vIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNTAtMTU2CiAgICAvLyByZXR1cm4gKAogICAgLy8gICB0eG4udHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLkFwcGxpY2F0aW9uQ2FsbAogICAgLy8gICAmJiB0eG4uYXBwSWQgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25JZAogICAgLy8gICAmJiB0eG4ubnVtQXBwQXJncyA9PT0gMQogICAgLy8gICAmJiB0eG4ub25Db21wbGV0aW9uID09PSBPbkNvbXBsZXRlQWN0aW9uLk5vT3AKICAgIC8vICAgJiYgdHhuLmFwcEFyZ3MoMCkgPT09IG1ldGhvZFNlbGVjdG9yKCdhcmM1OF92ZXJpZnlBdXRoQWRkcmVzcygpdm9pZCcpCiAgICAvLyApCiAgICByZXRzdWIKCnR4blJla2V5c0JhY2tfYm9vbF9mYWxzZUA5OgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNTAtMTU2CiAgICAvLyByZXR1cm4gKAogICAgLy8gICB0eG4udHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLkFwcGxpY2F0aW9uQ2FsbAogICAgLy8gICAmJiB0eG4uYXBwSWQgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25JZAogICAgLy8gICAmJiB0eG4ubnVtQXBwQXJncyA9PT0gMQogICAgLy8gICAmJiB0eG4ub25Db21wbGV0aW9uID09PSBPbkNvbXBsZXRlQWN0aW9uLk5vT3AKICAgIC8vICAgJiYgdHhuLmFwcEFyZ3MoMCkgPT09IG1ldGhvZFNlbGVjdG9yKCdhcmM1OF92ZXJpZnlBdXRoQWRkcmVzcygpdm9pZCcpCiAgICAvLyApCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LnBsdWdpbkNoZWNrKGtleTogYnl0ZXMpIC0+IGJ5dGVzLCBieXRlczoKcGx1Z2luQ2hlY2s6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTczCiAgICAvLyBwcml2YXRlIHBsdWdpbkNoZWNrKGtleTogUGx1Z2luS2V5KTogUGx1Z2luVmFsaWRhdGlvbiB7CiAgICBwcm90byAxIDIKICAgIGJ5dGVjXzEgLy8gIiIKICAgIGR1cG4gMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBwbHVnaW5zID0gQm94TWFwPFBsdWdpbktleSwgUGx1Z2luSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeFBsdWdpbnMgfSk7CiAgICBieXRlYyA0IC8vICJwIgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE3NQogICAgLy8gY29uc3QgZXhpc3RzID0gdGhpcy5wbHVnaW5zKGtleSkuZXhpc3RzOwogICAgYm94X2xlbgogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE3NgogICAgLy8gaWYgKCFleGlzdHMpIHsKICAgIGJueiBwbHVnaW5DaGVja19hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNzctMTgyCiAgICAvLyByZXR1cm4gewogICAgLy8gICBleGlzdHM6IGZhbHNlLAogICAgLy8gICBleHBpcmVkOiB0cnVlLAogICAgLy8gICBvbkNvb2xkb3duOiB0cnVlLAogICAgLy8gICBoYXNNZXRob2RSZXN0cmljdGlvbnM6IGZhbHNlLAogICAgLy8gfQogICAgcHVzaGJ5dGVzIDB4NjAKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfYnVyeSAxCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKcGx1Z2luQ2hlY2tfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4NQogICAgLy8gY29uc3QgeyB1c2VSb3VuZHMsIGxhc3RWYWxpZCwgY29vbGRvd24sIGxhc3RDYWxsZWQsIG1ldGhvZHMgfSA9IHRoaXMucGx1Z2lucyhrZXkpLnZhbHVlIGFzIFJlYWRvbmx5PFBsdWdpbkluZm8+CiAgICBmcmFtZV9kaWcgMwogICAgZHVwCiAgICBwdXNoaW50IDkgLy8gOQogICAgaW50Y18zIC8vIDgKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBmcmFtZV9idXJ5IDIKICAgIGR1cAogICAgcHVzaGludCAxNyAvLyAxNwogICAgaW50Y18zIC8vIDgKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBmcmFtZV9idXJ5IDAKICAgIGR1cAogICAgcHVzaGludCAyNyAvLyAyNwogICAgaW50Y18xIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICBpbnRjXzEgLy8gMQogICAgZ2V0Yml0CiAgICBzd2FwCiAgICBwdXNoaW50IDI4IC8vIDI4CiAgICBpbnRjXzMgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4NgogICAgLy8gY29uc3QgZXBvY2hSZWYgPSB1c2VSb3VuZHMgPyBHbG9iYWwucm91bmQgOiBHbG9iYWwubGF0ZXN0VGltZXN0YW1wOwogICAgYnogcGx1Z2luQ2hlY2tfdGVybmFyeV9mYWxzZUA0CiAgICBnbG9iYWwgUm91bmQKCnBsdWdpbkNoZWNrX3Rlcm5hcnlfbWVyZ2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOTAKICAgIC8vIGV4cGlyZWQ6IGVwb2NoUmVmID4gbGFzdFZhbGlkLAogICAgZHVwCiAgICBmcmFtZV9kaWcgMgogICAgPgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE5MQogICAgLy8gb25Db29sZG93bjogKGVwb2NoUmVmIC0gbGFzdENhbGxlZCkgPCBjb29sZG93biwKICAgIHN3YXAKICAgIGZyYW1lX2RpZyAxCiAgICAtCiAgICBmcmFtZV9kaWcgMAogICAgPAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE5MgogICAgLy8gaGFzTWV0aG9kUmVzdHJpY3Rpb25zOiBtZXRob2RzLmxlbmd0aCA+IDAsCiAgICBmcmFtZV9kaWcgMwogICAgcHVzaGludCA0NCAvLyA0NAogICAgaW50Y18yIC8vIDIKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBpbnRjXzAgLy8gMAogICAgPgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4OC0xOTMKICAgIC8vIHJldHVybiB7CiAgICAvLyAgIGV4aXN0cywKICAgIC8vICAgZXhwaXJlZDogZXBvY2hSZWYgPiBsYXN0VmFsaWQsCiAgICAvLyAgIG9uQ29vbGRvd246IChlcG9jaFJlZiAtIGxhc3RDYWxsZWQpIDwgY29vbGRvd24sCiAgICAvLyAgIGhhc01ldGhvZFJlc3RyaWN0aW9uczogbWV0aG9kcy5sZW5ndGggPiAwLAogICAgLy8gfQogICAgYnl0ZWMgOSAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfZGlnIDQKICAgIHNldGJpdAogICAgaW50Y18xIC8vIDEKICAgIHVuY292ZXIgNAogICAgc2V0Yml0CiAgICBpbnRjXzIgLy8gMgogICAgdW5jb3ZlciAzCiAgICBzZXRiaXQKICAgIHB1c2hpbnQgMyAvLyAzCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9idXJ5IDEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpwbHVnaW5DaGVja190ZXJuYXJ5X2ZhbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTg2CiAgICAvLyBjb25zdCBlcG9jaFJlZiA9IHVzZVJvdW5kcyA/IEdsb2JhbC5yb3VuZCA6IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXA7CiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBiIHBsdWdpbkNoZWNrX3Rlcm5hcnlfbWVyZ2VANQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbihwbHVnaW46IHVpbnQ2NCwgZ2xvYmFsOiB1aW50NjQsIGVzY3JvdzogYnl0ZXMsIG1ldGhvZE9mZnNldHM6IGJ5dGVzLCBmdW5kc1JlcXVlc3Q6IGJ5dGVzKSAtPiBieXRlcywgYnl0ZXM6CnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1NjctNTczCiAgICAvLyBhcmM1OF9yZWtleVRvUGx1Z2luKAogICAgLy8gICBwbHVnaW46IHVpbnQ2NCwKICAgIC8vICAgZ2xvYmFsOiBib29sZWFuLAogICAgLy8gICBlc2Nyb3c6IHN0cmluZywKICAgIC8vICAgbWV0aG9kT2Zmc2V0czogdWludDY0W10sCiAgICAvLyAgIGZ1bmRzUmVxdWVzdDogRnVuZHNSZXF1ZXN0W10KICAgIC8vICk6IHZvaWQgewogICAgcHJvdG8gNSAyCiAgICBpbnRjXzAgLy8gMAogICAgZHVwbiAxMAogICAgYnl0ZWNfMSAvLyAiIgogICAgZHVwbiAxOAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU3NQogICAgLy8gY29uc3QgY2FsbGVyID0gZ2xvYmFsID8gR2xvYmFsLnplcm9BZGRyZXNzIDogVHhuLnNlbmRlcgogICAgZnJhbWVfZGlnIC00CiAgICBieiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fdGVybmFyeV9mYWxzZUAyCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl90ZXJuYXJ5X21lcmdlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTc2CiAgICAvLyBjb25zdCBrZXk6IFBsdWdpbktleSA9IHsgcGx1Z2luLCBjYWxsZXIsIGVzY3JvdyB9CiAgICBmcmFtZV9kaWcgLTUKICAgIGl0b2IKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0zCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTMKICAgIGNvbmNhdAogICAgZHVwCiAgICBmcmFtZV9idXJ5IDEKICAgIHN3YXAKICAgIGJ5dGVjIDEyIC8vIDB4MDAyYQogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgZnJhbWVfYnVyeSA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIHBsdWdpbnMgPSBCb3hNYXA8UGx1Z2luS2V5LCBQbHVnaW5JbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4UGx1Z2lucyB9KTsKICAgIGJ5dGVjIDQgLy8gInAiCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU3OAogICAgLy8gYXNzZXJ0KHRoaXMucGx1Z2lucyhrZXkpLmV4aXN0cywgRVJSX1BMVUdJTl9ET0VTX05PVF9FWElTVCkKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIHBsdWdpbiBkb2VzIG5vdCBleGlzdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI4CiAgICAvLyBjdXJyZW50UGx1Z2luID0gR2xvYmFsU3RhdGU8UGx1Z2luS2V5Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ3VycmVudFBsdWdpbiB9KQogICAgYnl0ZWMgMTkgLy8gImN1cnJlbnRfcGx1Z2luIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU3OQogICAgLy8gdGhpcy5jdXJyZW50UGx1Z2luLnZhbHVlID0gY2xvbmUoa2V5KQogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1ODEKICAgIC8vIGlmIChlc2Nyb3cgIT09ICcnKSB7CiAgICBmcmFtZV9kaWcgLTMKICAgIGJ5dGVjXzEgLy8gIiIKICAgICE9CiAgICBieiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fZWxzZV9ib2R5QDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNwogICAgLy8gZXNjcm93cyA9IEJveE1hcDxzdHJpbmcsIEVzY3Jvd0luZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhFc2Nyb3dzIH0pCiAgICBieXRlYyA1IC8vICJlIgogICAgZnJhbWVfZGlnIC0zCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1ODIKICAgIC8vIGFzc2VydCh0aGlzLmVzY3Jvd3MoZXNjcm93KS5leGlzdHMsIEVSUl9FU0NST1dfRE9FU19OT1RfRVhJU1QpCiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGVzY3JvdyBkb2VzIG5vdCBleGlzdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU4MwogICAgLy8gY29uc3QgZXNjcm93SUQgPSB0aGlzLmVzY3Jvd3MoZXNjcm93KS52YWx1ZS5pZAogICAgYm94X2dldAogICAgcG9wCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1ODUKICAgIC8vIHRoaXMuc3BlbmRpbmdBZGRyZXNzLnZhbHVlID0gc3BlbmRpbmdBcHAuYWRkcmVzcwogICAgZHVwCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjYKICAgIC8vIHNwZW5kaW5nQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNTcGVuZGluZ0FkZHJlc3MgfSkKICAgIGJ5dGVjIDExIC8vICJzcGVuZGluZ19hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU4NQogICAgLy8gdGhpcy5zcGVuZGluZ0FkZHJlc3MudmFsdWUgPSBzcGVuZGluZ0FwcC5hZGRyZXNzCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMxNgogICAgLy8gY29uc3QgZXNjcm93QWRkcmVzcyA9IEFwcGxpY2F0aW9uKGVzY3Jvd0lEKS5hZGRyZXNzOwogICAgYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwogICAgc3dhcAogICAgZnJhbWVfYnVyeSA1CiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzE4CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgZnVuZHNSZXF1ZXN0cy5sZW5ndGg7IGkgKz0gMSkgewogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgMTYKCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl93aGlsZV90b3BANTY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzE4CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgZnVuZHNSZXF1ZXN0cy5sZW5ndGg7IGkgKz0gMSkgewogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2RpZyAxNgogICAgPgogICAgYnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VAOAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMyMgogICAgLy8gYXNzZXQ6IGZ1bmRzUmVxdWVzdHNbaV0uYXNzZXQKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAxNgogICAgcHVzaGludCAxNiAvLyAxNgogICAgKgogICAgcHVzaGludCAxNiAvLyAxNgogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMjkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozMjAtMzIzCiAgICAvLyBjb25zdCBhbGxvd2FuY2VLZXk6IEFsbG93YW5jZUtleSA9IHsKICAgIC8vICAgZXNjcm93LAogICAgLy8gICBhc3NldDogZnVuZHNSZXF1ZXN0c1tpXS5hc3NldAogICAgLy8gfQogICAgaXRvYgogICAgYnl0ZWMgMTMgLy8gMHgwMDBhCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAxCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozOQogICAgLy8gYWxsb3dhbmNlcyA9IEJveE1hcDxBbGxvd2FuY2VLZXksIEFsbG93YW5jZUluZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhBbGxvd2FuY2VzIH0pIC8vIDM4XzUwMAogICAgYnl0ZWMgMTQgLy8gImEiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgZnJhbWVfYnVyeSAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzQ5CiAgICAvLyBhc3NlcnQodGhpcy5hbGxvd2FuY2VzKGtleSkuZXhpc3RzLCBFUlJfQUxMT1dBTkNFX0RPRVNfTk9UX0VYSVNUKTsKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWxsb3dhbmNlIGRvZXMgbm90IGV4aXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzUwCiAgICAvLyBjb25zdCB7IHR5cGUsIHNwZW50LCBhbW91bnQsIGxhc3QsIG1heCwgaW50ZXJ2YWwsIHN0YXJ0LCB1c2VSb3VuZHMgfSA9IHRoaXMuYWxsb3dhbmNlcyhrZXkpLnZhbHVlCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIGR1cAogICAgZXh0cmFjdCAwIDEKICAgIGZyYW1lX2J1cnkgMTAKICAgIGR1cAogICAgcHVzaGludCAxNyAvLyAxNwogICAgZXh0cmFjdF91aW50NjQKICAgIGZyYW1lX2J1cnkgMjYKICAgIGR1cAogICAgcHVzaGludCA5IC8vIDkKICAgIGV4dHJhY3RfdWludDY0CiAgICBmcmFtZV9idXJ5IDExCiAgICBkdXAKICAgIHB1c2hpbnQgMzMgLy8gMzMKICAgIGV4dHJhY3RfdWludDY0CiAgICBmcmFtZV9idXJ5IDE5CiAgICBkdXAKICAgIGludGNfMSAvLyAxCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZnJhbWVfYnVyeSAyMQogICAgZHVwCiAgICBwdXNoaW50IDI1IC8vIDI1CiAgICBleHRyYWN0X3VpbnQ2NAogICAgZnJhbWVfYnVyeSAxNwogICAgZHVwCiAgICBwdXNoaW50IDQxIC8vIDQxCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZnJhbWVfYnVyeSAyNwogICAgcHVzaGludCAzOTIgLy8gMzkyCiAgICBnZXRiaXQKICAgIGR1cAogICAgZnJhbWVfYnVyeSAyOAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM1MQogICAgLy8gY29uc3QgbmV3TGFzdCA9IHVzZVJvdW5kcyA/IEdsb2JhbC5yb3VuZCA6IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXA7CiAgICBieiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fdGVybmFyeV9mYWxzZUA1OQogICAgZ2xvYmFsIFJvdW5kCiAgICBmcmFtZV9idXJ5IDI0CgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fdGVybmFyeV9tZXJnZUA2MDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNTMKICAgIC8vIGlmICh0eXBlID09PSBTcGVuZEFsbG93YW5jZVR5cGVGbGF0KSB7CiAgICBmcmFtZV9kaWcgMTAKICAgIGJ5dGVjIDE1IC8vIDB4MDEKICAgID09CiAgICBieiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fZWxzZV9ib2R5QDYyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzU0CiAgICAvLyBjb25zdCBsZWZ0b3ZlcjogdWludDY0ID0gYW1vdW50IC0gc3BlbnQ7CiAgICBmcmFtZV9kaWcgMTEKICAgIGZyYW1lX2RpZyAyNgogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM1NQogICAgLy8gYXNzZXJ0KGxlZnRvdmVyID49IGZ1bmRSZXF1ZXN0LmFtb3VudCwgRVJSX0FMTE9XQU5DRV9FWENFRURFRCk7CiAgICBmcmFtZV9kaWcgMAogICAgaW50Y18zIC8vIDgKICAgIGV4dHJhY3RfdWludDY0CiAgICBzd2FwCiAgICBkaWcgMQogICAgPj0KICAgIGFzc2VydCAvLyBhbGxvd2FuY2UgZXhjZWVkZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNTYKICAgIC8vIHRoaXMuYWxsb3dhbmNlcyhrZXkpLnZhbHVlLnNwZW50ICs9IGZ1bmRSZXF1ZXN0LmFtb3VudAogICAgZnJhbWVfZGlnIDMKICAgIGR1cAogICAgY292ZXIgMgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIHB1c2hpbnQgMTcgLy8gMTcKICAgIGV4dHJhY3RfdWludDY0CiAgICArCiAgICBpdG9iCiAgICBwdXNoaW50IDE3IC8vIDE3CiAgICBzd2FwCiAgICBib3hfcmVwbGFjZQoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VANzE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzgxCiAgICAvLyB0aGlzLmFsbG93YW5jZXMoa2V5KS52YWx1ZS5sYXN0ID0gbmV3TGFzdAogICAgZnJhbWVfZGlnIDI0CiAgICBpdG9iCiAgICBmcmFtZV9kaWcgMwogICAgcHVzaGludCAzMyAvLyAzMwogICAgdW5jb3ZlciAyCiAgICBib3hfcmVwbGFjZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMyNwogICAgLy8gaWYgKGZ1bmRzUmVxdWVzdHNbaV0uYXNzZXQgIT09IDApIHsKICAgIGZyYW1lX2RpZyAyOQogICAgYnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2Vsc2VfYm9keUA3MwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMyOC0zMzUKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBlc2Nyb3dBZGRyZXNzLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiBmdW5kc1JlcXVlc3RzW2ldLmFtb3VudCwKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGZ1bmRzUmVxdWVzdHNbaV0uYXNzZXQKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMzMAogICAgLy8gc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29udHJvbGxlZEFkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ29udHJvbGxlZEFkZHJlc3MgfSk7CiAgICBieXRlY18wIC8vICJjb250cm9sbGVkX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzMwCiAgICAvLyBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMzMgogICAgLy8gYXNzZXRBbW91bnQ6IGZ1bmRzUmVxdWVzdHNbaV0uYW1vdW50LAogICAgZnJhbWVfZGlnIDAKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgZnJhbWVfZGlnIDI5CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIDUKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozMjgtMzM0CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogZXNjcm93QWRkcmVzcywKICAgIC8vICAgICBhc3NldEFtb3VudDogZnVuZHNSZXF1ZXN0c1tpXS5hbW91bnQsCiAgICAvLyAgICAgeGZlckFzc2V0OiBmdW5kc1JlcXVlc3RzW2ldLmFzc2V0CiAgICAvLyAgIH0pCiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzI4LTMzNQogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IGVzY3Jvd0FkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IGZ1bmRzUmVxdWVzdHNbaV0uYW1vdW50LAogICAgLy8gICAgIHhmZXJBc3NldDogZnVuZHNSZXF1ZXN0c1tpXS5hc3NldAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX3N1Ym1pdAoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VANzQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzE4CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgZnVuZHNSZXF1ZXN0cy5sZW5ndGg7IGkgKz0gMSkgewogICAgZnJhbWVfZGlnIDE2CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAxNgogICAgYiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fd2hpbGVfdG9wQDU2CgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fZWxzZV9ib2R5QDczOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMzNy0zNDMKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcjogZXNjcm93QWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IGZ1bmRzUmVxdWVzdHNbaV0uYW1vdW50CiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozMzkKICAgIC8vIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGNvbnRyb2xsZWRBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0NvbnRyb2xsZWRBZGRyZXNzIH0pOwogICAgYnl0ZWNfMCAvLyAiY29udHJvbGxlZF9hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMzOQogICAgLy8gc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNDEKICAgIC8vIGFtb3VudDogZnVuZHNSZXF1ZXN0c1tpXS5hbW91bnQKICAgIGZyYW1lX2RpZyAwCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBmcmFtZV9kaWcgNQogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgaXR4bl9maWVsZCBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozMzctMzQyCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgcmVjZWl2ZXI6IGVzY3Jvd0FkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiBmdW5kc1JlcXVlc3RzW2ldLmFtb3VudAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMzNy0zNDMKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcjogZXNjcm93QWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IGZ1bmRzUmVxdWVzdHNbaV0uYW1vdW50CiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0CiAgICBiIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pZl9lbHNlQDc0CgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fZWxzZV9ib2R5QDYyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM1NwogICAgLy8gfSBlbHNlIGlmICh0eXBlID09PSBTcGVuZEFsbG93YW5jZVR5cGVXaW5kb3cpIHsKICAgIGZyYW1lX2RpZyAxMAogICAgcHVzaGJ5dGVzIDB4MDIKICAgID09CiAgICBieiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fZWxzZV9ib2R5QDY2CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Mzg1CiAgICAvLyBpZiAodXNlUm91bmRzKSB7CiAgICBmcmFtZV9kaWcgMjgKICAgIGJ6IHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pZl9lbHNlQDc3CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Mzg2CiAgICAvLyByZXR1cm4gR2xvYmFsLnJvdW5kIC0gKChHbG9iYWwucm91bmQgLSBzdGFydCkgJSBpbnRlcnZhbCkKICAgIGdsb2JhbCBSb3VuZAogICAgZHVwCiAgICBmcmFtZV9kaWcgMjcKICAgIC0KICAgIGZyYW1lX2RpZyAxNwogICAgJQogICAgLQoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5nZXRMYXRlc3RXaW5kb3dTdGFydEA3ODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNjAKICAgIC8vIGlmIChjdXJyZW50V2luZG93U3RhcnQgPiBsYXN0KSB7CiAgICBmcmFtZV9kaWcgMTkKICAgID4KICAgIGJ6IHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9lbHNlX2JvZHlANjUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNjEKICAgIC8vIGFzc2VydChhbW91bnQgPj0gZnVuZFJlcXVlc3QuYW1vdW50LCBFUlJfQUxMT1dBTkNFX0VYQ0VFREVEKTsKICAgIGZyYW1lX2RpZyAwCiAgICBkdXAKICAgIGV4dHJhY3QgOCA4CiAgICBzd2FwCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIGZyYW1lX2RpZyAxMQogICAgPD0KICAgIGFzc2VydCAvLyBhbGxvd2FuY2UgZXhjZWVkZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNjIKICAgIC8vIHRoaXMuYWxsb3dhbmNlcyhrZXkpLnZhbHVlLnNwZW50ID0gZnVuZFJlcXVlc3QuYW1vdW50CiAgICBmcmFtZV9kaWcgMwogICAgcHVzaGludCAxNyAvLyAxNwogICAgdW5jb3ZlciAyCiAgICBib3hfcmVwbGFjZQogICAgYiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYWZ0ZXJfaWZfZWxzZUA3MQoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2Vsc2VfYm9keUA2NToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNjUKICAgIC8vIGNvbnN0IGxlZnRvdmVyOiB1aW50NjQgPSBhbW91bnQgLSBzcGVudDsKICAgIGZyYW1lX2RpZyAxMQogICAgZnJhbWVfZGlnIDI2CiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzY2CiAgICAvLyBhc3NlcnQobGVmdG92ZXIgPj0gZnVuZFJlcXVlc3QuYW1vdW50LCBFUlJfQUxMT1dBTkNFX0VYQ0VFREVEKTsKICAgIGZyYW1lX2RpZyAwCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIHN3YXAKICAgIGRpZyAxCiAgICA+PQogICAgYXNzZXJ0IC8vIGFsbG93YW5jZSBleGNlZWRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM2NwogICAgLy8gdGhpcy5hbGxvd2FuY2VzKGtleSkudmFsdWUuc3BlbnQgKz0gZnVuZFJlcXVlc3QuYW1vdW50CiAgICBmcmFtZV9kaWcgMwogICAgZHVwCiAgICBjb3ZlciAyCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgcHVzaGludCAxNyAvLyAxNwogICAgZXh0cmFjdF91aW50NjQKICAgICsKICAgIGl0b2IKICAgIHB1c2hpbnQgMTcgLy8gMTcKICAgIHN3YXAKICAgIGJveF9yZXBsYWNlCiAgICBiIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pZl9lbHNlQDcxCgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYWZ0ZXJfaWZfZWxzZUA3NzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozODgKICAgIC8vIHJldHVybiBHbG9iYWwubGF0ZXN0VGltZXN0YW1wIC0gKChHbG9iYWwubGF0ZXN0VGltZXN0YW1wIC0gc3RhcnQpICUgaW50ZXJ2YWwpCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBkdXAKICAgIGZyYW1lX2RpZyAyNwogICAgLQogICAgZnJhbWVfZGlnIDE3CiAgICAlCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzU4CiAgICAvLyBjb25zdCBjdXJyZW50V2luZG93U3RhcnQgPSB0aGlzLmdldExhdGVzdFdpbmRvd1N0YXJ0KHVzZVJvdW5kcywgc3RhcnQsIGludGVydmFsKQogICAgYiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmdldExhdGVzdFdpbmRvd1N0YXJ0QDc4CgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fZWxzZV9ib2R5QDY2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM2OQogICAgLy8gfSBlbHNlIGlmICh0eXBlID09PSBTcGVuZEFsbG93YW5jZVR5cGVEcmlwKSB7CiAgICBmcmFtZV9kaWcgMTAKICAgIHB1c2hieXRlcyAweDAzCiAgICA9PQogICAgYnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VANzEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNzAKICAgIC8vIGNvbnN0IGVwb2NoUmVmID0gdXNlUm91bmRzID8gR2xvYmFsLnJvdW5kIDogR2xvYmFsLmxhdGVzdFRpbWVzdGFtcDsKICAgIGZyYW1lX2RpZyAyOAogICAgYnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX3Rlcm5hcnlfZmFsc2VANjkKICAgIGdsb2JhbCBSb3VuZAogICAgZnJhbWVfYnVyeSAxNAoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX3Rlcm5hcnlfbWVyZ2VANzA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzcxCiAgICAvLyBjb25zdCBwYXNzZWQ6IHVpbnQ2NCA9IGVwb2NoUmVmIC0gbGFzdAogICAgZnJhbWVfZGlnIDE0CiAgICBmcmFtZV9kaWcgMTkKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNzUKICAgIC8vIGNvbnN0IGFjY3J1ZWQ6IHVpbnQ2NCA9IHNwZW50ICsgKChwYXNzZWQgLyBpbnRlcnZhbCkgKiBhbW91bnQpCiAgICBmcmFtZV9kaWcgMTcKICAgIC8KICAgIGZyYW1lX2RpZyAxMQogICAgKgogICAgZnJhbWVfZGlnIDI2CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Mzc2CiAgICAvLyBjb25zdCBhdmFpbGFibGU6IHVpbnQ2NCA9IGFjY3J1ZWQgPiBtYXggPyBtYXggOiBhY2NydWVkCiAgICBkdXAKICAgIGZyYW1lX2RpZyAyMQogICAgZHVwCiAgICBjb3ZlciAzCiAgICA+CiAgICBzd2FwCiAgICBjb3ZlciAyCiAgICBzZWxlY3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNzgKICAgIC8vIGFzc2VydChhdmFpbGFibGUgPj0gZnVuZFJlcXVlc3QuYW1vdW50LCBFUlJfQUxMT1dBTkNFX0VYQ0VFREVEKTsKICAgIGZyYW1lX2RpZyAwCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIGR1cDIKICAgID49CiAgICBhc3NlcnQgLy8gYWxsb3dhbmNlIGV4Y2VlZGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Mzc5CiAgICAvLyB0aGlzLmFsbG93YW5jZXMoa2V5KS52YWx1ZS5zcGVudCA9IChhdmFpbGFibGUgLSBmdW5kUmVxdWVzdC5hbW91bnQpCiAgICAtCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgMwogICAgcHVzaGludCAxNyAvLyAxNwogICAgdW5jb3ZlciAyCiAgICBib3hfcmVwbGFjZQogICAgYiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYWZ0ZXJfaWZfZWxzZUA3MQoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX3Rlcm5hcnlfZmFsc2VANjk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzcwCiAgICAvLyBjb25zdCBlcG9jaFJlZiA9IHVzZVJvdW5kcyA/IEdsb2JhbC5yb3VuZCA6IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXA7CiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBmcmFtZV9idXJ5IDE0CiAgICBiIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl90ZXJuYXJ5X21lcmdlQDcwCgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fdGVybmFyeV9mYWxzZUA1OToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNTEKICAgIC8vIGNvbnN0IG5ld0xhc3QgPSB1c2VSb3VuZHMgPyBHbG9iYWwucm91bmQgOiBHbG9iYWwubGF0ZXN0VGltZXN0YW1wOwogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgZnJhbWVfYnVyeSAyNAogICAgYiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fdGVybmFyeV9tZXJnZUA2MAoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMDQKICAgIC8vIGNvbnN0IHsgdXNlUm91bmRzLCB1c2VFeGVjdXRpb25LZXkgfSA9IHRoaXMucGx1Z2lucyhrZXkpLnZhbHVlCiAgICBmcmFtZV9kaWcgMgogICAgcHVzaGludCAyNyAvLyAyNwogICAgaW50Y18xIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICBkdXAKICAgIGludGNfMSAvLyAxCiAgICBnZXRiaXQKICAgIGZyYW1lX2J1cnkgMjgKICAgIGludGNfMiAvLyAyCiAgICBnZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMDYKICAgIC8vIGlmICh1c2VFeGVjdXRpb25LZXkgJiYgIShUeG4uc2VuZGVyID09PSB0aGlzLmFkbWluLnZhbHVlKSkgewogICAgYnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VAMjIKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIGFkbWluID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0FkbWluIH0pCiAgICBieXRlY18yIC8vICJhZG1pbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMDYKICAgIC8vIGlmICh1c2VFeGVjdXRpb25LZXkgJiYgIShUeG4uc2VuZGVyID09PSB0aGlzLmFkbWluLnZhbHVlKSkgewogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBibnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VAMjIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0MQogICAgLy8gZXhlY3V0aW9ucyA9IEJveE1hcDxieXRlczwzMj4sIEV4ZWN1dGlvbkluZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhFeGVjdXRpb25zIH0pCiAgICBieXRlYyA4IC8vICJ4IgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIwNwogICAgLy8gYXNzZXJ0KHRoaXMuZXhlY3V0aW9ucyhUeG4ubGVhc2UpLmV4aXN0cywgRVJSX0VYRUNVVElPTl9LRVlfTk9UX0ZPVU5EKTsKICAgIHR4biBMZWFzZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBleGVjdXRpb25zID0gQm94TWFwPGJ5dGVzPDMyPiwgRXhlY3V0aW9uSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeEV4ZWN1dGlvbnMgfSkKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIwNwogICAgLy8gYXNzZXJ0KHRoaXMuZXhlY3V0aW9ucyhUeG4ubGVhc2UpLmV4aXN0cywgRVJSX0VYRUNVVElPTl9LRVlfTk9UX0ZPVU5EKTsKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEV4ZWN1dGlvbiBrZXkgbm90IGZvdW5kCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIGV4ZWN1dGlvbnMgPSBCb3hNYXA8Ynl0ZXM8MzI+LCBFeGVjdXRpb25JbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4RXhlY3V0aW9ucyB9KQogICAgYnl0ZWMgOCAvLyAieCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMDgKICAgIC8vIGFzc2VydCh0aGlzLmV4ZWN1dGlvbnMoVHhuLmxlYXNlKS52YWx1ZS5maXJzdFZhbGlkIDw9IEdsb2JhbC5yb3VuZCwgRVJSX0VYRUNVVElPTl9OT1RfUkVBRFkpOwogICAgdHhuIExlYXNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIGV4ZWN1dGlvbnMgPSBCb3hNYXA8Ynl0ZXM8MzI+LCBFeGVjdXRpb25JbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4RXhlY3V0aW9ucyB9KQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjA4CiAgICAvLyBhc3NlcnQodGhpcy5leGVjdXRpb25zKFR4bi5sZWFzZSkudmFsdWUuZmlyc3RWYWxpZCA8PSBHbG9iYWwucm91bmQsIEVSUl9FWEVDVVRJT05fTk9UX1JFQURZKTsKICAgIGludGNfMiAvLyAyCiAgICBpbnRjXzMgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGdsb2JhbCBSb3VuZAogICAgPD0KICAgIGFzc2VydCAvLyBFeGVjdXRpb24ga2V5IG5vdCByZWFkeQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBleGVjdXRpb25zID0gQm94TWFwPGJ5dGVzPDMyPiwgRXhlY3V0aW9uSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeEV4ZWN1dGlvbnMgfSkKICAgIGJ5dGVjIDggLy8gIngiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjA5CiAgICAvLyBhc3NlcnQodGhpcy5leGVjdXRpb25zKFR4bi5sZWFzZSkudmFsdWUubGFzdFZhbGlkID49IEdsb2JhbC5yb3VuZCwgRVJSX0VYRUNVVElPTl9FWFBJUkVEKTsKICAgIHR4biBMZWFzZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBleGVjdXRpb25zID0gQm94TWFwPGJ5dGVzPDMyPiwgRXhlY3V0aW9uSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeEV4ZWN1dGlvbnMgfSkKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIwOQogICAgLy8gYXNzZXJ0KHRoaXMuZXhlY3V0aW9ucyhUeG4ubGVhc2UpLnZhbHVlLmxhc3RWYWxpZCA+PSBHbG9iYWwucm91bmQsIEVSUl9FWEVDVVRJT05fRVhQSVJFRCk7CiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICBpbnRjXzMgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGdsb2JhbCBSb3VuZAogICAgPj0KICAgIGFzc2VydCAvLyBFeGVjdXRpb24ga2V5IGV4cGlyZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0MQogICAgLy8gZXhlY3V0aW9ucyA9IEJveE1hcDxieXRlczwzMj4sIEV4ZWN1dGlvbkluZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhFeGVjdXRpb25zIH0pCiAgICBieXRlYyA4IC8vICJ4IgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIxMQogICAgLy8gY29uc3QgZ3JvdXBzID0gdGhpcy5leGVjdXRpb25zKFR4bi5sZWFzZSkudmFsdWUuZ3JvdXBzIGFzIFJlYWRvbmx5PGJ5dGVzPDMyPltdPjsKICAgIHR4biBMZWFzZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBleGVjdXRpb25zID0gQm94TWFwPGJ5dGVzPDMyPiwgRXhlY3V0aW9uSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeEV4ZWN1dGlvbnMgfSkKICAgIGNvbmNhdAogICAgZnJhbWVfYnVyeSA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjEzCiAgICAvLyBsZXQgZm91bmRHcm91cCA9IGZhbHNlOwogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgMTUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMTQKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBncm91cHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDE2CgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fd2hpbGVfdG9wQDE3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIxNAogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGdyb3Vwcy5sZW5ndGg7IGkgKz0gMSkgewogICAgZnJhbWVfZGlnIDQKICAgIHB1c2hpbnQgMTggLy8gMTgKICAgIGludGNfMiAvLyAyCiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgZnJhbWVfZGlnIDE2CiAgICA+CiAgICBieiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYWZ0ZXJfd2hpbGVAMjEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMTUKICAgIC8vIGlmIChncm91cHNbaV0gPT09IEdsb2JhbC5ncm91cElkKSB7CiAgICBmcmFtZV9kaWcgMTYKICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgICoKICAgIHB1c2hpbnQgMjAgLy8gMjAKICAgICsKICAgIGZyYW1lX2RpZyA0CiAgICBzd2FwCiAgICBwdXNoaW50IDMyIC8vIDMyCiAgICBib3hfZXh0cmFjdAogICAgZ2xvYmFsIEdyb3VwSUQKICAgID09CiAgICBieiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYWZ0ZXJfaWZfZWxzZUAyMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIxNgogICAgLy8gZm91bmRHcm91cCA9IHRydWU7CiAgICBpbnRjXzEgLy8gMQogICAgZnJhbWVfYnVyeSAxNQoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VAMjA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjE0CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSArPSAxKSB7CiAgICBmcmFtZV9kaWcgMTYKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDE2CiAgICBiIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl93aGlsZV90b3BAMTcKCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl93aGlsZUAyMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMjAKICAgIC8vIGFzc2VydChmb3VuZEdyb3VwLCBFUlJfR1JPVVBfTk9UX0ZPVU5EKTsKICAgIGZyYW1lX2RpZyAxNQogICAgYXNzZXJ0IC8vIEdyb3VwIG5vdCBmb3VuZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBleGVjdXRpb25zID0gQm94TWFwPGJ5dGVzPDMyPiwgRXhlY3V0aW9uSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeEV4ZWN1dGlvbnMgfSkKICAgIGJ5dGVjIDggLy8gIngiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjIxCiAgICAvLyB0aGlzLmV4ZWN1dGlvbnMoVHhuLmxlYXNlKS5kZWxldGUoKTsKICAgIHR4biBMZWFzZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBleGVjdXRpb25zID0gQm94TWFwPGJ5dGVzPDMyPiwgRXhlY3V0aW9uSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeEV4ZWN1dGlvbnMgfSkKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIyMQogICAgLy8gdGhpcy5leGVjdXRpb25zKFR4bi5sZWFzZSkuZGVsZXRlKCk7CiAgICBib3hfZGVsCiAgICBwb3AKCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pZl9lbHNlQDIyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIyNAogICAgLy8gY29uc3QgaW5pdGlhbENoZWNrID0gdGhpcy5wbHVnaW5DaGVjayhrZXkpOwogICAgZnJhbWVfZGlnIDYKICAgIGNhbGxzdWIgcGx1Z2luQ2hlY2sKICAgIGZyYW1lX2J1cnkgNgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIyNgogICAgLy8gYXNzZXJ0KGluaXRpYWxDaGVjay5leGlzdHMsIEVSUl9QTFVHSU5fRE9FU19OT1RfRVhJU1QpOwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBhc3NlcnQgLy8gcGx1Z2luIGRvZXMgbm90IGV4aXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjI3CiAgICAvLyBhc3NlcnQoIWluaXRpYWxDaGVjay5leHBpcmVkLCBFUlJfUExVR0lOX0VYUElSRUQpOwogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgZ2V0Yml0CiAgICAhCiAgICBhc3NlcnQgLy8gcGx1Z2luIGV4cGlyZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMjgKICAgIC8vIGFzc2VydCghaW5pdGlhbENoZWNrLm9uQ29vbGRvd24sIEVSUl9QTFVHSU5fT05fQ09PTERPV04pOwogICAgaW50Y18yIC8vIDIKICAgIGdldGJpdAogICAgIQogICAgYXNzZXJ0IC8vIHBsdWdpbiBvbiBjb29sZG93bgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIzMC0yMzIKICAgIC8vIGNvbnN0IGVwb2NoUmVmID0gdXNlUm91bmRzCiAgICAvLyAgID8gR2xvYmFsLnJvdW5kCiAgICAvLyAgIDogR2xvYmFsLmxhdGVzdFRpbWVzdGFtcDsKICAgIGZyYW1lX2RpZyAyOAogICAgYnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX3Rlcm5hcnlfZmFsc2VAMjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMzEKICAgIC8vID8gR2xvYmFsLnJvdW5kCiAgICBnbG9iYWwgUm91bmQKICAgIGZyYW1lX2J1cnkgMTQKCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl90ZXJuYXJ5X21lcmdlQDI1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIzNAogICAgLy8gbGV0IHJla2V5c0JhY2sgPSBmYWxzZTsKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDI1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjM1CiAgICAvLyBsZXQgbWV0aG9kSW5kZXg6IHVpbnQ2NCA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSAyMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIzNwogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gKFR4bi5ncm91cEluZGV4ICsgMSk7IGkgPCBHbG9iYWwuZ3JvdXBTaXplOyBpICs9IDEpIHsKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAxOAogICAgZnJhbWVfZGlnIDYKICAgIGZyYW1lX2J1cnkgNwoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX3doaWxlX3RvcEAyNjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMzcKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IChUeG4uZ3JvdXBJbmRleCArIDEpOyBpIDwgR2xvYmFsLmdyb3VwU2l6ZTsgaSArPSAxKSB7CiAgICBmcmFtZV9kaWcgMTgKICAgIGdsb2JhbCBHcm91cFNpemUKICAgIDwKICAgIGJ6IHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9ibG9ja0A1MwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI0MAogICAgLy8gaWYgKHRoaXMudHhuUmVrZXlzQmFjayh0eG4pKSB7CiAgICBmcmFtZV9kaWcgMTgKICAgIGNhbGxzdWIgdHhuUmVrZXlzQmFjawogICAgYnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VAMjkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNDEKICAgIC8vIHJla2V5c0JhY2sgPSB0cnVlOwogICAgaW50Y18xIC8vIDEKICAgIGZyYW1lX2J1cnkgMjUKCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9ibG9ja0A1MzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNzEKICAgIC8vIGFzc2VydChyZWtleXNCYWNrLCBFUlJfTUlTU0lOR19SRUtFWV9CQUNLKTsKICAgIGZyYW1lX2RpZyAyNQogICAgYXNzZXJ0IC8vIG1pc3NpbmcgcmVrZXkgYmFjawogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU5My02MDAKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlcjogdGhpcy5zcGVuZGluZ0FkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgcmVjZWl2ZXI6IHRoaXMuc3BlbmRpbmdBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIHJla2V5VG86IHBsdWdpbkFwcC5hZGRyZXNzLAogICAgLy8gICAgIG5vdGU6ICdyZWtleWluZyB0byBwbHVnaW4gYXBwJwogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTk1CiAgICAvLyBzZW5kZXI6IHRoaXMuc3BlbmRpbmdBZGRyZXNzLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNgogICAgLy8gc3BlbmRpbmdBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c1NwZW5kaW5nQWRkcmVzcyB9KQogICAgYnl0ZWMgMTEgLy8gInNwZW5kaW5nX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTk1CiAgICAvLyBzZW5kZXI6IHRoaXMuc3BlbmRpbmdBZGRyZXNzLnZhbHVlLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1OTcKICAgIC8vIHJla2V5VG86IHBsdWdpbkFwcC5hZGRyZXNzLAogICAgZnJhbWVfZGlnIC01CiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTk4CiAgICAvLyBub3RlOiAncmVrZXlpbmcgdG8gcGx1Z2luIGFwcCcKICAgIHB1c2hieXRlcyAicmVrZXlpbmcgdG8gcGx1Z2luIGFwcCIKICAgIGl0eG5fZmllbGQgTm90ZQogICAgaXR4bl9maWVsZCBSZWtleVRvCiAgICBkdXAKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTkzLTU5OQogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyOiB0aGlzLnNwZW5kaW5nQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcjogdGhpcy5zcGVuZGluZ0FkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgcmVrZXlUbzogcGx1Z2luQXBwLmFkZHJlc3MsCiAgICAvLyAgICAgbm90ZTogJ3Jla2V5aW5nIHRvIHBsdWdpbiBhcHAnCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTkzLTYwMAogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyOiB0aGlzLnNwZW5kaW5nQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcjogdGhpcy5zcGVuZGluZ0FkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgcmVrZXlUbzogcGx1Z2luQXBwLmFkZHJlc3MsCiAgICAvLyAgICAgbm90ZTogJ3Jla2V5aW5nIHRvIHBsdWdpbiBhcHAnCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzAKICAgIC8vIHJla2V5SW5kZXggPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwLCBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c1Jla2V5SW5kZXggfSkKICAgIGJ5dGVjIDE3IC8vICJyZWtleV9pbmRleCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2MDMKICAgIC8vIHRoaXMucmVrZXlJbmRleC52YWx1ZSA9IFR4bi5ncm91cEluZGV4CiAgICB0eG4gR3JvdXBJbmRleAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozMwogICAgLy8gcGx1Z2lucyA9IEJveE1hcDxQbHVnaW5LZXksIFBsdWdpbkluZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhQbHVnaW5zIH0pOwogICAgYnl0ZWMgNCAvLyAicCIKICAgIGZyYW1lX2RpZyA3CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2MDUKICAgIC8vIGlmICh0aGlzLnBsdWdpbnMoa2V5KS52YWx1ZS5kZWxlZ2F0aW9uVHlwZSA9PT0gRGVsZWdhdGlvblR5cGVTZWxmKSB7CiAgICBpbnRjXzMgLy8gOAogICAgaW50Y18xIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICBieXRlYyAxNSAvLyAweDAxCiAgICA9PQogICAgYnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VAMTMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gbGFzdFVzZXJJbnRlcmFjdGlvbiA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0xhc3RVc2VySW50ZXJhY3Rpb24gfSkKICAgIGJ5dGVjXzMgLy8gImxhc3RfdXNlcl9pbnRlcmFjdGlvbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NAogICAgLy8gdGhpcy5sYXN0VXNlckludGVyYWN0aW9uLnZhbHVlID0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgYXBwX2dsb2JhbF9wdXQKCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pZl9lbHNlQDEzOgogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2J1cnkgMQogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pZl9lbHNlQDI5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI0NQogICAgLy8gaWYgKHR4bi50eXBlICE9PSBUcmFuc2FjdGlvblR5cGUuQXBwbGljYXRpb25DYWxsKSB7CiAgICBmcmFtZV9kaWcgMTgKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBwdXNoaW50IDYgLy8gNgogICAgIT0KICAgIGJ6IHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pZl9lbHNlQDMxCiAgICBmcmFtZV9kaWcgNwoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2Jsb2NrQDUxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIzNwogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gKFR4bi5ncm91cEluZGV4ICsgMSk7IGkgPCBHbG9iYWwuZ3JvdXBTaXplOyBpICs9IDEpIHsKICAgIGZyYW1lX2RpZyAxOAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMTgKICAgIGZyYW1lX2J1cnkgNwogICAgYiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fd2hpbGVfdG9wQDI2CgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYWZ0ZXJfaWZfZWxzZUAzMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNDkKICAgIC8vIGFzc2VydCh0eG4uYXBwSWQuaWQgPT09IGtleS5wbHVnaW4sIEVSUl9DQU5OT1RfQ0FMTF9PVEhFUl9BUFBTX0RVUklOR19SRUtFWSk7CiAgICBmcmFtZV9kaWcgMTgKICAgIGR1cAogICAgZ3R4bnMgQXBwbGljYXRpb25JRAogICAgZnJhbWVfZGlnIDYKICAgIGR1cAogICAgY292ZXIgMwogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbm5vdCBjYWxsIG90aGVyIGFwcHMgZHVyaW5nIHJla2V5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjUwCiAgICAvLyBhc3NlcnQodHhuLm9uQ29tcGxldGlvbiA9PT0gT25Db21wbGV0ZUFjdGlvbi5Ob09wLCBFUlJfSU5WQUxJRF9PTkNPTVBMRVRFKTsKICAgIGR1cAogICAgZ3R4bnMgT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gaW52YWxpZCBvbmNvbXBsZXRlIG11c3QgYmUgbm8gb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNTMKICAgIC8vIGFzc2VydCh0eG4ubnVtQXBwQXJncyA+IDEsIEVSUl9JTlZBTElEX1NFTkRFUl9BUkcpOwogICAgZHVwCiAgICBndHhucyBOdW1BcHBBcmdzCiAgICBpbnRjXzEgLy8gMQogICAgPgogICAgYXNzZXJ0IC8vIGludmFsaWQgc2VuZGVyIG11c3QgYmUgdGhpcyBhcHAgaWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNTQKICAgIC8vIGFzc2VydChBcHBsaWNhdGlvbihidG9pKHR4bi5hcHBBcmdzKDEpKSkgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25JZCwgRVJSX0lOVkFMSURfU0VOREVSX1ZBTFVFKTsKICAgIGludGNfMSAvLyAxCiAgICBndHhuc2FzIEFwcGxpY2F0aW9uQXJncwogICAgYnRvaQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbklECiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgc2VuZGVyIGFwcCBpZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI1NgogICAgLy8gY29uc3QgeyBleHBpcmVkLCBvbkNvb2xkb3duLCBoYXNNZXRob2RSZXN0cmljdGlvbnMgfSA9IHRoaXMucGx1Z2luQ2hlY2soa2V5KTsKICAgIGNhbGxzdWIgcGx1Z2luQ2hlY2sKICAgIGZyYW1lX2J1cnkgNgogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgZ2V0Yml0CiAgICBkaWcgMQogICAgaW50Y18yIC8vIDIKICAgIGdldGJpdAogICAgdW5jb3ZlciAyCiAgICBwdXNoaW50IDMgLy8gMwogICAgZ2V0Yml0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjU4CiAgICAvLyBhc3NlcnQoIWV4cGlyZWQsIEVSUl9QTFVHSU5fRVhQSVJFRCk7CiAgICB1bmNvdmVyIDIKICAgICEKICAgIGFzc2VydCAvLyBwbHVnaW4gZXhwaXJlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI1OQogICAgLy8gYXNzZXJ0KCFvbkNvb2xkb3duLCBFUlJfUExVR0lOX09OX0NPT0xET1dOKTsKICAgIHN3YXAKICAgICEKICAgIGFzc2VydCAvLyBwbHVnaW4gb24gY29vbGRvd24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNjEKICAgIC8vIGlmIChoYXNNZXRob2RSZXN0cmljdGlvbnMpIHsKICAgIGJ6IHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pZl9lbHNlQDUwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjYyCiAgICAvLyBhc3NlcnQobWV0aG9kSW5kZXggPCBtZXRob2RPZmZzZXRzLmxlbmd0aCwgRVJSX01BTEZPUk1FRF9PRkZTRVRTKTsKICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBmcmFtZV9kaWcgMjIKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICA8CiAgICBhc3NlcnQgLy8gbWFsZm9ybWVkIG1ldGhvZCBvZmZzZXRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjYzCiAgICAvLyBjb25zdCB7IG1ldGhvZEFsbG93ZWQsIG1ldGhvZE9uQ29vbGRvd24gfSA9IHRoaXMubWV0aG9kQ2hlY2soa2V5LCB0eG4sIG1ldGhvZE9mZnNldHNbbWV0aG9kSW5kZXhdKTsKICAgIGZyYW1lX2RpZyAtMgogICAgZXh0cmFjdCAyIDAKICAgIHN3YXAKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI4NAogICAgLy8gYXNzZXJ0KGxlbih0eG4uYXBwQXJncygwKSkgPT09IDQsIEVSUl9JTlZBTElEX01FVEhPRF9TSUdOQVRVUkVfTEVOR1RIKQogICAgZnJhbWVfZGlnIDE4CiAgICBpbnRjXzAgLy8gMAogICAgZ3R4bnNhcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGR1cAogICAgZnJhbWVfYnVyeSA5CiAgICBsZW4KICAgIHB1c2hpbnQgNCAvLyA0CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbWV0aG9kIHNpZ25hdHVyZSBsZW5ndGgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozMwogICAgLy8gcGx1Z2lucyA9IEJveE1hcDxQbHVnaW5LZXksIFBsdWdpbkluZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhQbHVnaW5zIH0pOwogICAgYnl0ZWMgNCAvLyAicCIKICAgIGZyYW1lX2RpZyA2CiAgICBjb25jYXQKICAgIGR1cAogICAgZnJhbWVfYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Mjg3CiAgICAvLyBjb25zdCB7IHVzZVJvdW5kcyB9ID0gdGhpcy5wbHVnaW5zKGtleSkudmFsdWUKICAgIGR1cAogICAgcHVzaGludCAyNyAvLyAyNwogICAgaW50Y18xIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICBpbnRjXzEgLy8gMQogICAgZ2V0Yml0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGZyYW1lX2J1cnkgMjgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyODgKICAgIC8vIGNvbnN0IHsgc2VsZWN0b3IsIGNvb2xkb3duLCBsYXN0Q2FsbGVkIH0gPSB0aGlzLnBsdWdpbnMoa2V5KS52YWx1ZS5tZXRob2RzW29mZnNldF0KICAgIHVuY292ZXIgMgogICAgcHVzaGludCAyMCAvLyAyMAogICAgKgogICAgZHVwCiAgICBmcmFtZV9idXJ5IDEyCiAgICBwdXNoaW50IDQ2IC8vIDQ2CiAgICArCiAgICBwdXNoaW50IDIwIC8vIDIwCiAgICBib3hfZXh0cmFjdAogICAgZHVwCiAgICBleHRyYWN0IDAgNAogICAgZnJhbWVfYnVyeSA4CiAgICBkdXAKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBleHRyYWN0X3VpbnQ2NAogICAgZnJhbWVfYnVyeSAxMwogICAgcHVzaGludCAxMiAvLyAxMgogICAgZXh0cmFjdF91aW50NjQKICAgIGZyYW1lX2J1cnkgMjAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyOTIKICAgIC8vIGNvbnN0IGVwb2NoUmVmID0gdXNlUm91bmRzID8gR2xvYmFsLnJvdW5kIDogR2xvYmFsLmxhdGVzdFRpbWVzdGFtcAogICAgYnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX3Rlcm5hcnlfZmFsc2VAMzQKICAgIGdsb2JhbCBSb3VuZAoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX3Rlcm5hcnlfbWVyZ2VAMzU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjkzCiAgICAvLyBjb25zdCBtZXRob2RPbkNvb2xkb3duID0gKGVwb2NoUmVmIC0gbGFzdENhbGxlZCkgPCBjb29sZG93bgogICAgZnJhbWVfZGlnIDIwCiAgICAtCiAgICBmcmFtZV9kaWcgMTMKICAgIDwKICAgIGZyYW1lX2J1cnkgMjMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyOTUKICAgIC8vIGlmIChzZWxlY3RvciA9PT0gc2VsZWN0b3JBcmcgJiYgKCFoYXNDb29sZG93biB8fCAhbWV0aG9kT25Db29sZG93bikpIHsKICAgIGZyYW1lX2RpZyA4CiAgICBmcmFtZV9kaWcgOQogICAgPT0KICAgIGJ6IHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pZl9lbHNlQDQ0CiAgICBmcmFtZV9kaWcgMTMKICAgIGJ6IHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9pZl9ib2R5QDM4CiAgICBmcmFtZV9kaWcgMjMKICAgIGJueiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYWZ0ZXJfaWZfZWxzZUA0NAoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2lmX2JvZHlAMzg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Mjk3CiAgICAvLyBpZiAoaGFzQ29vbGRvd24pIHsKICAgIGZyYW1lX2RpZyAxMwogICAgYnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VANDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyOTgKICAgIC8vIGNvbnN0IGxhc3RDYWxsZWQgPSB1c2VSb3VuZHMgPyBHbG9iYWwucm91bmQgOiBHbG9iYWwubGF0ZXN0VGltZXN0YW1wOwogICAgZnJhbWVfZGlnIDI4CiAgICBieiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fdGVybmFyeV9mYWxzZUA0MQogICAgZ2xvYmFsIFJvdW5kCgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fdGVybmFyeV9tZXJnZUA0MjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyOTkKICAgIC8vIHRoaXMucGx1Z2lucyhrZXkpLnZhbHVlLm1ldGhvZHNbb2Zmc2V0XS5sYXN0Q2FsbGVkID0gbGFzdENhbGxlZAogICAgaXRvYgogICAgZnJhbWVfZGlnIDEyCiAgICBwdXNoaW50IDU4IC8vIDU4CiAgICArCiAgICBmcmFtZV9kaWcgMgogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBib3hfcmVwbGFjZQoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VANDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzAyLTMwNQogICAgLy8gcmV0dXJuIHsKICAgIC8vICAgbWV0aG9kQWxsb3dlZDogdHJ1ZSwKICAgIC8vICAgbWV0aG9kT25Db29sZG93bgogICAgLy8gfQogICAgcHVzaGJ5dGVzIDB4ODAKICAgIGludGNfMSAvLyAxCiAgICBmcmFtZV9kaWcgMjMKICAgIHNldGJpdAoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5tZXRob2RDaGVja0A0NToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNjMKICAgIC8vIGNvbnN0IHsgbWV0aG9kQWxsb3dlZCwgbWV0aG9kT25Db29sZG93biB9ID0gdGhpcy5tZXRob2RDaGVjayhrZXksIHR4biwgbWV0aG9kT2Zmc2V0c1ttZXRob2RJbmRleF0pOwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBzd2FwCiAgICBpbnRjXzEgLy8gMQogICAgZ2V0Yml0CiAgICBmcmFtZV9idXJ5IDIzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjY0CiAgICAvLyBhc3NlcnQobWV0aG9kQWxsb3dlZCAmJiAhbWV0aG9kT25Db29sZG93biwgRVJSX01FVEhPRF9PTl9DT09MRE9XTik7CiAgICBieiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYm9vbF9mYWxzZUA0OAogICAgZnJhbWVfZGlnIDIzCiAgICBibnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2Jvb2xfZmFsc2VANDgKICAgIGludGNfMSAvLyAxCgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYm9vbF9tZXJnZUA0OToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNjQKICAgIC8vIGFzc2VydChtZXRob2RBbGxvd2VkICYmICFtZXRob2RPbkNvb2xkb3duLCBFUlJfTUVUSE9EX09OX0NPT0xET1dOKTsKICAgIGFzc2VydCAvLyBtZXRob2Qgb24gY29vbGRvd24KCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pZl9lbHNlQDUwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBwbHVnaW5zID0gQm94TWFwPFBsdWdpbktleSwgUGx1Z2luSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeFBsdWdpbnMgfSk7CiAgICBieXRlYyA0IC8vICJwIgogICAgZnJhbWVfZGlnIDYKICAgIGR1cAogICAgY292ZXIgMgogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjY3CiAgICAvLyB0aGlzLnBsdWdpbnMoa2V5KS52YWx1ZS5sYXN0Q2FsbGVkID0gZXBvY2hSZWYKICAgIGZyYW1lX2RpZyAxNAogICAgaXRvYgogICAgcHVzaGludCAyOCAvLyAyOAogICAgc3dhcAogICAgYm94X3JlcGxhY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNjgKICAgIC8vIG1ldGhvZEluZGV4ICs9IDE7CiAgICBmcmFtZV9kaWcgMjIKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDIyCiAgICBiIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9ibG9ja0A1MQoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2Jvb2xfZmFsc2VANDg6CiAgICBpbnRjXzAgLy8gMAogICAgYiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYm9vbF9tZXJnZUA0OQoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX3Rlcm5hcnlfZmFsc2VANDE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Mjk4CiAgICAvLyBjb25zdCBsYXN0Q2FsbGVkID0gdXNlUm91bmRzID8gR2xvYmFsLnJvdW5kIDogR2xvYmFsLmxhdGVzdFRpbWVzdGFtcDsKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGIgc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX3Rlcm5hcnlfbWVyZ2VANDIKCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pZl9lbHNlQDQ0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMwOC0zMTEKICAgIC8vIHJldHVybiB7CiAgICAvLyAgIG1ldGhvZEFsbG93ZWQ6IGZhbHNlLAogICAgLy8gICBtZXRob2RPbkNvb2xkb3duOiB0cnVlCiAgICAvLyB9CiAgICBwdXNoYnl0ZXMgMHg0MAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI2MwogICAgLy8gY29uc3QgeyBtZXRob2RBbGxvd2VkLCBtZXRob2RPbkNvb2xkb3duIH0gPSB0aGlzLm1ldGhvZENoZWNrKGtleSwgdHhuLCBtZXRob2RPZmZzZXRzW21ldGhvZEluZGV4XSk7CiAgICBiIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQubWV0aG9kQ2hlY2tANDUKCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl90ZXJuYXJ5X2ZhbHNlQDM0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI5MgogICAgLy8gY29uc3QgZXBvY2hSZWYgPSB1c2VSb3VuZHMgPyBHbG9iYWwucm91bmQgOiBHbG9iYWwubGF0ZXN0VGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBiIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl90ZXJuYXJ5X21lcmdlQDM1CgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fdGVybmFyeV9mYWxzZUAyNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMzIKICAgIC8vIDogR2xvYmFsLmxhdGVzdFRpbWVzdGFtcDsKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGZyYW1lX2J1cnkgMTQKICAgIGIgc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX3Rlcm5hcnlfbWVyZ2VAMjUKCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9lbHNlX2JvZHlANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1ODgKICAgIC8vIHRoaXMuc3BlbmRpbmdBZGRyZXNzLnZhbHVlID0gdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29udHJvbGxlZEFkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ29udHJvbGxlZEFkZHJlc3MgfSk7CiAgICBieXRlY18wIC8vICJjb250cm9sbGVkX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTg4CiAgICAvLyB0aGlzLnNwZW5kaW5nQWRkcmVzcy52YWx1ZSA9IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjYKICAgIC8vIHNwZW5kaW5nQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNTcGVuZGluZ0FkZHJlc3MgfSkKICAgIGJ5dGVjIDExIC8vICJzcGVuZGluZ19hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU4OAogICAgLy8gdGhpcy5zcGVuZGluZ0FkZHJlc3MudmFsdWUgPSB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgYiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYWZ0ZXJfaWZfZWxzZUA4CgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fdGVybmFyeV9mYWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU3NQogICAgLy8gY29uc3QgY2FsbGVyID0gZ2xvYmFsID8gR2xvYmFsLnplcm9BZGRyZXNzIDogVHhuLnNlbmRlcgogICAgdHhuIFNlbmRlcgogICAgYiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fdGVybmFyeV9tZXJnZUAzCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "state": { + "global": { + "num_byte_slices": 4, + "num_uints": 4 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "schema": { + "global": { + "declared": { + "admin": { + "type": "bytes", + "key": "admin", + "descr": "The admin of the abstracted account. This address can add plugins and initiate rekeys" + }, + "controlledAddress": { + "type": "bytes", + "key": "controlled_address", + "descr": "The address this app controls" + }, + "currentPlugin": { + "type": "bytes", + "key": "current_plugin", + "descr": "[TEMPORARY STATE FIELD] The current plugin key being used" + }, + "escrowFactory": { + "type": "uint64", + "key": "escrow_factory", + "descr": "the escrow account factory to use for allowances" + }, + "lastChange": { + "type": "uint64", + "key": "last_change", + "descr": "The last time state has changed on the abstracted account (not including lastCalled for cooldowns) in unix time" + }, + "lastUserInteraction": { + "type": "uint64", + "key": "last_user_interaction", + "descr": "The last time the contract was interacted with in unix time" + }, + "rekeyIndex": { + "type": "uint64", + "key": "rekey_index", + "descr": "[TEMPORARY STATE FIELD] The index of the transaction that created the rekey sandwich" + }, + "spendingAddress": { + "type": "bytes", + "key": "spending_address", + "descr": "[TEMPORARY STATE FIELD] The spending address for the currently active plugin" + } + }, + "reserved": {} + }, + "local": { + "declared": {}, + "reserved": {} + } + }, + "contract": { + "name": "AbstractedAccount", + "methods": [ + { + "name": "createApplication", + "args": [ + { + "type": "address", + "name": "controlledAddress", + "desc": "The address of the abstracted account. If zeroAddress, then the address of the contract account will be used" + }, + { + "type": "address", + "name": "admin", + "desc": "The admin for this app" + }, + { + "type": "uint64", + "name": "escrowFactory" + } + ], + "readonly": false, + "returns": { + "type": "void" + }, + "desc": "Create an abstracted account application.\nThis is not part of ARC58 and implementation specific." + }, + { + "name": "register", + "args": [ + { + "type": "string", + "name": "escrow" + } + ], + "readonly": false, + "returns": { + "type": "void" + }, + "desc": "Register the abstracted account with the escrow factory.\nThis allows apps to correlate the account with the app without needing\nit to be explicitly provided." + }, + { + "name": "arc58_changeAdmin", + "args": [ + { + "type": "address", + "name": "newAdmin", + "desc": "The new admin" + } + ], + "readonly": false, + "returns": { + "type": "void" + }, + "desc": "Attempt to change the admin for this app. Some implementations MAY not support this." + }, + { + "name": "arc58_pluginChangeAdmin", + "args": [ + { + "type": "address", + "name": "newAdmin", + "desc": "The new admin" + } + ], + "readonly": false, + "returns": { + "type": "void" + }, + "desc": "Attempt to change the admin via plugin." + }, + { + "name": "arc58_getAdmin", + "args": [], + "readonly": true, + "returns": { + "type": "address" + }, + "desc": "Get the admin of this app. This method SHOULD always be used rather than reading directly from state\nbecause different implementations may have different ways of determining the admin." + }, + { + "name": "arc58_verifyAuthAddress", + "args": [], + "readonly": false, + "returns": { + "type": "void" + }, + "desc": "Verify the abstracted account is rekeyed to this app" + }, + { + "name": "arc58_rekeyTo", + "args": [ + { + "type": "address", + "name": "address", + "desc": "The address to rekey to" + }, + { + "type": "bool", + "name": "flash", + "desc": "Whether or not this should be a flash rekey. If true, the rekey back to the app address must done in the same txn group as this call" + } + ], + "readonly": false, + "returns": { + "type": "void" + }, + "desc": "Rekey the abstracted account to another address. Primarily useful for rekeying to an EOA." + }, + { + "name": "arc58_canCall", + "args": [ + { + "type": "uint64", + "name": "plugin", + "desc": "the plugin to be rekeyed to" + }, + { + "type": "bool", + "name": "global", + "desc": "whether this is callable globally" + }, + { + "type": "address", + "name": "address", + "desc": "the address that will trigger the plugin" + }, + { + "type": "string", + "name": "escrow" + }, + { + "type": "byte[4]", + "name": "method", + "desc": "the method being called on the plugin, if applicable" + } + ], + "readonly": true, + "returns": { + "type": "bool", + "desc": "whether the plugin can be called with these parameters" + }, + "desc": "check whether the plugin can be used" + }, + { + "name": "arc58_rekeyToPlugin", + "args": [ + { + "type": "uint64", + "name": "plugin", + "desc": "The app to rekey to" + }, + { + "type": "bool", + "name": "global", + "desc": "Whether the plugin is callable globally" + }, + { + "type": "string", + "name": "escrow" + }, + { + "type": "uint64[]", + "name": "methodOffsets", + "desc": "The indices of the methods being used in the group if the plugin has method restrictions these indices are required to match the methods used on each subsequent call to the plugin within the group" + }, + { + "type": "(uint64,uint64)[]", + "name": "fundsRequest", + "desc": "If the plugin is using an escrow, this is the list of funds to transfer to the escrow for the plugin to be able to use during execution" + } + ], + "readonly": false, + "returns": { + "type": "void" + }, + "desc": "Temporarily rekey to an approved plugin app address" + }, + { + "name": "arc58_rekeyToNamedPlugin", + "args": [ + { + "type": "string", + "name": "name", + "desc": "The name of the plugin to rekey to" + }, + { + "type": "bool", + "name": "global", + "desc": "Whether the plugin is callable globally" + }, + { + "type": "string", + "name": "escrow" + }, + { + "type": "uint64[]", + "name": "methodOffsets", + "desc": "The indices of the methods being used in the group if the plugin has method restrictions these indices are required to match the methods used on each subsequent call to the plugin within the group" + }, + { + "type": "(uint64,uint64)[]", + "name": "fundsRequest", + "desc": "If the plugin is using an escrow, this is the list of funds to transfer to the escrow for the plugin to be able to use during execution" + } + ], + "readonly": false, + "returns": { + "type": "void" + }, + "desc": "Temporarily rekey to a named plugin app address" + }, + { + "name": "arc58_addPlugin", + "args": [ + { + "type": "uint64", + "name": "plugin" + }, + { + "type": "address", + "name": "caller" + }, + { + "type": "string", + "name": "escrow", + "desc": "The escrow account to use for the plugin, if any. If empty, no escrow will be used, if the named escrow does not exist, it will be created" + }, + { + "type": "bool", + "name": "admin", + "desc": "Whether the plugin has permissions to change the admin account" + }, + { + "type": "uint8", + "name": "delegationType", + "desc": "the ownership of the delegation for last_interval updates" + }, + { + "type": "uint64", + "name": "lastValid", + "desc": "The timestamp or round when the permission expires" + }, + { + "type": "uint64", + "name": "cooldown", + "desc": "The number of seconds or rounds that must pass before the plugin can be called again" + }, + { + "type": "(byte[4],uint64)[]", + "name": "methods", + "desc": "The methods that are allowed to be called for the plugin by the address" + }, + { + "type": "bool", + "name": "useRounds", + "desc": "Whether the plugin uses rounds for cooldowns and lastValid, defaults to timestamp" + }, + { + "type": "bool", + "name": "useExecutionKey" + }, + { + "type": "bool", + "name": "defaultToEscrow" + } + ], + "readonly": false, + "returns": { + "type": "void" + }, + "desc": "Add an app to the list of approved plugins" + }, + { + "name": "arc58_removePlugin", + "args": [ + { + "type": "uint64", + "name": "plugin" + }, + { + "type": "address", + "name": "caller" + }, + { + "type": "string", + "name": "escrow" + } + ], + "readonly": false, + "returns": { + "type": "void" + }, + "desc": "Remove an app from the list of approved plugins" + }, + { + "name": "arc58_addNamedPlugin", + "args": [ + { + "type": "string", + "name": "name", + "desc": "The plugin name" + }, + { + "type": "uint64", + "name": "plugin" + }, + { + "type": "address", + "name": "caller" + }, + { + "type": "string", + "name": "escrow", + "desc": "The escrow account to use for the plugin, if any. If empty, no escrow will be used, if the named escrow does not exist, it will be created" + }, + { + "type": "bool", + "name": "admin", + "desc": "Whether the plugin has permissions to change the admin account" + }, + { + "type": "uint8", + "name": "delegationType", + "desc": "the ownership of the delegation for last_interval updates" + }, + { + "type": "uint64", + "name": "lastValid", + "desc": "The timestamp or round when the permission expires" + }, + { + "type": "uint64", + "name": "cooldown", + "desc": "The number of seconds or rounds that must pass before the plugin can be called again" + }, + { + "type": "(byte[4],uint64)[]", + "name": "methods", + "desc": "The methods that are allowed to be called for the plugin by the address" + }, + { + "type": "bool", + "name": "useRounds", + "desc": "Whether the plugin uses rounds for cooldowns and lastValid, defaults to timestamp" + }, + { + "type": "bool", + "name": "useExecutionKey" + }, + { + "type": "bool", + "name": "defaultToEscrow" + } + ], + "readonly": false, + "returns": { + "type": "void" + }, + "desc": "Add a named plugin" + }, + { + "name": "arc58_removeNamedPlugin", + "args": [ + { + "type": "string", + "name": "name", + "desc": "The plugin name" + } + ], + "readonly": false, + "returns": { + "type": "void" + }, + "desc": "Remove a named plugin" + }, + { + "name": "arc58_newEscrow", + "args": [ + { + "type": "string", + "name": "escrow", + "desc": "The name of the escrow to create" + } + ], + "readonly": false, + "returns": { + "type": "uint64" + }, + "desc": "Create a new escrow for the controlled address" + }, + { + "name": "arc58_toggleEscrowLock", + "args": [ + { + "type": "string", + "name": "escrow", + "desc": "The escrow to lock or unlock" + } + ], + "readonly": false, + "returns": { + "type": "(uint64,bool)" + }, + "desc": "Lock or Unlock an escrow account" + }, + { + "name": "arc58_reclaim", + "args": [ + { + "type": "string", + "name": "escrow", + "desc": "The escrow to reclaim funds from" + }, + { + "type": "(uint64,uint64,bool)[]", + "name": "reclaims", + "desc": "The list of reclaims to make from the escrow" + } + ], + "readonly": false, + "returns": { + "type": "void" + }, + "desc": "Transfer funds from an escrow back to the controlled address." + }, + { + "name": "arc58_optinEscrow", + "args": [ + { + "type": "string", + "name": "escrow", + "desc": "The escrow to opt-in to" + }, + { + "type": "uint64[]", + "name": "assets", + "desc": "The list of assets to opt-in to" + } + ], + "readonly": false, + "returns": { + "type": "void" + }, + "desc": "Opt-in an escrow account to assets" + }, + { + "name": "arc58_pluginOptinEscrow", + "args": [ + { + "type": "uint64", + "name": "plugin" + }, + { + "type": "address", + "name": "caller" + }, + { + "type": "string", + "name": "escrow" + }, + { + "type": "uint64[]", + "name": "assets", + "desc": "The list of assets to opt-in to" + }, + { + "type": "pay", + "name": "mbrPayment", + "desc": "The payment txn that is used to pay for the asset opt-in" + } + ], + "readonly": false, + "returns": { + "type": "void" + }, + "desc": "Opt-in an escrow account to assets via a plugin / allowed caller" + }, + { + "name": "arc58_addAllowances", + "args": [ + { + "type": "string", + "name": "escrow", + "desc": "The escrow to add the allowance for" + }, + { + "type": "(uint64,uint8,uint64,uint64,uint64,bool)[]", + "name": "allowances", + "desc": "The list of allowances to add" + } + ], + "readonly": false, + "returns": { + "type": "void" + }, + "desc": "Add an allowance for an escrow account" + }, + { + "name": "arc58_removeAllowances", + "args": [ + { + "type": "string", + "name": "escrow", + "desc": "The escrow to remove the allowance for" + }, + { + "type": "uint64[]", + "name": "assets", + "desc": "The list of assets to remove the allowance for" + } + ], + "readonly": false, + "returns": { + "type": "void" + }, + "desc": "Remove an allowances for an escrow account" + }, + { + "name": "arc58_addExecutionKey", + "args": [ + { + "type": "byte[32]", + "name": "lease" + }, + { + "type": "byte[32][]", + "name": "groups" + }, + { + "type": "uint64", + "name": "firstValid" + }, + { + "type": "uint64", + "name": "lastValid" + } + ], + "readonly": false, + "returns": { + "type": "void" + } + }, + { + "name": "arc58_removeExecutionKey", + "args": [ + { + "type": "byte[32]", + "name": "lease" + } + ], + "readonly": false, + "returns": { + "type": "void" + } + }, + { + "name": "arc58_getPlugins", + "args": [ + { + "type": "(uint64,address,string)[]", + "name": "keys" + } + ], + "readonly": true, + "returns": { + "type": "(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]" + } + }, + { + "name": "arc58_getNamedPlugins", + "args": [ + { + "type": "string[]", + "name": "names" + } + ], + "readonly": true, + "returns": { + "type": "(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]" + } + }, + { + "name": "arc58_getEscrows", + "args": [ + { + "type": "string[]", + "name": "escrows" + } + ], + "readonly": true, + "returns": { + "type": "(uint64,bool)[]" + } + }, + { + "name": "arc58_getAllowances", + "args": [ + { + "type": "string", + "name": "escrow" + }, + { + "type": "uint64[]", + "name": "assets" + } + ], + "readonly": true, + "returns": { + "type": "(uint8,uint64,uint64,uint64,uint64,uint64,uint64,bool)[]" + } + }, + { + "name": "arc58_getExecutions", + "args": [ + { + "type": "byte[32][]", + "name": "leases" + } + ], + "readonly": true, + "returns": { + "type": "(byte[32][],uint64,uint64)[]" + } + }, + { + "name": "mbr", + "args": [ + { + "type": "string", + "name": "escrow" + }, + { + "type": "uint64", + "name": "methodCount" + }, + { + "type": "string", + "name": "plugin" + }, + { + "type": "uint64", + "name": "groups" + } + ], + "readonly": true, + "returns": { + "type": "(uint64,uint64,uint64,uint64,uint64,bool,uint64)" + } + } + ], + "networks": {} + }, + "bare_call_config": {} +} \ No newline at end of file diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/abstracted_account/AbstractedAccount.arc56.json b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/abstracted_account/AbstractedAccount.arc56.json new file mode 100644 index 000000000..f2ad0d607 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/abstracted_account/AbstractedAccount.arc56.json @@ -0,0 +1,1725 @@ +{ + "name": "AbstractedAccount", + "structs": { + "AbstractAccountBoxMBRData": [ + { + "name": "plugins", + "type": "uint64" + }, + { + "name": "namedPlugins", + "type": "uint64" + }, + { + "name": "escrows", + "type": "uint64" + }, + { + "name": "allowances", + "type": "uint64" + }, + { + "name": "executions", + "type": "uint64" + }, + { + "name": "escrowExists", + "type": "bool" + }, + { + "name": "newEscrowMintCost", + "type": "uint64" + } + ], + "AllowanceInfo": [ + { + "name": "type", + "type": "uint8" + }, + { + "name": "max", + "type": "uint64" + }, + { + "name": "amount", + "type": "uint64" + }, + { + "name": "spent", + "type": "uint64" + }, + { + "name": "interval", + "type": "uint64" + }, + { + "name": "last", + "type": "uint64" + }, + { + "name": "start", + "type": "uint64" + }, + { + "name": "useRounds", + "type": "bool" + } + ], + "AllowanceKey": [ + { + "name": "escrow", + "type": "string" + }, + { + "name": "asset", + "type": "uint64" + } + ], + "EscrowInfo": [ + { + "name": "id", + "type": "uint64" + }, + { + "name": "locked", + "type": "bool" + } + ], + "ExecutionInfo": [ + { + "name": "groups", + "type": "byte[32][]" + }, + { + "name": "firstValid", + "type": "uint64" + }, + { + "name": "lastValid", + "type": "uint64" + } + ], + "PluginInfo": [ + { + "name": "escrow", + "type": "uint64" + }, + { + "name": "delegationType", + "type": "uint8" + }, + { + "name": "lastValid", + "type": "uint64" + }, + { + "name": "cooldown", + "type": "uint64" + }, + { + "name": "methods", + "type": "(byte[4],uint64,uint64)[]" + }, + { + "name": "admin", + "type": "bool" + }, + { + "name": "useRounds", + "type": "bool" + }, + { + "name": "useExecutionKey", + "type": "bool" + }, + { + "name": "lastCalled", + "type": "uint64" + }, + { + "name": "start", + "type": "uint64" + } + ], + "PluginKey": [ + { + "name": "plugin", + "type": "uint64" + }, + { + "name": "caller", + "type": "address" + }, + { + "name": "escrow", + "type": "string" + } + ] + }, + "methods": [ + { + "name": "createApplication", + "args": [ + { + "type": "address", + "name": "controlledAddress", + "desc": "The address of the abstracted account. If zeroAddress, then the address of the contract account will be used" + }, + { + "type": "address", + "name": "admin", + "desc": "The admin for this app" + }, + { + "type": "uint64", + "name": "escrowFactory" + } + ], + "returns": { + "type": "void" + }, + "actions": { + "create": [ + "NoOp" + ], + "call": [] + }, + "readonly": false, + "desc": "Create an abstracted account application.\nThis is not part of ARC58 and implementation specific.", + "events": [], + "recommendations": {} + }, + { + "name": "register", + "args": [ + { + "type": "string", + "name": "escrow" + } + ], + "returns": { + "type": "void" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "desc": "Register the abstracted account with the escrow factory.\nThis allows apps to correlate the account with the app without needing\nit to be explicitly provided.", + "events": [], + "recommendations": {} + }, + { + "name": "arc58_changeAdmin", + "args": [ + { + "type": "address", + "name": "newAdmin", + "desc": "The new admin" + } + ], + "returns": { + "type": "void" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "desc": "Attempt to change the admin for this app. Some implementations MAY not support this.", + "events": [], + "recommendations": {} + }, + { + "name": "arc58_pluginChangeAdmin", + "args": [ + { + "type": "address", + "name": "newAdmin", + "desc": "The new admin" + } + ], + "returns": { + "type": "void" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "desc": "Attempt to change the admin via plugin.", + "events": [], + "recommendations": {} + }, + { + "name": "arc58_getAdmin", + "args": [], + "returns": { + "type": "address" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": true, + "desc": "Get the admin of this app. This method SHOULD always be used rather than reading directly from state\nbecause different implementations may have different ways of determining the admin.", + "events": [], + "recommendations": {} + }, + { + "name": "arc58_verifyAuthAddress", + "args": [], + "returns": { + "type": "void" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "desc": "Verify the abstracted account is rekeyed to this app", + "events": [], + "recommendations": {} + }, + { + "name": "arc58_rekeyTo", + "args": [ + { + "type": "address", + "name": "address", + "desc": "The address to rekey to" + }, + { + "type": "bool", + "name": "flash", + "desc": "Whether or not this should be a flash rekey. If true, the rekey back to the app address must done in the same txn group as this call" + } + ], + "returns": { + "type": "void" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "desc": "Rekey the abstracted account to another address. Primarily useful for rekeying to an EOA.", + "events": [], + "recommendations": {} + }, + { + "name": "arc58_canCall", + "args": [ + { + "type": "uint64", + "name": "plugin", + "desc": "the plugin to be rekeyed to" + }, + { + "type": "bool", + "name": "global", + "desc": "whether this is callable globally" + }, + { + "type": "address", + "name": "address", + "desc": "the address that will trigger the plugin" + }, + { + "type": "string", + "name": "escrow" + }, + { + "type": "byte[4]", + "name": "method", + "desc": "the method being called on the plugin, if applicable" + } + ], + "returns": { + "type": "bool", + "desc": "whether the plugin can be called with these parameters" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": true, + "desc": "check whether the plugin can be used", + "events": [], + "recommendations": {} + }, + { + "name": "arc58_rekeyToPlugin", + "args": [ + { + "type": "uint64", + "name": "plugin", + "desc": "The app to rekey to" + }, + { + "type": "bool", + "name": "global", + "desc": "Whether the plugin is callable globally" + }, + { + "type": "string", + "name": "escrow" + }, + { + "type": "uint64[]", + "name": "methodOffsets", + "desc": "The indices of the methods being used in the group if the plugin has method restrictions these indices are required to match the methods used on each subsequent call to the plugin within the group" + }, + { + "type": "(uint64,uint64)[]", + "name": "fundsRequest", + "desc": "If the plugin is using an escrow, this is the list of funds to transfer to the escrow for the plugin to be able to use during execution" + } + ], + "returns": { + "type": "void" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "desc": "Temporarily rekey to an approved plugin app address", + "events": [], + "recommendations": {} + }, + { + "name": "arc58_rekeyToNamedPlugin", + "args": [ + { + "type": "string", + "name": "name", + "desc": "The name of the plugin to rekey to" + }, + { + "type": "bool", + "name": "global", + "desc": "Whether the plugin is callable globally" + }, + { + "type": "string", + "name": "escrow" + }, + { + "type": "uint64[]", + "name": "methodOffsets", + "desc": "The indices of the methods being used in the group if the plugin has method restrictions these indices are required to match the methods used on each subsequent call to the plugin within the group" + }, + { + "type": "(uint64,uint64)[]", + "name": "fundsRequest", + "desc": "If the plugin is using an escrow, this is the list of funds to transfer to the escrow for the plugin to be able to use during execution" + } + ], + "returns": { + "type": "void" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "desc": "Temporarily rekey to a named plugin app address", + "events": [], + "recommendations": {} + }, + { + "name": "arc58_addPlugin", + "args": [ + { + "type": "uint64", + "name": "plugin" + }, + { + "type": "address", + "name": "caller" + }, + { + "type": "string", + "name": "escrow", + "desc": "The escrow account to use for the plugin, if any. If empty, no escrow will be used, if the named escrow does not exist, it will be created" + }, + { + "type": "bool", + "name": "admin", + "desc": "Whether the plugin has permissions to change the admin account" + }, + { + "type": "uint8", + "name": "delegationType", + "desc": "the ownership of the delegation for last_interval updates" + }, + { + "type": "uint64", + "name": "lastValid", + "desc": "The timestamp or round when the permission expires" + }, + { + "type": "uint64", + "name": "cooldown", + "desc": "The number of seconds or rounds that must pass before the plugin can be called again" + }, + { + "type": "(byte[4],uint64)[]", + "name": "methods", + "desc": "The methods that are allowed to be called for the plugin by the address" + }, + { + "type": "bool", + "name": "useRounds", + "desc": "Whether the plugin uses rounds for cooldowns and lastValid, defaults to timestamp" + }, + { + "type": "bool", + "name": "useExecutionKey" + }, + { + "type": "bool", + "name": "defaultToEscrow" + } + ], + "returns": { + "type": "void" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "desc": "Add an app to the list of approved plugins", + "events": [], + "recommendations": {} + }, + { + "name": "arc58_removePlugin", + "args": [ + { + "type": "uint64", + "name": "plugin" + }, + { + "type": "address", + "name": "caller" + }, + { + "type": "string", + "name": "escrow" + } + ], + "returns": { + "type": "void" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "desc": "Remove an app from the list of approved plugins", + "events": [], + "recommendations": {} + }, + { + "name": "arc58_addNamedPlugin", + "args": [ + { + "type": "string", + "name": "name", + "desc": "The plugin name" + }, + { + "type": "uint64", + "name": "plugin" + }, + { + "type": "address", + "name": "caller" + }, + { + "type": "string", + "name": "escrow", + "desc": "The escrow account to use for the plugin, if any. If empty, no escrow will be used, if the named escrow does not exist, it will be created" + }, + { + "type": "bool", + "name": "admin", + "desc": "Whether the plugin has permissions to change the admin account" + }, + { + "type": "uint8", + "name": "delegationType", + "desc": "the ownership of the delegation for last_interval updates" + }, + { + "type": "uint64", + "name": "lastValid", + "desc": "The timestamp or round when the permission expires" + }, + { + "type": "uint64", + "name": "cooldown", + "desc": "The number of seconds or rounds that must pass before the plugin can be called again" + }, + { + "type": "(byte[4],uint64)[]", + "name": "methods", + "desc": "The methods that are allowed to be called for the plugin by the address" + }, + { + "type": "bool", + "name": "useRounds", + "desc": "Whether the plugin uses rounds for cooldowns and lastValid, defaults to timestamp" + }, + { + "type": "bool", + "name": "useExecutionKey" + }, + { + "type": "bool", + "name": "defaultToEscrow" + } + ], + "returns": { + "type": "void" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "desc": "Add a named plugin", + "events": [], + "recommendations": {} + }, + { + "name": "arc58_removeNamedPlugin", + "args": [ + { + "type": "string", + "name": "name", + "desc": "The plugin name" + } + ], + "returns": { + "type": "void" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "desc": "Remove a named plugin", + "events": [], + "recommendations": {} + }, + { + "name": "arc58_newEscrow", + "args": [ + { + "type": "string", + "name": "escrow", + "desc": "The name of the escrow to create" + } + ], + "returns": { + "type": "uint64" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "desc": "Create a new escrow for the controlled address", + "events": [], + "recommendations": {} + }, + { + "name": "arc58_toggleEscrowLock", + "args": [ + { + "type": "string", + "name": "escrow", + "desc": "The escrow to lock or unlock" + } + ], + "returns": { + "type": "(uint64,bool)", + "struct": "EscrowInfo" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "desc": "Lock or Unlock an escrow account", + "events": [], + "recommendations": {} + }, + { + "name": "arc58_reclaim", + "args": [ + { + "type": "string", + "name": "escrow", + "desc": "The escrow to reclaim funds from" + }, + { + "type": "(uint64,uint64,bool)[]", + "name": "reclaims", + "desc": "The list of reclaims to make from the escrow" + } + ], + "returns": { + "type": "void" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "desc": "Transfer funds from an escrow back to the controlled address.", + "events": [], + "recommendations": {} + }, + { + "name": "arc58_optinEscrow", + "args": [ + { + "type": "string", + "name": "escrow", + "desc": "The escrow to opt-in to" + }, + { + "type": "uint64[]", + "name": "assets", + "desc": "The list of assets to opt-in to" + } + ], + "returns": { + "type": "void" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "desc": "Opt-in an escrow account to assets", + "events": [], + "recommendations": {} + }, + { + "name": "arc58_pluginOptinEscrow", + "args": [ + { + "type": "uint64", + "name": "plugin" + }, + { + "type": "address", + "name": "caller" + }, + { + "type": "string", + "name": "escrow" + }, + { + "type": "uint64[]", + "name": "assets", + "desc": "The list of assets to opt-in to" + }, + { + "type": "pay", + "name": "mbrPayment", + "desc": "The payment txn that is used to pay for the asset opt-in" + } + ], + "returns": { + "type": "void" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "desc": "Opt-in an escrow account to assets via a plugin / allowed caller", + "events": [], + "recommendations": {} + }, + { + "name": "arc58_addAllowances", + "args": [ + { + "type": "string", + "name": "escrow", + "desc": "The escrow to add the allowance for" + }, + { + "type": "(uint64,uint8,uint64,uint64,uint64,bool)[]", + "name": "allowances", + "desc": "The list of allowances to add" + } + ], + "returns": { + "type": "void" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "desc": "Add an allowance for an escrow account", + "events": [], + "recommendations": {} + }, + { + "name": "arc58_removeAllowances", + "args": [ + { + "type": "string", + "name": "escrow", + "desc": "The escrow to remove the allowance for" + }, + { + "type": "uint64[]", + "name": "assets", + "desc": "The list of assets to remove the allowance for" + } + ], + "returns": { + "type": "void" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "desc": "Remove an allowances for an escrow account", + "events": [], + "recommendations": {} + }, + { + "name": "arc58_addExecutionKey", + "args": [ + { + "type": "byte[32]", + "name": "lease" + }, + { + "type": "byte[32][]", + "name": "groups" + }, + { + "type": "uint64", + "name": "firstValid" + }, + { + "type": "uint64", + "name": "lastValid" + } + ], + "returns": { + "type": "void" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + }, + { + "name": "arc58_removeExecutionKey", + "args": [ + { + "type": "byte[32]", + "name": "lease" + } + ], + "returns": { + "type": "void" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + }, + { + "name": "arc58_getPlugins", + "args": [ + { + "type": "(uint64,address,string)[]", + "name": "keys" + } + ], + "returns": { + "type": "(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": true, + "events": [], + "recommendations": {} + }, + { + "name": "arc58_getNamedPlugins", + "args": [ + { + "type": "string[]", + "name": "names" + } + ], + "returns": { + "type": "(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": true, + "events": [], + "recommendations": {} + }, + { + "name": "arc58_getEscrows", + "args": [ + { + "type": "string[]", + "name": "escrows" + } + ], + "returns": { + "type": "(uint64,bool)[]" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": true, + "events": [], + "recommendations": {} + }, + { + "name": "arc58_getAllowances", + "args": [ + { + "type": "string", + "name": "escrow" + }, + { + "type": "uint64[]", + "name": "assets" + } + ], + "returns": { + "type": "(uint8,uint64,uint64,uint64,uint64,uint64,uint64,bool)[]" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": true, + "events": [], + "recommendations": {} + }, + { + "name": "arc58_getExecutions", + "args": [ + { + "type": "byte[32][]", + "name": "leases" + } + ], + "returns": { + "type": "(byte[32][],uint64,uint64)[]" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": true, + "events": [], + "recommendations": {} + }, + { + "name": "mbr", + "args": [ + { + "type": "string", + "name": "escrow" + }, + { + "type": "uint64", + "name": "methodCount" + }, + { + "type": "string", + "name": "plugin" + }, + { + "type": "uint64", + "name": "groups" + } + ], + "returns": { + "type": "(uint64,uint64,uint64,uint64,uint64,bool,uint64)", + "struct": "AbstractAccountBoxMBRData" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": true, + "events": [], + "recommendations": {} + } + ], + "arcs": [ + 22, + 28 + ], + "networks": {}, + "state": { + "schema": { + "global": { + "ints": 4, + "bytes": 4 + }, + "local": { + "ints": 0, + "bytes": 0 + } + }, + "keys": { + "global": { + "admin": { + "keyType": "AVMString", + "valueType": "address", + "key": "YWRtaW4=", + "desc": "The admin of the abstracted account. This address can add plugins and initiate rekeys" + }, + "controlledAddress": { + "keyType": "AVMString", + "valueType": "address", + "key": "Y29udHJvbGxlZF9hZGRyZXNz", + "desc": "The address this app controls" + }, + "lastUserInteraction": { + "keyType": "AVMString", + "valueType": "AVMUint64", + "key": "bGFzdF91c2VyX2ludGVyYWN0aW9u", + "desc": "The last time the contract was interacted with in unix time" + }, + "lastChange": { + "keyType": "AVMString", + "valueType": "AVMUint64", + "key": "bGFzdF9jaGFuZ2U=", + "desc": "The last time state has changed on the abstracted account (not including lastCalled for cooldowns) in unix time" + }, + "escrowFactory": { + "keyType": "AVMString", + "valueType": "AVMUint64", + "key": "ZXNjcm93X2ZhY3Rvcnk=", + "desc": "the escrow account factory to use for allowances" + }, + "spendingAddress": { + "keyType": "AVMString", + "valueType": "address", + "key": "c3BlbmRpbmdfYWRkcmVzcw==", + "desc": "[TEMPORARY STATE FIELD] The spending address for the currently active plugin" + }, + "currentPlugin": { + "keyType": "AVMString", + "valueType": "PluginKey", + "key": "Y3VycmVudF9wbHVnaW4=", + "desc": "[TEMPORARY STATE FIELD] The current plugin key being used" + }, + "rekeyIndex": { + "keyType": "AVMString", + "valueType": "AVMUint64", + "key": "cmVrZXlfaW5kZXg=", + "desc": "[TEMPORARY STATE FIELD] The index of the transaction that created the rekey sandwich" + } + }, + "local": {}, + "box": {} + }, + "maps": { + "global": {}, + "local": {}, + "box": { + "plugins": { + "keyType": "PluginKey", + "valueType": "PluginInfo", + "desc": "Plugins that add functionality to the controlledAddress and the account that has permission to use it.", + "prefix": "cA==" + }, + "namedPlugins": { + "keyType": "AVMString", + "valueType": "PluginKey", + "desc": "Plugins that have been given a name for discoverability", + "prefix": "bg==" + }, + "escrows": { + "keyType": "AVMString", + "valueType": "EscrowInfo", + "desc": "the escrows that this wallet has created for specific callers with allowances", + "prefix": "ZQ==" + }, + "allowances": { + "keyType": "AllowanceKey", + "valueType": "AllowanceInfo", + "desc": "The Allowances for plugins installed on the smart contract with useAllowance set to true", + "prefix": "YQ==" + }, + "executions": { + "keyType": "AVMBytes", + "valueType": "ExecutionInfo", + "desc": "execution keys", + "prefix": "eA==" + } + } + } + }, + "bareActions": { + "create": [], + "call": [] + }, + "sourceInfo": { + "approval": { + "sourceInfo": [ + { + "pc": [ + 4130, + 4248, + 4265, + 4407, + 4563, + 4730, + 5014, + 5778, + 5941 + ], + "errorMessage": "Box must have value" + }, + { + "pc": [ + 5141 + ], + "errorMessage": "Bytes has valid prefix" + }, + { + "pc": [ + 2992, + 3214, + 3442, + 3704 + ], + "errorMessage": "Escrow is locked" + }, + { + "pc": [ + 2594 + ], + "errorMessage": "Escrow name is required" + }, + { + "pc": [ + 6104 + ], + "errorMessage": "Execution key expired" + }, + { + "pc": [ + 6077 + ], + "errorMessage": "Execution key not found" + }, + { + "pc": [ + 6090 + ], + "errorMessage": "Execution key not ready" + }, + { + "pc": [ + 6165 + ], + "errorMessage": "Group not found" + }, + { + "pc": [ + 236 + ], + "errorMessage": "OnCompletion must be NoOp" + }, + { + "pc": [ + 888 + ], + "errorMessage": "This plugin does not have admin privileges" + }, + { + "pc": [ + 865 + ], + "errorMessage": "This plugin is not in control of the account" + }, + { + "pc": [ + 859, + 940 + ], + "errorMessage": "account funded" + }, + { + "pc": [ + 1026, + 1528, + 1859, + 2112, + 2454, + 2580, + 2629, + 3426, + 3688, + 3870, + 4031 + ], + "errorMessage": "admin only" + }, + { + "pc": [ + 843 + ], + "errorMessage": "admin plugins cannot use escrows" + }, + { + "pc": [ + 3579 + ], + "errorMessage": "allowance already exists" + }, + { + "pc": [ + 3063, + 3341, + 3793, + 5692 + ], + "errorMessage": "allowance does not exist" + }, + { + "pc": [ + 5771, + 5910, + 5934, + 6016 + ], + "errorMessage": "allowance exceeded" + }, + { + "pc": [ + 737, + 850, + 863, + 2748, + 2987, + 3223, + 3255, + 5090, + 5628, + 5638, + 6250 + ], + "errorMessage": "application exists" + }, + { + "pc": [ + 6359 + ], + "errorMessage": "cannot call other apps during rekey" + }, + { + "pc": [ + 733, + 791, + 821, + 856, + 921, + 933, + 944, + 952, + 1024, + 1031, + 1526, + 1686, + 1697, + 1857, + 1903, + 1914, + 2110, + 2283, + 2294, + 2452, + 2495, + 2506, + 2578, + 2627, + 2730, + 2785, + 2804, + 2853, + 2872, + 2961, + 2997, + 3264, + 3424, + 3446, + 3457, + 3686, + 3708, + 3719, + 3868, + 4013, + 5033, + 5044, + 5074, + 5086, + 5358, + 5807, + 5845, + 6064, + 6245, + 6624 + ], + "errorMessage": "check GlobalState exists" + }, + { + "pc": [ + 1545, + 2142 + ], + "errorMessage": "delegation type must not be self for global plugins" + }, + { + "pc": [ + 2590 + ], + "errorMessage": "escrow already exists" + }, + { + "pc": [ + 721, + 2638, + 2741, + 2973, + 3206, + 3435, + 3697, + 5620 + ], + "errorMessage": "escrow does not exist" + }, + { + "pc": [ + 1800, + 2415 + ], + "errorMessage": "escrow must be set if defaultToEscrow is true" + }, + { + "pc": [ + 4007 + ], + "errorMessage": "execution key does not exist" + }, + { + "pc": [ + 3927 + ], + "errorMessage": "execution key update must match first valid" + }, + { + "pc": [ + 3937 + ], + "errorMessage": "execution key update must match last valid" + }, + { + "pc": [ + 2732, + 2963, + 3245 + ], + "errorMessage": "forbidden" + }, + { + "pc": [ + 1628, + 2234, + 2769, + 3508, + 3767, + 4098, + 4215, + 4374, + 4529, + 4713, + 5664 + ], + "errorMessage": "index access is out of bounds" + }, + { + "pc": [ + 6438 + ], + "errorMessage": "invalid method signature length" + }, + { + "pc": [ + 1290, + 1370 + ], + "errorMessage": "invalid number of bytes for (len+(uint64,uint64)[])" + }, + { + "pc": [ + 2720 + ], + "errorMessage": "invalid number of bytes for (len+(uint64,uint64,bool1)[])" + }, + { + "pc": [ + 3418 + ], + "errorMessage": "invalid number of bytes for (len+(uint64,uint8,uint64,uint64,uint64,bool1)[])" + }, + { + "pc": [ + 1487, + 2068 + ], + "errorMessage": "invalid number of bytes for (len+(uint8[4],uint64)[])" + }, + { + "pc": [ + 1274, + 1354, + 2955, + 3152, + 3680, + 4508 + ], + "errorMessage": "invalid number of bytes for (len+uint64[])" + }, + { + "pc": [ + 3840, + 4690 + ], + "errorMessage": "invalid number of bytes for (len+uint8[32][])" + }, + { + "pc": [ + 700, + 1170, + 1256, + 1310, + 1336, + 1424, + 1845, + 1961, + 1999, + 2442, + 2569, + 2618, + 2696, + 2929, + 3129, + 3393, + 3656, + 4487, + 4825, + 4850 + ], + "errorMessage": "invalid number of bytes for (len+utf8[])" + }, + { + "pc": [ + 1016, + 1144, + 1241, + 1321, + 1435, + 1495, + 1506, + 1517, + 2011, + 2076, + 2088, + 2100 + ], + "errorMessage": "invalid number of bytes for bool8" + }, + { + "pc": [ + 615, + 1135, + 1232, + 1401, + 1454, + 1464, + 1822, + 1973, + 2033, + 2044, + 3103, + 3848, + 3859, + 4836, + 4861, + 5146 + ], + "errorMessage": "invalid number of bytes for uint64" + }, + { + "pc": [ + 1446, + 2025 + ], + "errorMessage": "invalid number of bytes for uint8" + }, + { + "pc": [ + 596, + 607, + 785, + 816, + 1008, + 1157, + 1411, + 1832, + 1986, + 3116, + 3822, + 3998 + ], + "errorMessage": "invalid number of bytes for uint8[32]" + }, + { + "pc": [ + 1185 + ], + "errorMessage": "invalid number of bytes for uint8[4]" + }, + { + "pc": [ + 6364 + ], + "errorMessage": "invalid oncomplete must be no op" + }, + { + "pc": [ + 3283 + ], + "errorMessage": "invalid payment" + }, + { + "pc": [ + 6378 + ], + "errorMessage": "invalid sender app id" + }, + { + "pc": [ + 6370 + ], + "errorMessage": "invalid sender must be this app id" + }, + { + "pc": [ + 1643, + 2249 + ], + "errorMessage": "invalid size" + }, + { + "pc": [ + 6416 + ], + "errorMessage": "malformed method offsets" + }, + { + "pc": [ + 1653, + 2259, + 3959, + 4413, + 4449, + 4569, + 4646 + ], + "errorMessage": "max array length exceeded" + }, + { + "pc": [ + 6569 + ], + "errorMessage": "method on cooldown" + }, + { + "pc": [ + 1112, + 6239 + ], + "errorMessage": "missing rekey back" + }, + { + "pc": [ + 793 + ], + "errorMessage": "only admin can change the admin account" + }, + { + "pc": [ + 1890, + 2463, + 2478, + 3197, + 5599, + 6183 + ], + "errorMessage": "plugin does not exist" + }, + { + "pc": [ + 6188, + 6399 + ], + "errorMessage": "plugin expired" + }, + { + "pc": [ + 6192, + 6402 + ], + "errorMessage": "plugin on cooldown" + }, + { + "pc": [ + 852 + ], + "errorMessage": "sender must be admin plugin" + }, + { + "pc": [ + 633 + ], + "errorMessage": "sender must be either controlledAddress or admin" + }, + { + "pc": [ + 3164 + ], + "errorMessage": "transaction type is pay" + }, + { + "pc": [ + 1561, + 2158 + ], + "errorMessage": "using execution key requires global plugin" + } + ], + "pcOffsetMethod": "none" + }, + "clear": { + "sourceInfo": [], + "pcOffsetMethod": "none" + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDIgOCA0MDAgMjE3MDAgMjc3MDAKICAgIGJ5dGVjYmxvY2sgImNvbnRyb2xsZWRfYWRkcmVzcyIgIiIgImFkbWluIiAibGFzdF91c2VyX2ludGVyYWN0aW9uIiAicCIgImUiICJsYXN0X2NoYW5nZSIgMHgxNTFmN2M3NSAieCIgMHgwMCAweDAwMDAgInNwZW5kaW5nX2FkZHJlc3MiIDB4MDAyYSAweDAwMGEgImEiIDB4MDEgIm4iICJyZWtleV9pbmRleCIgImVzY3Jvd19mYWN0b3J5IiAiY3VycmVudF9wbHVnaW4iIDB4MDAwMiAweDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAweDZjYzNmNjA2IDB4MDAyYwogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMwCiAgICAvLyByZWtleUluZGV4ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCwga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNSZWtleUluZGV4IH0pCiAgICBieXRlYyAxNyAvLyAicmVrZXlfaW5kZXgiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEzCiAgICAvLyBleHBvcnQgY2xhc3MgQWJzdHJhY3RlZEFjY291bnQgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJ6IG1haW5fY3JlYXRlX05vT3BAMzQKICAgIHB1c2hieXRlc3MgMHhiZDYwOTllNSAweGQyNGI3NTU2IDB4MTQ3YjZjZDYgMHgxM2JjNDRlNCAvLyBtZXRob2QgInJlZ2lzdGVyKHN0cmluZyl2b2lkIiwgbWV0aG9kICJhcmM1OF9jaGFuZ2VBZG1pbihhZGRyZXNzKXZvaWQiLCBtZXRob2QgImFyYzU4X3BsdWdpbkNoYW5nZUFkbWluKGFkZHJlc3Mpdm9pZCIsIG1ldGhvZCAiYXJjNThfZ2V0QWRtaW4oKWFkZHJlc3MiCiAgICBieXRlYyAyMiAvLyBtZXRob2QgImFyYzU4X3ZlcmlmeUF1dGhBZGRyZXNzKCl2b2lkIgogICAgcHVzaGJ5dGVzcyAweGM5NWE1ZDNkIDB4NDcyN2FmMjEgMHg1ODJmZjM4MiAweGRlZmQ1Y2QyIDB4YjNjODBkZjkgMHhlZWY0NDhmZCAweDM4ZjU5MWVhIDB4ZTM1MGI5ZDQgMHgwYThjYjJjMiAweDI1YjcxM2NhIDB4ZWJhZjE0YTAgMHgxZmRhM2I0ZiAweDlkM2Y4OTE4IDB4YmY0ZDdjNTcgMHhkNWRkMzgyYiAweDVjZWJlZDQzIDB4ZDU4Njg1YWYgMHg3YzM3MTU2ZSAweGFmZmFhNGU4IDB4YTI0MDNkZGYgMHgwMmZlNDUxNSAweDQxYmRjNjgwIDB4NTBmM2UzNWMgLy8gbWV0aG9kICJhcmM1OF9yZWtleVRvKGFkZHJlc3MsYm9vbCl2b2lkIiwgbWV0aG9kICJhcmM1OF9jYW5DYWxsKHVpbnQ2NCxib29sLGFkZHJlc3Msc3RyaW5nLGJ5dGVbNF0pYm9vbCIsIG1ldGhvZCAiYXJjNThfcmVrZXlUb1BsdWdpbih1aW50NjQsYm9vbCxzdHJpbmcsdWludDY0W10sKHVpbnQ2NCx1aW50NjQpW10pdm9pZCIsIG1ldGhvZCAiYXJjNThfcmVrZXlUb05hbWVkUGx1Z2luKHN0cmluZyxib29sLHN0cmluZyx1aW50NjRbXSwodWludDY0LHVpbnQ2NClbXSl2b2lkIiwgbWV0aG9kICJhcmM1OF9hZGRQbHVnaW4odWludDY0LGFkZHJlc3Msc3RyaW5nLGJvb2wsdWludDgsdWludDY0LHVpbnQ2NCwoYnl0ZVs0XSx1aW50NjQpW10sYm9vbCxib29sLGJvb2wpdm9pZCIsIG1ldGhvZCAiYXJjNThfcmVtb3ZlUGx1Z2luKHVpbnQ2NCxhZGRyZXNzLHN0cmluZyl2b2lkIiwgbWV0aG9kICJhcmM1OF9hZGROYW1lZFBsdWdpbihzdHJpbmcsdWludDY0LGFkZHJlc3Msc3RyaW5nLGJvb2wsdWludDgsdWludDY0LHVpbnQ2NCwoYnl0ZVs0XSx1aW50NjQpW10sYm9vbCxib29sLGJvb2wpdm9pZCIsIG1ldGhvZCAiYXJjNThfcmVtb3ZlTmFtZWRQbHVnaW4oc3RyaW5nKXZvaWQiLCBtZXRob2QgImFyYzU4X25ld0VzY3JvdyhzdHJpbmcpdWludDY0IiwgbWV0aG9kICJhcmM1OF90b2dnbGVFc2Nyb3dMb2NrKHN0cmluZykodWludDY0LGJvb2wpIiwgbWV0aG9kICJhcmM1OF9yZWNsYWltKHN0cmluZywodWludDY0LHVpbnQ2NCxib29sKVtdKXZvaWQiLCBtZXRob2QgImFyYzU4X29wdGluRXNjcm93KHN0cmluZyx1aW50NjRbXSl2b2lkIiwgbWV0aG9kICJhcmM1OF9wbHVnaW5PcHRpbkVzY3Jvdyh1aW50NjQsYWRkcmVzcyxzdHJpbmcsdWludDY0W10scGF5KXZvaWQiLCBtZXRob2QgImFyYzU4X2FkZEFsbG93YW5jZXMoc3RyaW5nLCh1aW50NjQsdWludDgsdWludDY0LHVpbnQ2NCx1aW50NjQsYm9vbClbXSl2b2lkIiwgbWV0aG9kICJhcmM1OF9yZW1vdmVBbGxvd2FuY2VzKHN0cmluZyx1aW50NjRbXSl2b2lkIiwgbWV0aG9kICJhcmM1OF9hZGRFeGVjdXRpb25LZXkoYnl0ZVszMl0sYnl0ZVszMl1bXSx1aW50NjQsdWludDY0KXZvaWQiLCBtZXRob2QgImFyYzU4X3JlbW92ZUV4ZWN1dGlvbktleShieXRlWzMyXSl2b2lkIiwgbWV0aG9kICJhcmM1OF9nZXRQbHVnaW5zKCh1aW50NjQsYWRkcmVzcyxzdHJpbmcpW10pKHVpbnQ2NCx1aW50OCx1aW50NjQsdWludDY0LChieXRlWzRdLHVpbnQ2NCx1aW50NjQpW10sYm9vbCxib29sLGJvb2wsdWludDY0LHVpbnQ2NClbXSIsIG1ldGhvZCAiYXJjNThfZ2V0TmFtZWRQbHVnaW5zKHN0cmluZ1tdKSh1aW50NjQsdWludDgsdWludDY0LHVpbnQ2NCwoYnl0ZVs0XSx1aW50NjQsdWludDY0KVtdLGJvb2wsYm9vbCxib29sLHVpbnQ2NCx1aW50NjQpW10iLCBtZXRob2QgImFyYzU4X2dldEVzY3Jvd3Moc3RyaW5nW10pKHVpbnQ2NCxib29sKVtdIiwgbWV0aG9kICJhcmM1OF9nZXRBbGxvd2FuY2VzKHN0cmluZyx1aW50NjRbXSkodWludDgsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsYm9vbClbXSIsIG1ldGhvZCAiYXJjNThfZ2V0RXhlY3V0aW9ucyhieXRlWzMyXVtdKShieXRlWzMyXVtdLHVpbnQ2NCx1aW50NjQpW10iLCBtZXRob2QgIm1icihzdHJpbmcsdWludDY0LHN0cmluZyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsYm9vbCx1aW50NjQpIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggcmVnaXN0ZXIgYXJjNThfY2hhbmdlQWRtaW4gYXJjNThfcGx1Z2luQ2hhbmdlQWRtaW4gYXJjNThfZ2V0QWRtaW4gYXJjNThfdmVyaWZ5QXV0aEFkZHJlc3MgYXJjNThfcmVrZXlUbyBhcmM1OF9jYW5DYWxsIGFyYzU4X3Jla2V5VG9QbHVnaW4gYXJjNThfcmVrZXlUb05hbWVkUGx1Z2luIGFyYzU4X2FkZFBsdWdpbiBhcmM1OF9yZW1vdmVQbHVnaW4gYXJjNThfYWRkTmFtZWRQbHVnaW4gYXJjNThfcmVtb3ZlTmFtZWRQbHVnaW4gYXJjNThfbmV3RXNjcm93IGFyYzU4X3RvZ2dsZUVzY3Jvd0xvY2sgYXJjNThfcmVjbGFpbSBhcmM1OF9vcHRpbkVzY3JvdyBhcmM1OF9wbHVnaW5PcHRpbkVzY3JvdyBhcmM1OF9hZGRBbGxvd2FuY2VzIGFyYzU4X3JlbW92ZUFsbG93YW5jZXMgYXJjNThfYWRkRXhlY3V0aW9uS2V5IGFyYzU4X3JlbW92ZUV4ZWN1dGlvbktleSBhcmM1OF9nZXRQbHVnaW5zIGFyYzU4X2dldE5hbWVkUGx1Z2lucyBhcmM1OF9nZXRFc2Nyb3dzIGFyYzU4X2dldEFsbG93YW5jZXMgYXJjNThfZ2V0RXhlY3V0aW9ucyBtYnIKICAgIGVycgoKbWFpbl9jcmVhdGVfTm9PcEAzNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMwogICAgLy8gZXhwb3J0IGNsYXNzIEFic3RyYWN0ZWRBY2NvdW50IGV4dGVuZHMgQ29udHJhY3QgewogICAgcHVzaGJ5dGVzIDB4ZTE4MzYyZTIgLy8gbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbihhZGRyZXNzLGFkZHJlc3MsdWludDY0KXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBjcmVhdGVBcHBsaWNhdGlvbgogICAgZXJyCgoKLy8gX3B1eWFfbGliLmFyYzQuZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50KGFycmF5X2l0ZW1zX2NvdW50OiB1aW50NjQsIGFycmF5X2hlYWRfYW5kX3RhaWw6IGJ5dGVzLCBuZXdfaXRlbXNfY291bnQ6IHVpbnQ2NCwgbmV3X2hlYWRfYW5kX3RhaWw6IGJ5dGVzKSAtPiBieXRlczoKZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50OgogICAgcHJvdG8gNCAxCiAgICBieXRlY18xIC8vICIiCiAgICBkdXAKICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGZyYW1lX2RpZyAtNAogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGludGNfMCAvLyAwCgpkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnRfZm9yX2hlYWRlckAxOgogICAgZnJhbWVfZGlnIDQKICAgIGZyYW1lX2RpZyAzCiAgICA8CiAgICBieiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnRfYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgY292ZXIgMgogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2RpZyAyCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIDEKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfYnVyeSAxCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZnJhbWVfYnVyeSA0CiAgICBiIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9mb3JfaGVhZGVyQDEKCmR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9hZnRlcl9mb3JANDoKICAgIGZyYW1lX2RpZyAtMwogICAgbGVuCiAgICBmcmFtZV9idXJ5IDAKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDQKCmR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9mb3JfaGVhZGVyQDU6CiAgICBmcmFtZV9kaWcgNAogICAgZnJhbWVfZGlnIDIKICAgIDwKICAgIGJ6IGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9hZnRlcl9mb3JAOAogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgNAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfZGlnIDAKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgMQogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDEKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBmcmFtZV9idXJ5IDQKICAgIGIgZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50X2Zvcl9oZWFkZXJANQoKZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50X2FmdGVyX2ZvckA4OgogICAgZnJhbWVfZGlnIC00CiAgICBmcmFtZV9kaWcgLTIKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgMQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMAogICAgc3Vic3RyaW5nMwogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgMgogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5jcmVhdGVBcHBsaWNhdGlvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmNyZWF0ZUFwcGxpY2F0aW9uOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQwOQogICAgLy8gQGFiaW1ldGhvZCh7IG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cG4gMgogICAgbGVuCiAgICBwdXNoaW50IDMyIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50OFszMl0KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgY292ZXIgMgogICAgbGVuCiAgICBwdXNoaW50IDMyIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50OFszMl0KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDEyCiAgICAvLyBUeG4uc2VuZGVyID09PSBjb250cm9sbGVkQWRkcmVzcy5uYXRpdmUKICAgIHR4biBTZW5kZXIKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDEyLTQxMwogICAgLy8gVHhuLnNlbmRlciA9PT0gY29udHJvbGxlZEFkZHJlc3MubmF0aXZlCiAgICAvLyB8fCBUeG4uc2VuZGVyID09PSBhZG1pbi5uYXRpdmUsCiAgICBibnogY3JlYXRlQXBwbGljYXRpb25fYm9vbF90cnVlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0MTMKICAgIC8vIHx8IFR4bi5zZW5kZXIgPT09IGFkbWluLm5hdGl2ZSwKICAgIHR4biBTZW5kZXIKICAgIGRpZyAyCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQxMi00MTMKICAgIC8vIFR4bi5zZW5kZXIgPT09IGNvbnRyb2xsZWRBZGRyZXNzLm5hdGl2ZQogICAgLy8gfHwgVHhuLnNlbmRlciA9PT0gYWRtaW4ubmF0aXZlLAogICAgYnogY3JlYXRlQXBwbGljYXRpb25fYm9vbF9mYWxzZUA0CgpjcmVhdGVBcHBsaWNhdGlvbl9ib29sX3RydWVAMzoKICAgIGludGNfMSAvLyAxCgpjcmVhdGVBcHBsaWNhdGlvbl9ib29sX21lcmdlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDExLTQxNQogICAgLy8gYXNzZXJ0KAogICAgLy8gICBUeG4uc2VuZGVyID09PSBjb250cm9sbGVkQWRkcmVzcy5uYXRpdmUKICAgIC8vICAgfHwgVHhuLnNlbmRlciA9PT0gYWRtaW4ubmF0aXZlLAogICAgLy8gICBFUlJfU0VOREVSX01VU1RfQkVfQURNSU5fT1JfQ09OVFJPTExFRF9BRERSRVNTCiAgICAvLyApOwogICAgYXNzZXJ0IC8vIHNlbmRlciBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkQWRkcmVzcyBvciBhZG1pbgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQxNgogICAgLy8gYXNzZXJ0KGFkbWluICE9PSBjb250cm9sbGVkQWRkcmVzcyk7CiAgICBkaWcgMQogICAgZHVwCiAgICBkaWcgNAogICAgZHVwCiAgICBjb3ZlciAzCiAgICAhPQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIGFkbWluID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0FkbWluIH0pCiAgICBieXRlY18yIC8vICJhZG1pbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0MTgKICAgIC8vIHRoaXMuYWRtaW4udmFsdWUgPSBhZG1pbi5uYXRpdmU7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQxOQogICAgLy8gdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSA9IGNvbnRyb2xsZWRBZGRyZXNzLm5hdGl2ZSA9PT0gR2xvYmFsLnplcm9BZGRyZXNzID8gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MgOiBjb250cm9sbGVkQWRkcmVzcy5uYXRpdmU7CiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgID09CiAgICBieiBjcmVhdGVBcHBsaWNhdGlvbl90ZXJuYXJ5X2ZhbHNlQDcKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgpjcmVhdGVBcHBsaWNhdGlvbl90ZXJuYXJ5X21lcmdlQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGNvbnRyb2xsZWRBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0NvbnRyb2xsZWRBZGRyZXNzIH0pOwogICAgYnl0ZWNfMCAvLyAiY29udHJvbGxlZF9hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQxOQogICAgLy8gdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSA9IGNvbnRyb2xsZWRBZGRyZXNzLm5hdGl2ZSA9PT0gR2xvYmFsLnplcm9BZGRyZXNzID8gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MgOiBjb250cm9sbGVkQWRkcmVzcy5uYXRpdmU7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI0CiAgICAvLyBlc2Nyb3dGYWN0b3J5ID0gR2xvYmFsU3RhdGU8QXBwbGljYXRpb24+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNFc2Nyb3dGYWN0b3J5IH0pCiAgICBieXRlYyAxOCAvLyAiZXNjcm93X2ZhY3RvcnkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDIwCiAgICAvLyB0aGlzLmVzY3Jvd0ZhY3RvcnkudmFsdWUgPSBlc2Nyb3dGYWN0b3J5OwogICAgZGlnIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjYKICAgIC8vIHNwZW5kaW5nQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNTcGVuZGluZ0FkZHJlc3MgfSkKICAgIGJ5dGVjIDExIC8vICJzcGVuZGluZ19hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQyMQogICAgLy8gdGhpcy5zcGVuZGluZ0FkZHJlc3MudmFsdWUgPSBHbG9iYWwuemVyb0FkZHJlc3M7CiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIGxhc3RVc2VySW50ZXJhY3Rpb24gPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNMYXN0VXNlckludGVyYWN0aW9uIH0pCiAgICBieXRlY18zIC8vICJsYXN0X3VzZXJfaW50ZXJhY3Rpb24iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHRoaXMubGFzdFVzZXJJbnRlcmFjdGlvbi52YWx1ZSA9IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjIKICAgIC8vIGxhc3RDaGFuZ2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNMYXN0Q2hhbmdlIH0pCiAgICBieXRlYyA2IC8vICJsYXN0X2NoYW5nZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0OAogICAgLy8gdGhpcy5sYXN0Q2hhbmdlLnZhbHVlID0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0MDkKICAgIC8vIEBhYmltZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgpjcmVhdGVBcHBsaWNhdGlvbl90ZXJuYXJ5X2ZhbHNlQDc6CiAgICBkaWcgMgogICAgYiBjcmVhdGVBcHBsaWNhdGlvbl90ZXJuYXJ5X21lcmdlQDgKCmNyZWF0ZUFwcGxpY2F0aW9uX2Jvb2xfZmFsc2VANDoKICAgIGludGNfMCAvLyAwCiAgICBiIGNyZWF0ZUFwcGxpY2F0aW9uX2Jvb2xfbWVyZ2VANQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQucmVnaXN0ZXJbcm91dGluZ10oKSAtPiB2b2lkOgpyZWdpc3RlcjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0MzEKICAgIC8vIHJlZ2lzdGVyKGVzY3Jvdzogc3RyaW5nKTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdXRmOFtdKQogICAgZXh0cmFjdCAyIDAKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQzMgogICAgLy8gbGV0IGFwcDogdWludDY0ID0gMAogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0MzMKICAgIC8vIGlmIChlc2Nyb3cgIT09ICcnKSB7CiAgICBieXRlY18xIC8vICIiCiAgICAhPQogICAgYnogcmVnaXN0ZXJfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzcKICAgIC8vIGVzY3Jvd3MgPSBCb3hNYXA8c3RyaW5nLCBFc2Nyb3dJbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4RXNjcm93cyB9KQogICAgYnl0ZWMgNSAvLyAiZSIKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0MzQKICAgIC8vIGFzc2VydCh0aGlzLmVzY3Jvd3MoZXNjcm93KS5leGlzdHMsIEVSUl9FU0NST1dfRE9FU19OT1RfRVhJU1QpCiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGVzY3JvdyBkb2VzIG5vdCBleGlzdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQzNQogICAgLy8gYXBwID0gdGhpcy5lc2Nyb3dzKGVzY3JvdykudmFsdWUuaWQKICAgIGJveF9nZXQKICAgIHBvcAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICBidXJ5IDEKCnJlZ2lzdGVyX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0MzgtNDQ3CiAgICAvLyBhYmlDYWxsPHR5cGVvZiBFc2Nyb3dGYWN0b3J5LnByb3RvdHlwZS5yZWdpc3Rlcj4oewogICAgLy8gICBhcHBJZDogdGhpcy5lc2Nyb3dGYWN0b3J5LnZhbHVlLAogICAgLy8gICBhcmdzOiBbCiAgICAvLyAgICAgaXR4bi5wYXltZW50KHsKICAgIC8vICAgICAgIHJlY2VpdmVyOiB0aGlzLmVzY3Jvd0ZhY3RvcnkudmFsdWUuYWRkcmVzcywKICAgIC8vICAgICAgIGFtb3VudDogQVJDNThXYWxsZXRJRHNCeUFjY291bnRzTWJyCiAgICAvLyAgICAgfSksCiAgICAvLyAgICAgYXBwCiAgICAvLyAgIF0KICAgIC8vIH0pCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDQyCiAgICAvLyByZWNlaXZlcjogdGhpcy5lc2Nyb3dGYWN0b3J5LnZhbHVlLmFkZHJlc3MsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI0CiAgICAvLyBlc2Nyb3dGYWN0b3J5ID0gR2xvYmFsU3RhdGU8QXBwbGljYXRpb24+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNFc2Nyb3dGYWN0b3J5IH0pCiAgICBieXRlYyAxOCAvLyAiZXNjcm93X2ZhY3RvcnkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDQyCiAgICAvLyByZWNlaXZlcjogdGhpcy5lc2Nyb3dGYWN0b3J5LnZhbHVlLmFkZHJlc3MsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZHVwCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDQzCiAgICAvLyBhbW91bnQ6IEFSQzU4V2FsbGV0SURzQnlBY2NvdW50c01icgogICAgcHVzaGludCAxMjEwMCAvLyAxMjEwMAogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NDEtNDQ0CiAgICAvLyBpdHhuLnBheW1lbnQoewogICAgLy8gICByZWNlaXZlcjogdGhpcy5lc2Nyb3dGYWN0b3J5LnZhbHVlLmFkZHJlc3MsCiAgICAvLyAgIGFtb3VudDogQVJDNThXYWxsZXRJRHNCeUFjY291bnRzTWJyCiAgICAvLyB9KSwKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0MzgtNDQ3CiAgICAvLyBhYmlDYWxsPHR5cGVvZiBFc2Nyb3dGYWN0b3J5LnByb3RvdHlwZS5yZWdpc3Rlcj4oewogICAgLy8gICBhcHBJZDogdGhpcy5lc2Nyb3dGYWN0b3J5LnZhbHVlLAogICAgLy8gICBhcmdzOiBbCiAgICAvLyAgICAgaXR4bi5wYXltZW50KHsKICAgIC8vICAgICAgIHJlY2VpdmVyOiB0aGlzLmVzY3Jvd0ZhY3RvcnkudmFsdWUuYWRkcmVzcywKICAgIC8vICAgICAgIGFtb3VudDogQVJDNThXYWxsZXRJRHNCeUFjY291bnRzTWJyCiAgICAvLyAgICAgfSksCiAgICAvLyAgICAgYXBwCiAgICAvLyAgIF0KICAgIC8vIH0pCiAgICBpdHhuX25leHQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NDUKICAgIC8vIGFwcAogICAgZGlnIDEKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0MzgtNDQ3CiAgICAvLyBhYmlDYWxsPHR5cGVvZiBFc2Nyb3dGYWN0b3J5LnByb3RvdHlwZS5yZWdpc3Rlcj4oewogICAgLy8gICBhcHBJZDogdGhpcy5lc2Nyb3dGYWN0b3J5LnZhbHVlLAogICAgLy8gICBhcmdzOiBbCiAgICAvLyAgICAgaXR4bi5wYXltZW50KHsKICAgIC8vICAgICAgIHJlY2VpdmVyOiB0aGlzLmVzY3Jvd0ZhY3RvcnkudmFsdWUuYWRkcmVzcywKICAgIC8vICAgICAgIGFtb3VudDogQVJDNThXYWxsZXRJRHNCeUFjY291bnRzTWJyCiAgICAvLyAgICAgfSksCiAgICAvLyAgICAgYXBwCiAgICAvLyAgIF0KICAgIC8vIH0pCiAgICBwdXNoYnl0ZXMgMHg2MDdlNzA0NiAvLyBtZXRob2QgInJlZ2lzdGVyKHBheSx1aW50NjQpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQzMQogICAgLy8gcmVnaXN0ZXIoZXNjcm93OiBzdHJpbmcpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X2NoYW5nZUFkbWluW3JvdXRpbmddKCkgLT4gdm9pZDoKYXJjNThfY2hhbmdlQWRtaW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDU1CiAgICAvLyBhcmM1OF9jaGFuZ2VBZG1pbihuZXdBZG1pbjogQWRkcmVzcyk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ4WzMyXQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ1NgogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuYWRtaW4udmFsdWUsIEVSUl9PTkxZX0FETUlOX0NBTl9DSEFOR0VfQURNSU4pOwogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNgogICAgLy8gYWRtaW4gPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQWRtaW4gfSkKICAgIGJ5dGVjXzIgLy8gImFkbWluIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ1NgogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuYWRtaW4udmFsdWUsIEVSUl9PTkxZX0FETUlOX0NBTl9DSEFOR0VfQURNSU4pOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gb25seSBhZG1pbiBjYW4gY2hhbmdlIHRoZSBhZG1pbiBhY2NvdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIGFkbWluID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0FkbWluIH0pCiAgICBieXRlY18yIC8vICJhZG1pbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NTcKICAgIC8vIHRoaXMuYWRtaW4udmFsdWUgPSBuZXdBZG1pbi5uYXRpdmU7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyBsYXN0VXNlckludGVyYWN0aW9uID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzTGFzdFVzZXJJbnRlcmFjdGlvbiB9KQogICAgYnl0ZWNfMyAvLyAibGFzdF91c2VyX2ludGVyYWN0aW9uIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyB0aGlzLmxhc3RVc2VySW50ZXJhY3Rpb24udmFsdWUgPSBHbG9iYWwubGF0ZXN0VGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIyCiAgICAvLyBsYXN0Q2hhbmdlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzTGFzdENoYW5nZSB9KQogICAgYnl0ZWMgNiAvLyAibGFzdF9jaGFuZ2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIHRoaXMubGFzdENoYW5nZS52YWx1ZSA9IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDU1CiAgICAvLyBhcmM1OF9jaGFuZ2VBZG1pbihuZXdBZG1pbjogQWRkcmVzcyk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcGx1Z2luQ2hhbmdlQWRtaW5bcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF9wbHVnaW5DaGFuZ2VBZG1pbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NzAKICAgIC8vIGFyYzU4X3BsdWdpbkNoYW5nZUFkbWluKG5ld0FkbWluOiBBZGRyZXNzKTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDhbMzJdCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDcxCiAgICAvLyBjb25zdCBrZXkgPSBjbG9uZSh0aGlzLmN1cnJlbnRQbHVnaW4udmFsdWUpCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI4CiAgICAvLyBjdXJyZW50UGx1Z2luID0gR2xvYmFsU3RhdGU8UGx1Z2luS2V5Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ3VycmVudFBsdWdpbiB9KQogICAgYnl0ZWMgMTkgLy8gImN1cnJlbnRfcGx1Z2luIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ3MQogICAgLy8gY29uc3Qga2V5ID0gY2xvbmUodGhpcy5jdXJyZW50UGx1Z2luLnZhbHVlKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NzIKICAgIC8vIGNvbnN0IHsgcGx1Z2luLCBlc2Nyb3cgfSA9IGtleQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIGRpZyAxCiAgICBwdXNoaW50IDQwIC8vIDQwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDIKICAgIGxlbgogICAgZGlnIDMKICAgIGNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDc0CiAgICAvLyBhc3NlcnQoZXNjcm93ID09PSAnJywgRVJSX0FETUlOX1BMVUdJTlNfQ0FOTk9UX1VTRV9FU0NST1dTKTsKICAgIGJ5dGVjXzEgLy8gIiIKICAgID09CiAgICBhc3NlcnQgLy8gYWRtaW4gcGx1Z2lucyBjYW5ub3QgdXNlIGVzY3Jvd3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NzUKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSBBcHBsaWNhdGlvbihwbHVnaW4pLmFkZHJlc3MsIEVSUl9TRU5ERVJfTVVTVF9CRV9BRE1JTl9QTFVHSU4pOwogICAgdHhuIFNlbmRlcgogICAgZGlnIDEKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gc2VuZGVyIG11c3QgYmUgYWRtaW4gcGx1Z2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDc3CiAgICAvLyB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLmF1dGhBZGRyZXNzID09PSBBcHBsaWNhdGlvbihwbHVnaW4pLmFkZHJlc3MsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBjb250cm9sbGVkQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNDb250cm9sbGVkQWRkcmVzcyB9KTsKICAgIGJ5dGVjXzAgLy8gImNvbnRyb2xsZWRfYWRkcmVzcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NzcKICAgIC8vIHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUuYXV0aEFkZHJlc3MgPT09IEFwcGxpY2F0aW9uKHBsdWdpbikuYWRkcmVzcywKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEF1dGhBZGRyCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIHN3YXAKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDc2LTQ3OQogICAgLy8gYXNzZXJ0KAogICAgLy8gICB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLmF1dGhBZGRyZXNzID09PSBBcHBsaWNhdGlvbihwbHVnaW4pLmFkZHJlc3MsCiAgICAvLyAgICdUaGlzIHBsdWdpbiBpcyBub3QgaW4gY29udHJvbCBvZiB0aGUgYWNjb3VudCcKICAgIC8vICk7CiAgICBhc3NlcnQgLy8gVGhpcyBwbHVnaW4gaXMgbm90IGluIGNvbnRyb2wgb2YgdGhlIGFjY291bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozMwogICAgLy8gcGx1Z2lucyA9IEJveE1hcDxQbHVnaW5LZXksIFBsdWdpbkluZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhQbHVnaW5zIH0pOwogICAgYnl0ZWMgNCAvLyAicCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDgyCiAgICAvLyB0aGlzLnBsdWdpbnMoa2V5KS5leGlzdHMgJiYgdGhpcy5wbHVnaW5zKGtleSkudmFsdWUuYWRtaW4sCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJ6IGFyYzU4X3BsdWdpbkNoYW5nZUFkbWluX2Jvb2xfZmFsc2VANAogICAgZHVwCiAgICBwdXNoaW50IDI3IC8vIDI3CiAgICBpbnRjXzEgLy8gMQogICAgYm94X2V4dHJhY3QKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIGJ6IGFyYzU4X3BsdWdpbkNoYW5nZUFkbWluX2Jvb2xfZmFsc2VANAogICAgaW50Y18xIC8vIDEKCmFyYzU4X3BsdWdpbkNoYW5nZUFkbWluX2Jvb2xfbWVyZ2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0ODEtNDg0CiAgICAvLyBhc3NlcnQoCiAgICAvLyAgIHRoaXMucGx1Z2lucyhrZXkpLmV4aXN0cyAmJiB0aGlzLnBsdWdpbnMoa2V5KS52YWx1ZS5hZG1pbiwKICAgIC8vICAgJ1RoaXMgcGx1Z2luIGRvZXMgbm90IGhhdmUgYWRtaW4gcHJpdmlsZWdlcycKICAgIC8vICk7CiAgICBhc3NlcnQgLy8gVGhpcyBwbHVnaW4gZG9lcyBub3QgaGF2ZSBhZG1pbiBwcml2aWxlZ2VzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIGFkbWluID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0FkbWluIH0pCiAgICBieXRlY18yIC8vICJhZG1pbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0ODYKICAgIC8vIHRoaXMuYWRtaW4udmFsdWUgPSBuZXdBZG1pbi5uYXRpdmU7CiAgICBkaWcgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0ODcKICAgIC8vIGlmICh0aGlzLnBsdWdpbnMoa2V5KS52YWx1ZS5kZWxlZ2F0aW9uVHlwZSA9PT0gRGVsZWdhdGlvblR5cGVTZWxmKSB7CiAgICBkdXAKICAgIGludGNfMyAvLyA4CiAgICBpbnRjXzEgLy8gMQogICAgYm94X2V4dHJhY3QKICAgIGJ5dGVjIDE1IC8vIDB4MDEKICAgID09CiAgICBieiBhcmM1OF9wbHVnaW5DaGFuZ2VBZG1pbl9hZnRlcl9pZl9lbHNlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gbGFzdFVzZXJJbnRlcmFjdGlvbiA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0xhc3RVc2VySW50ZXJhY3Rpb24gfSkKICAgIGJ5dGVjXzMgLy8gImxhc3RfdXNlcl9pbnRlcmFjdGlvbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NAogICAgLy8gdGhpcy5sYXN0VXNlckludGVyYWN0aW9uLnZhbHVlID0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgYXBwX2dsb2JhbF9wdXQKCmFyYzU4X3BsdWdpbkNoYW5nZUFkbWluX2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMgogICAgLy8gbGFzdENoYW5nZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0xhc3RDaGFuZ2UgfSkKICAgIGJ5dGVjIDYgLy8gImxhc3RfY2hhbmdlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyB0aGlzLmxhc3RDaGFuZ2UudmFsdWUgPSBHbG9iYWwubGF0ZXN0VGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ3MAogICAgLy8gYXJjNThfcGx1Z2luQ2hhbmdlQWRtaW4obmV3QWRtaW46IEFkZHJlc3MpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmFyYzU4X3BsdWdpbkNoYW5nZUFkbWluX2Jvb2xfZmFsc2VANDoKICAgIGludGNfMCAvLyAwCiAgICBiIGFyYzU4X3BsdWdpbkNoYW5nZUFkbWluX2Jvb2xfbWVyZ2VANQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfZ2V0QWRtaW5bcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF9nZXRBZG1pbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0OTkKICAgIC8vIHJldHVybiBuZXcgQWRkcmVzcyh0aGlzLmFkbWluLnZhbHVlKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIGFkbWluID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0FkbWluIH0pCiAgICBieXRlY18yIC8vICJhZG1pbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0OTkKICAgIC8vIHJldHVybiBuZXcgQWRkcmVzcyh0aGlzLmFkbWluLnZhbHVlKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDk3CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGJ5dGVjIDcgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3ZlcmlmeUF1dGhBZGRyZXNzW3JvdXRpbmddKCkgLT4gdm9pZDoKYXJjNThfdmVyaWZ5QXV0aEFkZHJlc3M6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTA2CiAgICAvLyBhc3NlcnQodGhpcy5zcGVuZGluZ0FkZHJlc3MudmFsdWUuYXV0aEFkZHJlc3MgPT09IHRoaXMuZ2V0QXV0aEFkZHJlc3MoKSk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI2CiAgICAvLyBzcGVuZGluZ0FkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzU3BlbmRpbmdBZGRyZXNzIH0pCiAgICBieXRlYyAxMSAvLyAic3BlbmRpbmdfYWRkcmVzcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1MDYKICAgIC8vIGFzc2VydCh0aGlzLnNwZW5kaW5nQWRkcmVzcy52YWx1ZS5hdXRoQWRkcmVzcyA9PT0gdGhpcy5nZXRBdXRoQWRkcmVzcygpKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBkdXAKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QXV0aEFkZHIKICAgIHN3YXAKICAgIGNvdmVyIDIKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM5NwogICAgLy8gdGhpcy5zcGVuZGluZ0FkZHJlc3MudmFsdWUgPT09IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGNvbnRyb2xsZWRBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0NvbnRyb2xsZWRBZGRyZXNzIH0pOwogICAgYnl0ZWNfMCAvLyAiY29udHJvbGxlZF9hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM5NwogICAgLy8gdGhpcy5zcGVuZGluZ0FkZHJlc3MudmFsdWUgPT09IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM5Ny0zOTgKICAgIC8vIHRoaXMuc3BlbmRpbmdBZGRyZXNzLnZhbHVlID09PSB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlCiAgICAvLyAmJiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgYnogYXJjNThfdmVyaWZ5QXV0aEFkZHJlc3NfdGVybmFyeV9mYWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Mzk4CiAgICAvLyAmJiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29udHJvbGxlZEFkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ29udHJvbGxlZEFkZHJlc3MgfSk7CiAgICBieXRlY18wIC8vICJjb250cm9sbGVkX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Mzk4CiAgICAvLyAmJiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM5Ny0zOTgKICAgIC8vIHRoaXMuc3BlbmRpbmdBZGRyZXNzLnZhbHVlID09PSB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlCiAgICAvLyAmJiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgYnogYXJjNThfdmVyaWZ5QXV0aEFkZHJlc3NfdGVybmFyeV9mYWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Mzk5CiAgICAvLyApID8gR2xvYmFsLnplcm9BZGRyZXNzIDogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwoKYXJjNThfdmVyaWZ5QXV0aEFkZHJlc3NfdGVybmFyeV9tZXJnZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjUwNgogICAgLy8gYXNzZXJ0KHRoaXMuc3BlbmRpbmdBZGRyZXNzLnZhbHVlLmF1dGhBZGRyZXNzID09PSB0aGlzLmdldEF1dGhBZGRyZXNzKCkpOwogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNgogICAgLy8gc3BlbmRpbmdBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c1NwZW5kaW5nQWRkcmVzcyB9KQogICAgYnl0ZWMgMTEgLy8gInNwZW5kaW5nX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTA3CiAgICAvLyB0aGlzLnNwZW5kaW5nQWRkcmVzcy52YWx1ZSA9IEdsb2JhbC56ZXJvQWRkcmVzcwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjUwOAogICAgLy8gdGhpcy5jdXJyZW50UGx1Z2luLnZhbHVlID0geyBwbHVnaW46IDAsIGNhbGxlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsIGVzY3JvdzogJycgfQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGludGNfMCAvLyAwCiAgICBpdG9iCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDAwMmEwMDAwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyOAogICAgLy8gY3VycmVudFBsdWdpbiA9IEdsb2JhbFN0YXRlPFBsdWdpbktleT4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0N1cnJlbnRQbHVnaW4gfSkKICAgIGJ5dGVjIDE5IC8vICJjdXJyZW50X3BsdWdpbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1MDgKICAgIC8vIHRoaXMuY3VycmVudFBsdWdpbi52YWx1ZSA9IHsgcGx1Z2luOiAwLCBjYWxsZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLCBlc2Nyb3c6ICcnIH0KICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzAKICAgIC8vIHJla2V5SW5kZXggPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwLCBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c1Jla2V5SW5kZXggfSkKICAgIGJ5dGVjIDE3IC8vICJyZWtleV9pbmRleCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1MDkKICAgIC8vIHRoaXMucmVrZXlJbmRleC52YWx1ZSA9IDAKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjUwNQogICAgLy8gYXJjNThfdmVyaWZ5QXV0aEFkZHJlc3MoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgphcmM1OF92ZXJpZnlBdXRoQWRkcmVzc190ZXJuYXJ5X2ZhbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Mzk5CiAgICAvLyApID8gR2xvYmFsLnplcm9BZGRyZXNzIDogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBiIGFyYzU4X3ZlcmlmeUF1dGhBZGRyZXNzX3Rlcm5hcnlfbWVyZ2VANQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmFyYzU4X3Jla2V5VG86CiAgICBieXRlY18xIC8vICIiCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1MTgKICAgIC8vIGFyYzU4X3Jla2V5VG8oYWRkcmVzczogQWRkcmVzcywgZmxhc2g6IGJvb2xlYW4pOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDMyIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50OFszMl0KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYm9vbDgKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1MTkKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSB0aGlzLmFkbWluLnZhbHVlLCBFUlJfQURNSU5fT05MWSk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE2CiAgICAvLyBhZG1pbiA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNBZG1pbiB9KQogICAgYnl0ZWNfMiAvLyAiYWRtaW4iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTE5CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSwgRVJSX0FETUlOX09OTFkpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gYWRtaW4gb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjUyMS01MjgKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcjogYWRkcmVzcy5uYXRpdmUsCiAgICAvLyAgICAgcmVrZXlUbzogYWRkcmVzcy5uYXRpdmUsCiAgICAvLyAgICAgbm90ZTogJ3Jla2V5aW5nIGFic3RyYWN0ZWQgYWNjb3VudCcKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjUyMwogICAgLy8gc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29udHJvbGxlZEFkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ29udHJvbGxlZEFkZHJlc3MgfSk7CiAgICBieXRlY18wIC8vICJjb250cm9sbGVkX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTIzCiAgICAvLyBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjUyNgogICAgLy8gbm90ZTogJ3Jla2V5aW5nIGFic3RyYWN0ZWQgYWNjb3VudCcKICAgIHB1c2hieXRlcyAicmVrZXlpbmcgYWJzdHJhY3RlZCBhY2NvdW50IgogICAgaXR4bl9maWVsZCBOb3RlCiAgICBkaWcgMgogICAgaXR4bl9maWVsZCBSZWtleVRvCiAgICB1bmNvdmVyIDIKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTIxLTUyNwogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIHJlY2VpdmVyOiBhZGRyZXNzLm5hdGl2ZSwKICAgIC8vICAgICByZWtleVRvOiBhZGRyZXNzLm5hdGl2ZSwKICAgIC8vICAgICBub3RlOiAncmVrZXlpbmcgYWJzdHJhY3RlZCBhY2NvdW50JwogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjUyMS01MjgKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcjogYWRkcmVzcy5uYXRpdmUsCiAgICAvLyAgICAgcmVrZXlUbzogYWRkcmVzcy5uYXRpdmUsCiAgICAvLyAgICAgbm90ZTogJ3Jla2V5aW5nIGFic3RyYWN0ZWQgYWNjb3VudCcKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1MzAKICAgIC8vIGlmIChmbGFzaCkgdGhpcy5hc3NlcnRSZWtleXNCYWNrKCk7CiAgICBieiBhcmM1OF9yZWtleVRvX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE2MAogICAgLy8gbGV0IHJla2V5c0JhY2sgPSBmYWxzZTsKICAgIGludGNfMCAvLyAwCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNjEKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IChUeG4uZ3JvdXBJbmRleCArIDEpOyBpIDwgR2xvYmFsLmdyb3VwU2l6ZTsgaSArPSAxKSB7CiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgMgoKYXJjNThfcmVrZXlUb193aGlsZV90b3BANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNjEKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IChUeG4uZ3JvdXBJbmRleCArIDEpOyBpIDwgR2xvYmFsLmdyb3VwU2l6ZTsgaSArPSAxKSB7CiAgICBkaWcgMQogICAgZ2xvYmFsIEdyb3VwU2l6ZQogICAgPAogICAgYnogYXJjNThfcmVrZXlUb19ibG9ja0AxMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE2NAogICAgLy8gaWYgKHRoaXMudHhuUmVrZXlzQmFjayh0eG4pKSB7CiAgICBkaWcgMQogICAgY2FsbHN1YiB0eG5SZWtleXNCYWNrCiAgICBieiBhcmM1OF9yZWtleVRvX2FmdGVyX2lmX2Vsc2VAOQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE2NQogICAgLy8gcmVrZXlzQmFjayA9IHRydWU7CiAgICBpbnRjXzEgLy8gMQogICAgYnVyeSAxCgphcmM1OF9yZWtleVRvX2Jsb2NrQDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE3MAogICAgLy8gYXNzZXJ0KHJla2V5c0JhY2ssIEVSUl9NSVNTSU5HX1JFS0VZX0JBQ0spOwogICAgZHVwCiAgICBhc3NlcnQgLy8gbWlzc2luZyByZWtleSBiYWNrCgphcmM1OF9yZWtleVRvX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gbGFzdFVzZXJJbnRlcmFjdGlvbiA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0xhc3RVc2VySW50ZXJhY3Rpb24gfSkKICAgIGJ5dGVjXzMgLy8gImxhc3RfdXNlcl9pbnRlcmFjdGlvbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NAogICAgLy8gdGhpcy5sYXN0VXNlckludGVyYWN0aW9uLnZhbHVlID0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1MTgKICAgIC8vIGFyYzU4X3Jla2V5VG8oYWRkcmVzczogQWRkcmVzcywgZmxhc2g6IGJvb2xlYW4pOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmFyYzU4X3Jla2V5VG9fYWZ0ZXJfaWZfZWxzZUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE2MQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gKFR4bi5ncm91cEluZGV4ICsgMSk7IGkgPCBHbG9iYWwuZ3JvdXBTaXplOyBpICs9IDEpIHsKICAgIGRpZyAxCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAyCiAgICBiIGFyYzU4X3Jla2V5VG9fd2hpbGVfdG9wQDYKCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X2NhbkNhbGxbcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF9jYW5DYWxsOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU0NAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBib29sOAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBjb3ZlciAyCiAgICBsZW4KICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ4WzMyXQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICBzd2FwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGxlbgogICAgcHVzaGludCA0IC8vIDQKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ4WzRdCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTUyCiAgICAvLyBpZiAoZ2xvYmFsKSB7CiAgICBieiBhcmM1OF9jYW5DYWxsX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU1MwogICAgLy8gdGhpcy5wbHVnaW5DYWxsQWxsb3dlZChwbHVnaW4sIEdsb2JhbC56ZXJvQWRkcmVzcywgZXNjcm93LCBtZXRob2QpOwogICAgZGlnIDMKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgZGlnIDMKICAgIGRpZyAzCiAgICBjYWxsc3ViIHBsdWdpbkNhbGxBbGxvd2VkCiAgICBwb3AKCmFyYzU4X2NhbkNhbGxfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU1NQogICAgLy8gcmV0dXJuIHRoaXMucGx1Z2luQ2FsbEFsbG93ZWQocGx1Z2luLCBhZGRyZXNzLm5hdGl2ZSwgZXNjcm93LCBtZXRob2QpOwogICAgZGlnIDMKICAgIGRpZyAzCiAgICBkaWcgMwogICAgZGlnIDMKICAgIGNhbGxzdWIgcGx1Z2luQ2FsbEFsbG93ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1NDQKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgYnl0ZWMgOSAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjIDcgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5bcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF9yZWtleVRvUGx1Z2luOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU2Ny01NzMKICAgIC8vIGFyYzU4X3Jla2V5VG9QbHVnaW4oCiAgICAvLyAgIHBsdWdpbjogdWludDY0LAogICAgLy8gICBnbG9iYWw6IGJvb2xlYW4sCiAgICAvLyAgIGVzY3Jvdzogc3RyaW5nLAogICAgLy8gICBtZXRob2RPZmZzZXRzOiB1aW50NjRbXSwKICAgIC8vICAgZnVuZHNSZXF1ZXN0OiBGdW5kc1JlcXVlc3RbXQogICAgLy8gKTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBib29sOAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3VpbnQ2NFtdKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIHB1c2hpbnQgMTYgLy8gMTYKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuKyh1aW50NjQsdWludDY0KVtdKQogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW4KICAgIHBvcG4gMgogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb05hbWVkUGx1Z2luW3JvdXRpbmddKCkgLT4gdm9pZDoKYXJjNThfcmVrZXlUb05hbWVkUGx1Z2luOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjYxOS02MjQKICAgIC8vIGFyYzU4X3Jla2V5VG9OYW1lZFBsdWdpbigKICAgIC8vICAgbmFtZTogc3RyaW5nLAogICAgLy8gICBnbG9iYWw6IGJvb2xlYW4sCiAgICAvLyAgIGVzY3Jvdzogc3RyaW5nLAogICAgLy8gICBtZXRob2RPZmZzZXRzOiB1aW50NjRbXSwKICAgIC8vICAgZnVuZHNSZXF1ZXN0OiBGdW5kc1JlcXVlc3RbXSk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGJvb2w4CiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdXRmOFtdKQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzMgLy8gOAogICAgKgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdWludDY0W10pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgcHVzaGludCAxNiAvLyAxNgogICAgKgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rKHVpbnQ2NCx1aW50NjQpW10pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzUKICAgIC8vIG5hbWVkUGx1Z2lucyA9IEJveE1hcDxzdHJpbmcsIFBsdWdpbktleT4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeE5hbWVkUGx1Z2lucyB9KTsKICAgIGJ5dGVjIDE2IC8vICJuIgogICAgdW5jb3ZlciA1CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2MjYKICAgIC8vIHRoaXMubmFtZWRQbHVnaW5zKG5hbWUpLnZhbHVlLnBsdWdpbiwKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzMgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2MjUtNjMxCiAgICAvLyB0aGlzLmFyYzU4X3Jla2V5VG9QbHVnaW4oCiAgICAvLyAgIHRoaXMubmFtZWRQbHVnaW5zKG5hbWUpLnZhbHVlLnBsdWdpbiwKICAgIC8vICAgZ2xvYmFsLAogICAgLy8gICBlc2Nyb3csCiAgICAvLyAgIG1ldGhvZE9mZnNldHMsCiAgICAvLyAgIGZ1bmRzUmVxdWVzdAogICAgLy8gKTsKICAgIGNvdmVyIDQKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luCiAgICBwb3BuIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2MTktNjI0CiAgICAvLyBhcmM1OF9yZWtleVRvTmFtZWRQbHVnaW4oCiAgICAvLyAgIG5hbWU6IHN0cmluZywKICAgIC8vICAgZ2xvYmFsOiBib29sZWFuLAogICAgLy8gICBlc2Nyb3c6IHN0cmluZywKICAgIC8vICAgbWV0aG9kT2Zmc2V0czogdWludDY0W10sCiAgICAvLyAgIGZ1bmRzUmVxdWVzdDogRnVuZHNSZXF1ZXN0W10pOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X2FkZFBsdWdpbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmFyYzU4X2FkZFBsdWdpbjoKICAgIGludGNfMCAvLyAwCiAgICBkdXBuIDMKICAgIGJ5dGVjXzEgLy8gIiIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY0OC02NjAKICAgIC8vIGFyYzU4X2FkZFBsdWdpbigKICAgIC8vICAgcGx1Z2luOiB1aW50NjQsCiAgICAvLyAgIGNhbGxlcjogQWRkcmVzcywKICAgIC8vICAgZXNjcm93OiBzdHJpbmcsCiAgICAvLyAgIGFkbWluOiBib29sZWFuLAogICAgLy8gICBkZWxlZ2F0aW9uVHlwZTogVWludDgsCiAgICAvLyAgIGxhc3RWYWxpZDogdWludDY0LAogICAgLy8gICBjb29sZG93bjogdWludDY0LAogICAgLy8gICBtZXRob2RzOiBNZXRob2RSZXN0cmljdGlvbltdLAogICAgLy8gICB1c2VSb3VuZHM6IGJvb2xlYW4sCiAgICAvLyAgIHVzZUV4ZWN1dGlvbktleTogYm9vbGVhbiwKICAgIC8vICAgZGVmYXVsdFRvRXNjcm93OiBib29sZWFuCiAgICAvLyApOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDhbMzJdCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdXRmOFtdKQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYm9vbDgKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDUKICAgIGR1cG4gMgogICAgbGVuCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICBzd2FwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA3CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgc3dhcAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgOAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwCiAgICBjb3ZlciAzCiAgICBwdXNoaW50IDEyIC8vIDEyCiAgICAqCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgc3dhcAogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuKyh1aW50OFs0XSx1aW50NjQpW10pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA5CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGJvb2w4CiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBzd2FwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxMAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBib29sOAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgc3dhcAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYm9vbDgKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2NjEKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSB0aGlzLmFkbWluLnZhbHVlLCBFUlJfQURNSU5fT05MWSk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE2CiAgICAvLyBhZG1pbiA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNBZG1pbiB9KQogICAgYnl0ZWNfMiAvLyAiYWRtaW4iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NjYxCiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSwgRVJSX0FETUlOX09OTFkpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gYWRtaW4gb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY2NAogICAgLy8gZGVsZWdhdGlvblR5cGUgPT09IERlbGVnYXRpb25UeXBlU2VsZiAmJgogICAgYnl0ZWMgMTUgLy8gMHgwMQogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2NjQtNjY1CiAgICAvLyBkZWxlZ2F0aW9uVHlwZSA9PT0gRGVsZWdhdGlvblR5cGVTZWxmICYmCiAgICAvLyBjYWxsZXIubmF0aXZlID09PSBHbG9iYWwuemVyb0FkZHJlc3MKICAgIGJ6IGFyYzU4X2FkZFBsdWdpbl9ib29sX2ZhbHNlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2NjUKICAgIC8vIGNhbGxlci5uYXRpdmUgPT09IEdsb2JhbC56ZXJvQWRkcmVzcwogICAgZGlnIDEwCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NjY0LTY2NQogICAgLy8gZGVsZWdhdGlvblR5cGUgPT09IERlbGVnYXRpb25UeXBlU2VsZiAmJgogICAgLy8gY2FsbGVyLm5hdGl2ZSA9PT0gR2xvYmFsLnplcm9BZGRyZXNzCiAgICBieiBhcmM1OF9hZGRQbHVnaW5fYm9vbF9mYWxzZUA0CiAgICBpbnRjXzEgLy8gMQoKYXJjNThfYWRkUGx1Z2luX2Jvb2xfbWVyZ2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2NjMtNjY2CiAgICAvLyAhKAogICAgLy8gICBkZWxlZ2F0aW9uVHlwZSA9PT0gRGVsZWdhdGlvblR5cGVTZWxmICYmCiAgICAvLyAgIGNhbGxlci5uYXRpdmUgPT09IEdsb2JhbC56ZXJvQWRkcmVzcwogICAgLy8gKSwKICAgICEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2NjItNjY4CiAgICAvLyBhc3NlcnQoCiAgICAvLyAgICEoCiAgICAvLyAgICAgZGVsZWdhdGlvblR5cGUgPT09IERlbGVnYXRpb25UeXBlU2VsZiAmJgogICAgLy8gICAgIGNhbGxlci5uYXRpdmUgPT09IEdsb2JhbC56ZXJvQWRkcmVzcwogICAgLy8gICApLAogICAgLy8gICBFUlJfWkVST19BRERSRVNTX0RFTEVHQVRJT05fVFlQRQogICAgLy8gKQogICAgYXNzZXJ0IC8vIGRlbGVnYXRpb24gdHlwZSBtdXN0IG5vdCBiZSBzZWxmIGZvciBnbG9iYWwgcGx1Z2lucwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY3MS02NzIKICAgIC8vIHVzZUV4ZWN1dGlvbktleSAmJgogICAgLy8gY2FsbGVyLm5hdGl2ZSAhPT0gR2xvYmFsLnplcm9BZGRyZXNzCiAgICBkaWcgMQogICAgYnogYXJjNThfYWRkUGx1Z2luX2Jvb2xfZmFsc2VAOAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY3MgogICAgLy8gY2FsbGVyLm5hdGl2ZSAhPT0gR2xvYmFsLnplcm9BZGRyZXNzCiAgICBkaWcgMTAKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgIT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2NzEtNjcyCiAgICAvLyB1c2VFeGVjdXRpb25LZXkgJiYKICAgIC8vIGNhbGxlci5uYXRpdmUgIT09IEdsb2JhbC56ZXJvQWRkcmVzcwogICAgYnogYXJjNThfYWRkUGx1Z2luX2Jvb2xfZmFsc2VAOAogICAgaW50Y18xIC8vIDEKCmFyYzU4X2FkZFBsdWdpbl9ib29sX21lcmdlQDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NjcwLTY3MwogICAgLy8gISgKICAgIC8vICAgdXNlRXhlY3V0aW9uS2V5ICYmCiAgICAvLyAgIGNhbGxlci5uYXRpdmUgIT09IEdsb2JhbC56ZXJvQWRkcmVzcwogICAgLy8gKSwKICAgICEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2NjktNjc1CiAgICAvLyBhc3NlcnQoCiAgICAvLyAgICEoCiAgICAvLyAgICAgdXNlRXhlY3V0aW9uS2V5ICYmCiAgICAvLyAgICAgY2FsbGVyLm5hdGl2ZSAhPT0gR2xvYmFsLnplcm9BZGRyZXNzCiAgICAvLyAgICksCiAgICAvLyAgIEVSUl9VU0lOR19FWEVDVVRJT05fS0VZX1JFUVVJUkVTX0dMT0JBTAogICAgLy8gKQogICAgYXNzZXJ0IC8vIHVzaW5nIGV4ZWN1dGlvbiBrZXkgcmVxdWlyZXMgZ2xvYmFsIHBsdWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY3OAogICAgLy8gaWYgKGRlZmF1bHRUb0VzY3JvdykgewogICAgZHVwCiAgICBibnogYXJjNThfYWRkUGx1Z2luX2lmX2JvZHlAMTAKICAgIGRpZyA5CiAgICBidXJ5IDE3CgphcmM1OF9hZGRQbHVnaW5fYWZ0ZXJfaWZfZWxzZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2ODMKICAgIC8vIGNvbnN0IGtleTogUGx1Z2luS2V5ID0geyBwbHVnaW4sIGNhbGxlcjogY2FsbGVyLm5hdGl2ZSwgZXNjcm93OiBlc2Nyb3dLZXkgfQogICAgZGlnIDExCiAgICBpdG9iCiAgICBkaWcgMTEKICAgIGNvbmNhdAogICAgZGlnIDE3CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgYnl0ZWMgMTIgLy8gMHgwMDJhCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnVyeSAxNgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY4NQogICAgLy8gbGV0IG1ldGhvZEluZm9zOiBNZXRob2RJbmZvW10gPSBbXQogICAgaW50Y18wIC8vIDAKICAgIGl0b2IKICAgIGJ1cnkgMTgKICAgIGJ5dGVjIDEwIC8vIDB4MDAwMAogICAgYnVyeSAxNQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY4NgogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IG1ldGhvZHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMCAvLyAwCiAgICBidXJ5IDEzCgphcmM1OF9hZGRQbHVnaW5fd2hpbGVfdG9wQDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY4NgogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IG1ldGhvZHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGRpZyAxMgogICAgZGlnIDQKICAgIDwKICAgIGJ6IGFyYzU4X2FkZFBsdWdpbl9hZnRlcl93aGlsZUAxNAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY4NwogICAgLy8gbWV0aG9kSW5mb3MucHVzaCh7IC4uLm1ldGhvZHNbaV0sIGxhc3RDYWxsZWQ6IDAgfSkKICAgIGRpZyA0CiAgICBleHRyYWN0IDIgMAogICAgZGlnIDEzCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIHB1c2hpbnQgMTIgLy8gMTIKICAgICoKICAgIHB1c2hpbnQgMTIgLy8gMTIKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZHVwCiAgICBleHRyYWN0IDAgNAogICAgc3dhcAogICAgZXh0cmFjdCA0IDgKICAgIGRpZyAxCiAgICBsZW4KICAgIHB1c2hpbnQgNCAvLyA0CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgc2l6ZQogICAgY29uY2F0CiAgICBkaWcgMTkKICAgIGNvbmNhdAogICAgZGlnIDE2CiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgY29uY2F0IC8vIG9uIGVycm9yOiBtYXggYXJyYXkgbGVuZ3RoIGV4Y2VlZGVkCiAgICBzd2FwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgcmVwbGFjZTIgMAogICAgYnVyeSAxNgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY4NgogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IG1ldGhvZHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDEzCiAgICBiIGFyYzU4X2FkZFBsdWdpbl93aGlsZV90b3BAMTIKCmFyYzU4X2FkZFBsdWdpbl9hZnRlcl93aGlsZUAxNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2OTAKICAgIC8vIGNvbnN0IGVwb2NoUmVmID0gdXNlUm91bmRzID8gR2xvYmFsLnJvdW5kIDogR2xvYmFsLmxhdGVzdFRpbWVzdGFtcDsKICAgIGRpZyAyCiAgICBieiBhcmM1OF9hZGRQbHVnaW5fdGVybmFyeV9mYWxzZUAxNgogICAgZ2xvYmFsIFJvdW5kCiAgICBidXJ5IDE0CgphcmM1OF9hZGRQbHVnaW5fdGVybmFyeV9tZXJnZUAxNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2OTIKICAgIC8vIGlmICh0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlICE9PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcykgewogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29udHJvbGxlZEFkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ29udHJvbGxlZEFkZHJlc3MgfSk7CiAgICBieXRlY18wIC8vICJjb250cm9sbGVkX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NjkyCiAgICAvLyBpZiAodGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSAhPT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MpIHsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgIT0KICAgIGJ6IGFyYzU4X2FkZFBsdWdpbl9hZnRlcl9pZl9lbHNlQDIwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NjkzLTY5OQogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IHRoaXMucGx1Z2luc01icihlc2Nyb3dLZXksIG1ldGhvZEluZm9zLmxlbmd0aCkKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Njk1CiAgICAvLyBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBjb250cm9sbGVkQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNDb250cm9sbGVkQWRkcmVzcyB9KTsKICAgIGJ5dGVjXzAgLy8gImNvbnRyb2xsZWRfYWRkcmVzcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2OTUKICAgIC8vIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Njk2CiAgICAvLyByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY5NwogICAgLy8gYW1vdW50OiB0aGlzLnBsdWdpbnNNYnIoZXNjcm93S2V5LCBtZXRob2RJbmZvcy5sZW5ndGgpCiAgICBkaWcgMTYKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDE5CiAgICBzd2FwCiAgICBjYWxsc3ViIHBsdWdpbnNNYnIKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY5My02OTgKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiB0aGlzLnBsdWdpbnNNYnIoZXNjcm93S2V5LCBtZXRob2RJbmZvcy5sZW5ndGgpCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NjkzLTY5OQogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IHRoaXMucGx1Z2luc01icihlc2Nyb3dLZXksIG1ldGhvZEluZm9zLmxlbmd0aCkKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAoKYXJjNThfYWRkUGx1Z2luX2FmdGVyX2lmX2Vsc2VAMjA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzAyCiAgICAvLyBjb25zdCBlc2Nyb3dJRCA9IHRoaXMubWF5YmVOZXdFc2Nyb3coZXNjcm93KTsKICAgIGRpZyA5CiAgICBjYWxsc3ViIG1heWJlTmV3RXNjcm93CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzA0LTcxNQogICAgLy8gdGhpcy5wbHVnaW5zKGtleSkudmFsdWUgPSB7CiAgICAvLyAgIGVzY3JvdzogZXNjcm93SUQsCiAgICAvLyAgIGFkbWluLAogICAgLy8gICBkZWxlZ2F0aW9uVHlwZSwKICAgIC8vICAgbGFzdFZhbGlkLAogICAgLy8gICBjb29sZG93biwKICAgIC8vICAgbWV0aG9kczogY2xvbmUobWV0aG9kSW5mb3MpLAogICAgLy8gICB1c2VSb3VuZHMsCiAgICAvLyAgIHVzZUV4ZWN1dGlvbktleSwKICAgIC8vICAgbGFzdENhbGxlZDogMCwKICAgIC8vICAgc3RhcnQ6IGVwb2NoUmVmLAogICAgLy8gfQogICAgaXRvYgogICAgZGlnIDgKICAgIGNvbmNhdAogICAgZGlnIDcKICAgIGl0b2IKICAgIGNvbmNhdAogICAgZGlnIDYKICAgIGl0b2IKICAgIGNvbmNhdAogICAgYnl0ZWMgMjMgLy8gMHgwMDJjCiAgICBjb25jYXQKICAgIGJ5dGVjIDkgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIGRpZyAxMQogICAgc2V0Yml0CiAgICBpbnRjXzEgLy8gMQogICAgZGlnIDUKICAgIHNldGJpdAogICAgaW50Y18yIC8vIDIKICAgIGRpZyA0CiAgICBzZXRiaXQKICAgIGNvbmNhdAogICAgZGlnIDE4CiAgICBjb25jYXQKICAgIGRpZyAxNAogICAgaXRvYgogICAgY29uY2F0CiAgICBkaWcgMTUKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBwbHVnaW5zID0gQm94TWFwPFBsdWdpbktleSwgUGx1Z2luSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeFBsdWdpbnMgfSk7CiAgICBieXRlYyA0IC8vICJwIgogICAgZGlnIDE3CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo3MDQtNzE1CiAgICAvLyB0aGlzLnBsdWdpbnMoa2V5KS52YWx1ZSA9IHsKICAgIC8vICAgZXNjcm93OiBlc2Nyb3dJRCwKICAgIC8vICAgYWRtaW4sCiAgICAvLyAgIGRlbGVnYXRpb25UeXBlLAogICAgLy8gICBsYXN0VmFsaWQsCiAgICAvLyAgIGNvb2xkb3duLAogICAgLy8gICBtZXRob2RzOiBjbG9uZShtZXRob2RJbmZvcyksCiAgICAvLyAgIHVzZVJvdW5kcywKICAgIC8vICAgdXNlRXhlY3V0aW9uS2V5LAogICAgLy8gICBsYXN0Q2FsbGVkOiAwLAogICAgLy8gICBzdGFydDogZXBvY2hSZWYsCiAgICAvLyB9CiAgICBkdXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyBsYXN0VXNlckludGVyYWN0aW9uID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzTGFzdFVzZXJJbnRlcmFjdGlvbiB9KQogICAgYnl0ZWNfMyAvLyAibGFzdF91c2VyX2ludGVyYWN0aW9uIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyB0aGlzLmxhc3RVc2VySW50ZXJhY3Rpb24udmFsdWUgPSBHbG9iYWwubGF0ZXN0VGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIyCiAgICAvLyBsYXN0Q2hhbmdlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzTGFzdENoYW5nZSB9KQogICAgYnl0ZWMgNiAvLyAibGFzdF9jaGFuZ2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIHRoaXMubGFzdENoYW5nZS52YWx1ZSA9IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NjQ4LTY2MAogICAgLy8gYXJjNThfYWRkUGx1Z2luKAogICAgLy8gICBwbHVnaW46IHVpbnQ2NCwKICAgIC8vICAgY2FsbGVyOiBBZGRyZXNzLAogICAgLy8gICBlc2Nyb3c6IHN0cmluZywKICAgIC8vICAgYWRtaW46IGJvb2xlYW4sCiAgICAvLyAgIGRlbGVnYXRpb25UeXBlOiBVaW50OCwKICAgIC8vICAgbGFzdFZhbGlkOiB1aW50NjQsCiAgICAvLyAgIGNvb2xkb3duOiB1aW50NjQsCiAgICAvLyAgIG1ldGhvZHM6IE1ldGhvZFJlc3RyaWN0aW9uW10sCiAgICAvLyAgIHVzZVJvdW5kczogYm9vbGVhbiwKICAgIC8vICAgdXNlRXhlY3V0aW9uS2V5OiBib29sZWFuLAogICAgLy8gICBkZWZhdWx0VG9Fc2Nyb3c6IGJvb2xlYW4KICAgIC8vICk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKYXJjNThfYWRkUGx1Z2luX3Rlcm5hcnlfZmFsc2VAMTY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NjkwCiAgICAvLyBjb25zdCBlcG9jaFJlZiA9IHVzZVJvdW5kcyA/IEdsb2JhbC5yb3VuZCA6IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXA7CiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBidXJ5IDE0CiAgICBiIGFyYzU4X2FkZFBsdWdpbl90ZXJuYXJ5X21lcmdlQDE3CgphcmM1OF9hZGRQbHVnaW5faWZfYm9keUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2NzkKICAgIC8vIGFzc2VydChlc2Nyb3cgIT09ICcnLCBFUlJfRVNDUk9XX1JFUVVJUkVEX1RPX0JFX1NFVF9BU19ERUZBVUxUKQogICAgZGlnIDkKICAgIGJ5dGVjXzEgLy8gIiIKICAgICE9CiAgICBhc3NlcnQgLy8gZXNjcm93IG11c3QgYmUgc2V0IGlmIGRlZmF1bHRUb0VzY3JvdyBpcyB0cnVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NjgwCiAgICAvLyBlc2Nyb3dLZXkgPSAnJwogICAgYnl0ZWNfMSAvLyAiIgogICAgYnVyeSAxNwogICAgYiBhcmM1OF9hZGRQbHVnaW5fYWZ0ZXJfaWZfZWxzZUAxMQoKYXJjNThfYWRkUGx1Z2luX2Jvb2xfZmFsc2VAODoKICAgIGludGNfMCAvLyAwCiAgICBiIGFyYzU4X2FkZFBsdWdpbl9ib29sX21lcmdlQDkKCmFyYzU4X2FkZFBsdWdpbl9ib29sX2ZhbHNlQDQ6CiAgICBpbnRjXzAgLy8gMAogICAgYiBhcmM1OF9hZGRQbHVnaW5fYm9vbF9tZXJnZUA1CgoKLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZW1vdmVQbHVnaW5bcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF9yZW1vdmVQbHVnaW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzI3CiAgICAvLyBhcmM1OF9yZW1vdmVQbHVnaW4ocGx1Z2luOiB1aW50NjQsIGNhbGxlcjogQWRkcmVzcywgZXNjcm93OiBzdHJpbmcpOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDhbMzJdCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdXRmOFtdKQogICAgZXh0cmFjdCAyIDAKICAgIGR1cAogICAgY292ZXIgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjcyOAogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuYWRtaW4udmFsdWUsIEVSUl9BRE1JTl9PTkxZKTsKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIGFkbWluID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0FkbWluIH0pCiAgICBieXRlY18yIC8vICJhZG1pbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo3MjgKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSB0aGlzLmFkbWluLnZhbHVlLCBFUlJfQURNSU5fT05MWSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBhZG1pbiBvbmx5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzMwCiAgICAvLyBjb25zdCBrZXk6IFBsdWdpbktleSA9IHsgcGx1Z2luLCBjYWxsZXI6IGNhbGxlci5uYXRpdmUsIGVzY3JvdyB9CiAgICB1bmNvdmVyIDIKICAgIGl0b2IKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBkaWcgMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGJ5dGVjIDEyIC8vIDB4MDAyYQogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozMwogICAgLy8gcGx1Z2lucyA9IEJveE1hcDxQbHVnaW5LZXksIFBsdWdpbkluZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhQbHVnaW5zIH0pOwogICAgYnl0ZWMgNCAvLyAicCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjczMQogICAgLy8gYXNzZXJ0KHRoaXMucGx1Z2lucyhrZXkpLmV4aXN0cywgRVJSX1BMVUdJTl9ET0VTX05PVF9FWElTVCkKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gcGx1Z2luIGRvZXMgbm90IGV4aXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzMzCiAgICAvLyBjb25zdCBtZXRob2RzTGVuZ3RoOiB1aW50NjQgPSB0aGlzLnBsdWdpbnMoa2V5KS52YWx1ZS5tZXRob2RzLmxlbmd0aAogICAgZHVwCiAgICBwdXNoaW50IDQ0IC8vIDQ0CiAgICBpbnRjXzIgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo3MzUKICAgIC8vIHRoaXMucGx1Z2lucyhrZXkpLmRlbGV0ZSgpOwogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzM3CiAgICAvLyBpZiAodGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSAhPT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MpIHsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGNvbnRyb2xsZWRBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0NvbnRyb2xsZWRBZGRyZXNzIH0pOwogICAgYnl0ZWNfMCAvLyAiY29udHJvbGxlZF9hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjczNwogICAgLy8gaWYgKHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUgIT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzKSB7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgICE9CiAgICBieiBhcmM1OF9yZW1vdmVQbHVnaW5fYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzM4LTc0MwogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgcmVjZWl2ZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgYW1vdW50OiB0aGlzLnBsdWdpbnNNYnIoZXNjcm93LCBtZXRob2RzTGVuZ3RoKQogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo3NDAKICAgIC8vIHJlY2VpdmVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29udHJvbGxlZEFkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ29udHJvbGxlZEFkZHJlc3MgfSk7CiAgICBieXRlY18wIC8vICJjb250cm9sbGVkX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzQwCiAgICAvLyByZWNlaXZlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzQxCiAgICAvLyBhbW91bnQ6IHRoaXMucGx1Z2luc01icihlc2Nyb3csIG1ldGhvZHNMZW5ndGgpCiAgICBkaWcgMgogICAgZGlnIDIKICAgIGNhbGxzdWIgcGx1Z2luc01icgogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo3MzgtNzQyCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICBhbW91bnQ6IHRoaXMucGx1Z2luc01icihlc2Nyb3csIG1ldGhvZHNMZW5ndGgpCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzM4LTc0MwogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgcmVjZWl2ZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgYW1vdW50OiB0aGlzLnBsdWdpbnNNYnIoZXNjcm93LCBtZXRob2RzTGVuZ3RoKQogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CgphcmM1OF9yZW1vdmVQbHVnaW5fYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyBsYXN0VXNlckludGVyYWN0aW9uID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzTGFzdFVzZXJJbnRlcmFjdGlvbiB9KQogICAgYnl0ZWNfMyAvLyAibGFzdF91c2VyX2ludGVyYWN0aW9uIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyB0aGlzLmxhc3RVc2VySW50ZXJhY3Rpb24udmFsdWUgPSBHbG9iYWwubGF0ZXN0VGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIyCiAgICAvLyBsYXN0Q2hhbmdlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzTGFzdENoYW5nZSB9KQogICAgYnl0ZWMgNiAvLyAibGFzdF9jaGFuZ2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIHRoaXMubGFzdENoYW5nZS52YWx1ZSA9IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzI3CiAgICAvLyBhcmM1OF9yZW1vdmVQbHVnaW4ocGx1Z2luOiB1aW50NjQsIGNhbGxlcjogQWRkcmVzcywgZXNjcm93OiBzdHJpbmcpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X2FkZE5hbWVkUGx1Z2luW3JvdXRpbmddKCkgLT4gdm9pZDoKYXJjNThfYWRkTmFtZWRQbHVnaW46CiAgICBpbnRjXzAgLy8gMAogICAgZHVwbiAzCiAgICBieXRlY18xIC8vICIiCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo3NjUtNzc4CiAgICAvLyBhcmM1OF9hZGROYW1lZFBsdWdpbigKICAgIC8vICAgbmFtZTogc3RyaW5nLAogICAgLy8gICBwbHVnaW46IHVpbnQ2NCwKICAgIC8vICAgY2FsbGVyOiBBZGRyZXNzLAogICAgLy8gICBlc2Nyb3c6IHN0cmluZywKICAgIC8vICAgYWRtaW46IGJvb2xlYW4sCiAgICAvLyAgIGRlbGVnYXRpb25UeXBlOiBVaW50OCwKICAgIC8vICAgbGFzdFZhbGlkOiB1aW50NjQsCiAgICAvLyAgIGNvb2xkb3duOiB1aW50NjQsCiAgICAvLyAgIG1ldGhvZHM6IE1ldGhvZFJlc3RyaWN0aW9uW10sCiAgICAvLyAgIHVzZVJvdW5kczogYm9vbGVhbiwKICAgIC8vICAgdXNlRXhlY3V0aW9uS2V5OiBib29sZWFuLAogICAgLy8gICBkZWZhdWx0VG9Fc2Nyb3c6IGJvb2xlYW4KICAgIC8vICk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICBkdXAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICBzd2FwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGxlbgogICAgcHVzaGludCAzMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDhbMzJdCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdXRmOFtdKQogICAgZXh0cmFjdCAyIDAKICAgIHN3YXAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDUKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYm9vbDgKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHN3YXAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIGR1cAogICAgY292ZXIgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50NjQKICAgIGJ0b2kKICAgIGNvdmVyIDIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDgKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICBjb3ZlciAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA5CiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAKICAgIGNvdmVyIDQKICAgIHB1c2hpbnQgMTIgLy8gMTIKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rKHVpbnQ4WzRdLHVpbnQ2NClbXSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEwCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGJvb2w4CiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBjb3ZlciAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBib29sOAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgY292ZXIgMgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYm9vbDgKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIGNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo3NzkKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSB0aGlzLmFkbWluLnZhbHVlLCBFUlJfQURNSU5fT05MWSk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE2CiAgICAvLyBhZG1pbiA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNBZG1pbiB9KQogICAgYnl0ZWNfMiAvLyAiYWRtaW4iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Nzc5CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSwgRVJSX0FETUlOX09OTFkpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gYWRtaW4gb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM1CiAgICAvLyBuYW1lZFBsdWdpbnMgPSBCb3hNYXA8c3RyaW5nLCBQbHVnaW5LZXk+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhOYW1lZFBsdWdpbnMgfSk7CiAgICBieXRlYyAxNiAvLyAibiIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo3ODAKICAgIC8vIGFzc2VydCghdGhpcy5uYW1lZFBsdWdpbnMobmFtZSkuZXhpc3RzKTsKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzgzCiAgICAvLyBkZWxlZ2F0aW9uVHlwZSA9PT0gRGVsZWdhdGlvblR5cGVTZWxmICYmCiAgICBieXRlYyAxNSAvLyAweDAxCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjc4My03ODQKICAgIC8vIGRlbGVnYXRpb25UeXBlID09PSBEZWxlZ2F0aW9uVHlwZVNlbGYgJiYKICAgIC8vIGNhbGxlci5uYXRpdmUgPT09IEdsb2JhbC56ZXJvQWRkcmVzcwogICAgYnogYXJjNThfYWRkTmFtZWRQbHVnaW5fYm9vbF9mYWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Nzg0CiAgICAvLyBjYWxsZXIubmF0aXZlID09PSBHbG9iYWwuemVyb0FkZHJlc3MKICAgIGRpZyAxMQogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjc4My03ODQKICAgIC8vIGRlbGVnYXRpb25UeXBlID09PSBEZWxlZ2F0aW9uVHlwZVNlbGYgJiYKICAgIC8vIGNhbGxlci5uYXRpdmUgPT09IEdsb2JhbC56ZXJvQWRkcmVzcwogICAgYnogYXJjNThfYWRkTmFtZWRQbHVnaW5fYm9vbF9mYWxzZUA0CiAgICBpbnRjXzEgLy8gMQoKYXJjNThfYWRkTmFtZWRQbHVnaW5fYm9vbF9tZXJnZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjc4Mi03ODUKICAgIC8vICEoCiAgICAvLyAgIGRlbGVnYXRpb25UeXBlID09PSBEZWxlZ2F0aW9uVHlwZVNlbGYgJiYKICAgIC8vICAgY2FsbGVyLm5hdGl2ZSA9PT0gR2xvYmFsLnplcm9BZGRyZXNzCiAgICAvLyApLAogICAgIQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjc4MS03ODcKICAgIC8vIGFzc2VydCgKICAgIC8vICAgISgKICAgIC8vICAgICBkZWxlZ2F0aW9uVHlwZSA9PT0gRGVsZWdhdGlvblR5cGVTZWxmICYmCiAgICAvLyAgICAgY2FsbGVyLm5hdGl2ZSA9PT0gR2xvYmFsLnplcm9BZGRyZXNzCiAgICAvLyAgICksCiAgICAvLyAgIEVSUl9aRVJPX0FERFJFU1NfREVMRUdBVElPTl9UWVBFCiAgICAvLyApCiAgICBhc3NlcnQgLy8gZGVsZWdhdGlvbiB0eXBlIG11c3Qgbm90IGJlIHNlbGYgZm9yIGdsb2JhbCBwbHVnaW5zCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzkwLTc5MQogICAgLy8gdXNlRXhlY3V0aW9uS2V5ICYmCiAgICAvLyBjYWxsZXIubmF0aXZlICE9PSBHbG9iYWwuemVyb0FkZHJlc3MKICAgIGRpZyAyCiAgICBieiBhcmM1OF9hZGROYW1lZFBsdWdpbl9ib29sX2ZhbHNlQDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo3OTEKICAgIC8vIGNhbGxlci5uYXRpdmUgIT09IEdsb2JhbC56ZXJvQWRkcmVzcwogICAgZGlnIDExCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgICE9CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzkwLTc5MQogICAgLy8gdXNlRXhlY3V0aW9uS2V5ICYmCiAgICAvLyBjYWxsZXIubmF0aXZlICE9PSBHbG9iYWwuemVyb0FkZHJlc3MKICAgIGJ6IGFyYzU4X2FkZE5hbWVkUGx1Z2luX2Jvb2xfZmFsc2VAOAogICAgaW50Y18xIC8vIDEKCmFyYzU4X2FkZE5hbWVkUGx1Z2luX2Jvb2xfbWVyZ2VAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo3ODktNzkyCiAgICAvLyAhKAogICAgLy8gICB1c2VFeGVjdXRpb25LZXkgJiYKICAgIC8vICAgY2FsbGVyLm5hdGl2ZSAhPT0gR2xvYmFsLnplcm9BZGRyZXNzCiAgICAvLyApLAogICAgIQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjc4OC03OTQKICAgIC8vIGFzc2VydCgKICAgIC8vICAgISgKICAgIC8vICAgICB1c2VFeGVjdXRpb25LZXkgJiYKICAgIC8vICAgICBjYWxsZXIubmF0aXZlICE9PSBHbG9iYWwuemVyb0FkZHJlc3MKICAgIC8vICAgKSwKICAgIC8vICAgRVJSX1VTSU5HX0VYRUNVVElPTl9LRVlfUkVRVUlSRVNfR0xPQkFMCiAgICAvLyApCiAgICBhc3NlcnQgLy8gdXNpbmcgZXhlY3V0aW9uIGtleSByZXF1aXJlcyBnbG9iYWwgcGx1Z2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Nzk3CiAgICAvLyBpZiAoZGVmYXVsdFRvRXNjcm93KSB7CiAgICBkaWcgMQogICAgYm56IGFyYzU4X2FkZE5hbWVkUGx1Z2luX2lmX2JvZHlAMTAKICAgIGRpZyAxMAogICAgYnVyeSAxOQoKYXJjNThfYWRkTmFtZWRQbHVnaW5fYWZ0ZXJfaWZfZWxzZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4MDIKICAgIC8vIGNvbnN0IGtleTogUGx1Z2luS2V5ID0geyBwbHVnaW4sIGNhbGxlcjogY2FsbGVyLm5hdGl2ZSwgZXNjcm93OiBlc2Nyb3dLZXkgfQogICAgZGlnIDEyCiAgICBpdG9iCiAgICBkaWcgMTIKICAgIGNvbmNhdAogICAgZGlnIDE5CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgYnl0ZWMgMTIgLy8gMHgwMDJhCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBidXJ5IDE5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODAzCiAgICAvLyB0aGlzLm5hbWVkUGx1Z2lucyhuYW1lKS52YWx1ZSA9IGNsb25lKGtleSkKICAgIGRpZyAxCiAgICBkdXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjgwNQogICAgLy8gbGV0IG1ldGhvZEluZm9zOiBNZXRob2RJbmZvW10gPSBbXQogICAgaW50Y18wIC8vIDAKICAgIGl0b2IKICAgIGJ1cnkgMjAKICAgIGJ5dGVjIDEwIC8vIDB4MDAwMAogICAgYnVyeSAxNwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjgwNgogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IG1ldGhvZHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMCAvLyAwCiAgICBidXJ5IDE1CgphcmM1OF9hZGROYW1lZFBsdWdpbl93aGlsZV90b3BAMTI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODA2CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7IGkgKz0gMSkgewogICAgZGlnIDE0CiAgICBkaWcgNQogICAgPAogICAgYnogYXJjNThfYWRkTmFtZWRQbHVnaW5fYWZ0ZXJfd2hpbGVAMTQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4MDcKICAgIC8vIG1ldGhvZEluZm9zLnB1c2goeyAuLi5tZXRob2RzW2ldLCBsYXN0Q2FsbGVkOiAwIH0pCiAgICBkaWcgNQogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAxNQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBwdXNoaW50IDEyIC8vIDEyCiAgICAqCiAgICBwdXNoaW50IDEyIC8vIDEyCiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGR1cAogICAgZXh0cmFjdCAwIDQKICAgIHN3YXAKICAgIGV4dHJhY3QgNCA4CiAgICBkaWcgMQogICAgbGVuCiAgICBwdXNoaW50IDQgLy8gNAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHNpemUKICAgIGNvbmNhdAogICAgZGlnIDIxCiAgICBjb25jYXQKICAgIGRpZyAxOAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdCAvLyBvbiBlcnJvcjogbWF4IGFycmF5IGxlbmd0aCBleGNlZWRlZAogICAgc3dhcAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHJlcGxhY2UyIDAKICAgIGJ1cnkgMTgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4MDYKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBtZXRob2RzLmxlbmd0aDsgaSArPSAxKSB7CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAxNQogICAgYiBhcmM1OF9hZGROYW1lZFBsdWdpbl93aGlsZV90b3BAMTIKCmFyYzU4X2FkZE5hbWVkUGx1Z2luX2FmdGVyX3doaWxlQDE0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjgxMAogICAgLy8gaWYgKHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUgIT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzKSB7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBjb250cm9sbGVkQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNDb250cm9sbGVkQWRkcmVzcyB9KTsKICAgIGJ5dGVjXzAgLy8gImNvbnRyb2xsZWRfYWRkcmVzcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4MTAKICAgIC8vIGlmICh0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlICE9PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcykgewogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAhPQogICAgYnogYXJjNThfYWRkTmFtZWRQbHVnaW5fYWZ0ZXJfaWZfZWxzZUAxNwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjgxMS04MTcKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiB0aGlzLnBsdWdpbnNNYnIoZXNjcm93S2V5LCBtZXRob2RJbmZvcy5sZW5ndGgpICsgdGhpcy5uYW1lZFBsdWdpbnNNYnIobmFtZSkKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODEzCiAgICAvLyBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBjb250cm9sbGVkQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNDb250cm9sbGVkQWRkcmVzcyB9KTsKICAgIGJ5dGVjXzAgLy8gImNvbnRyb2xsZWRfYWRkcmVzcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4MTMKICAgIC8vIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODE0CiAgICAvLyByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjgxNQogICAgLy8gYW1vdW50OiB0aGlzLnBsdWdpbnNNYnIoZXNjcm93S2V5LCBtZXRob2RJbmZvcy5sZW5ndGgpICsgdGhpcy5uYW1lZFBsdWdpbnNNYnIobmFtZSkKICAgIGRpZyAxOAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMjEKICAgIHN3YXAKICAgIGNhbGxzdWIgcGx1Z2luc01icgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyByZXR1cm4gTWluTmFtZWRQbHVnaW5NQlIgKyAoQm94Q29zdFBlckJ5dGUgKiBCeXRlcyhuYW1lKS5sZW5ndGgpOwogICAgZGlnIDE2CiAgICBsZW4KICAgIGludGMgNCAvLyA0MDAKICAgICoKICAgIGludGMgNSAvLyAyMTcwMAogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjgxNQogICAgLy8gYW1vdW50OiB0aGlzLnBsdWdpbnNNYnIoZXNjcm93S2V5LCBtZXRob2RJbmZvcy5sZW5ndGgpICsgdGhpcy5uYW1lZFBsdWdpbnNNYnIobmFtZSkKICAgICsKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjgxMS04MTYKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiB0aGlzLnBsdWdpbnNNYnIoZXNjcm93S2V5LCBtZXRob2RJbmZvcy5sZW5ndGgpICsgdGhpcy5uYW1lZFBsdWdpbnNNYnIobmFtZSkKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4MTEtODE3CiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogdGhpcy5wbHVnaW5zTWJyKGVzY3Jvd0tleSwgbWV0aG9kSW5mb3MubGVuZ3RoKSArIHRoaXMubmFtZWRQbHVnaW5zTWJyKG5hbWUpCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKCmFyYzU4X2FkZE5hbWVkUGx1Z2luX2FmdGVyX2lmX2Vsc2VAMTc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODIwCiAgICAvLyBjb25zdCBlc2Nyb3dJRCA9IHRoaXMubWF5YmVOZXdFc2Nyb3coZXNjcm93KTsKICAgIGRpZyAxMAogICAgY2FsbHN1YiBtYXliZU5ld0VzY3JvdwogICAgYnVyeSAxNgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjgyMgogICAgLy8gY29uc3QgZXBvY2hSZWYgPSB1c2VSb3VuZHMgPyBHbG9iYWwucm91bmQgOiBHbG9iYWwubGF0ZXN0VGltZXN0YW1wOwogICAgZGlnIDMKICAgIGJ6IGFyYzU4X2FkZE5hbWVkUGx1Z2luX3Rlcm5hcnlfZmFsc2VAMTkKICAgIGdsb2JhbCBSb3VuZAoKYXJjNThfYWRkTmFtZWRQbHVnaW5fdGVybmFyeV9tZXJnZUAyMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4MjQtODM1CiAgICAvLyB0aGlzLnBsdWdpbnMoa2V5KS52YWx1ZSA9IHsKICAgIC8vICAgZXNjcm93OiBlc2Nyb3dJRCwKICAgIC8vICAgYWRtaW4sCiAgICAvLyAgIGRlbGVnYXRpb25UeXBlLAogICAgLy8gICBsYXN0VmFsaWQsCiAgICAvLyAgIGNvb2xkb3duLAogICAgLy8gICBtZXRob2RzOiBjbG9uZShtZXRob2RJbmZvcyksCiAgICAvLyAgIHVzZVJvdW5kcywKICAgIC8vICAgdXNlRXhlY3V0aW9uS2V5LAogICAgLy8gICBsYXN0Q2FsbGVkOiAwLAogICAgLy8gICBzdGFydDogZXBvY2hSZWYKICAgIC8vIH0KICAgIGRpZyAxNgogICAgaXRvYgogICAgZGlnIDEwCiAgICBjb25jYXQKICAgIGRpZyA5CiAgICBpdG9iCiAgICBjb25jYXQKICAgIGRpZyA4CiAgICBpdG9iCiAgICBjb25jYXQKICAgIGJ5dGVjIDIzIC8vIDB4MDAyYwogICAgY29uY2F0CiAgICBieXRlYyA5IC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICBkaWcgMTMKICAgIHNldGJpdAogICAgaW50Y18xIC8vIDEKICAgIGRpZyA3CiAgICBzZXRiaXQKICAgIGludGNfMiAvLyAyCiAgICBkaWcgNgogICAgc2V0Yml0CiAgICBjb25jYXQKICAgIGRpZyAyMQogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIGRpZyAxNwogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIHBsdWdpbnMgPSBCb3hNYXA8UGx1Z2luS2V5LCBQbHVnaW5JbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4UGx1Z2lucyB9KTsKICAgIGJ5dGVjIDQgLy8gInAiCiAgICBkaWcgMTkKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjgyNC04MzUKICAgIC8vIHRoaXMucGx1Z2lucyhrZXkpLnZhbHVlID0gewogICAgLy8gICBlc2Nyb3c6IGVzY3Jvd0lELAogICAgLy8gICBhZG1pbiwKICAgIC8vICAgZGVsZWdhdGlvblR5cGUsCiAgICAvLyAgIGxhc3RWYWxpZCwKICAgIC8vICAgY29vbGRvd24sCiAgICAvLyAgIG1ldGhvZHM6IGNsb25lKG1ldGhvZEluZm9zKSwKICAgIC8vICAgdXNlUm91bmRzLAogICAgLy8gICB1c2VFeGVjdXRpb25LZXksCiAgICAvLyAgIGxhc3RDYWxsZWQ6IDAsCiAgICAvLyAgIHN0YXJ0OiBlcG9jaFJlZgogICAgLy8gfQogICAgZHVwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gbGFzdFVzZXJJbnRlcmFjdGlvbiA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0xhc3RVc2VySW50ZXJhY3Rpb24gfSkKICAgIGJ5dGVjXzMgLy8gImxhc3RfdXNlcl9pbnRlcmFjdGlvbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NAogICAgLy8gdGhpcy5sYXN0VXNlckludGVyYWN0aW9uLnZhbHVlID0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMgogICAgLy8gbGFzdENoYW5nZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0xhc3RDaGFuZ2UgfSkKICAgIGJ5dGVjIDYgLy8gImxhc3RfY2hhbmdlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyB0aGlzLmxhc3RDaGFuZ2UudmFsdWUgPSBHbG9iYWwubGF0ZXN0VGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjc2NS03NzgKICAgIC8vIGFyYzU4X2FkZE5hbWVkUGx1Z2luKAogICAgLy8gICBuYW1lOiBzdHJpbmcsCiAgICAvLyAgIHBsdWdpbjogdWludDY0LAogICAgLy8gICBjYWxsZXI6IEFkZHJlc3MsCiAgICAvLyAgIGVzY3Jvdzogc3RyaW5nLAogICAgLy8gICBhZG1pbjogYm9vbGVhbiwKICAgIC8vICAgZGVsZWdhdGlvblR5cGU6IFVpbnQ4LAogICAgLy8gICBsYXN0VmFsaWQ6IHVpbnQ2NCwKICAgIC8vICAgY29vbGRvd246IHVpbnQ2NCwKICAgIC8vICAgbWV0aG9kczogTWV0aG9kUmVzdHJpY3Rpb25bXSwKICAgIC8vICAgdXNlUm91bmRzOiBib29sZWFuLAogICAgLy8gICB1c2VFeGVjdXRpb25LZXk6IGJvb2xlYW4sCiAgICAvLyAgIGRlZmF1bHRUb0VzY3JvdzogYm9vbGVhbgogICAgLy8gKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgphcmM1OF9hZGROYW1lZFBsdWdpbl90ZXJuYXJ5X2ZhbHNlQDE5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjgyMgogICAgLy8gY29uc3QgZXBvY2hSZWYgPSB1c2VSb3VuZHMgPyBHbG9iYWwucm91bmQgOiBHbG9iYWwubGF0ZXN0VGltZXN0YW1wOwogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgYiBhcmM1OF9hZGROYW1lZFBsdWdpbl90ZXJuYXJ5X21lcmdlQDIwCgphcmM1OF9hZGROYW1lZFBsdWdpbl9pZl9ib2R5QDEwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjc5OAogICAgLy8gYXNzZXJ0KGVzY3JvdyAhPT0gJycsIEVSUl9FU0NST1dfUkVRVUlSRURfVE9fQkVfU0VUX0FTX0RFRkFVTFQpCiAgICBkaWcgMTAKICAgIGJ5dGVjXzEgLy8gIiIKICAgICE9CiAgICBhc3NlcnQgLy8gZXNjcm93IG11c3QgYmUgc2V0IGlmIGRlZmF1bHRUb0VzY3JvdyBpcyB0cnVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Nzk5CiAgICAvLyBlc2Nyb3dLZXkgPSAnJwogICAgYnl0ZWNfMSAvLyAiIgogICAgYnVyeSAxOQogICAgYiBhcmM1OF9hZGROYW1lZFBsdWdpbl9hZnRlcl9pZl9lbHNlQDExCgphcmM1OF9hZGROYW1lZFBsdWdpbl9ib29sX2ZhbHNlQDg6CiAgICBpbnRjXzAgLy8gMAogICAgYiBhcmM1OF9hZGROYW1lZFBsdWdpbl9ib29sX21lcmdlQDkKCmFyYzU4X2FkZE5hbWVkUGx1Z2luX2Jvb2xfZmFsc2VANDoKICAgIGludGNfMCAvLyAwCiAgICBiIGFyYzU4X2FkZE5hbWVkUGx1Z2luX2Jvb2xfbWVyZ2VANQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVtb3ZlTmFtZWRQbHVnaW5bcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF9yZW1vdmVOYW1lZFBsdWdpbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4NDYKICAgIC8vIGFyYzU4X3JlbW92ZU5hbWVkUGx1Z2luKG5hbWU6IHN0cmluZyk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4NDcKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSB0aGlzLmFkbWluLnZhbHVlLCBFUlJfQURNSU5fT05MWSk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE2CiAgICAvLyBhZG1pbiA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNBZG1pbiB9KQogICAgYnl0ZWNfMiAvLyAiYWRtaW4iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODQ3CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSwgRVJSX0FETUlOX09OTFkpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gYWRtaW4gb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM1CiAgICAvLyBuYW1lZFBsdWdpbnMgPSBCb3hNYXA8c3RyaW5nLCBQbHVnaW5LZXk+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhOYW1lZFBsdWdpbnMgfSk7CiAgICBieXRlYyAxNiAvLyAibiIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg0OAogICAgLy8gYXNzZXJ0KHRoaXMubmFtZWRQbHVnaW5zKG5hbWUpLmV4aXN0cywgRVJSX1BMVUdJTl9ET0VTX05PVF9FWElTVCk7CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIHBsdWdpbiBkb2VzIG5vdCBleGlzdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg0OQogICAgLy8gY29uc3QgYXBwID0gY2xvbmUodGhpcy5uYW1lZFBsdWdpbnMobmFtZSkudmFsdWUpCiAgICBkdXAKICAgIGJveF9nZXQKICAgIHBvcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIHBsdWdpbnMgPSBCb3hNYXA8UGx1Z2luS2V5LCBQbHVnaW5JbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4UGx1Z2lucyB9KTsKICAgIGJ5dGVjIDQgLy8gInAiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4NTAKICAgIC8vIGFzc2VydCh0aGlzLnBsdWdpbnMoYXBwKS5leGlzdHMsIEVSUl9QTFVHSU5fRE9FU19OT1RfRVhJU1QpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBwbHVnaW4gZG9lcyBub3QgZXhpc3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4NTIKICAgIC8vIGNvbnN0IG1ldGhvZHNMZW5ndGg6IHVpbnQ2NCA9IHRoaXMucGx1Z2lucyhhcHApLnZhbHVlLm1ldGhvZHMubGVuZ3RoCiAgICBkdXAKICAgIHB1c2hpbnQgNDQgLy8gNDQKICAgIGludGNfMiAvLyAyCiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgY292ZXIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg1NAogICAgLy8gdGhpcy5uYW1lZFBsdWdpbnMobmFtZSkuZGVsZXRlKCk7CiAgICBzd2FwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4NTUKICAgIC8vIHRoaXMucGx1Z2lucyhhcHApLmRlbGV0ZSgpOwogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODU3CiAgICAvLyBpZiAodGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSAhPT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MpIHsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGNvbnRyb2xsZWRBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0NvbnRyb2xsZWRBZGRyZXNzIH0pOwogICAgYnl0ZWNfMCAvLyAiY29udHJvbGxlZF9hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg1NwogICAgLy8gaWYgKHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUgIT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzKSB7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgICE9CiAgICBieiBhcmM1OF9yZW1vdmVOYW1lZFBsdWdpbl9hZnRlcl9pZl9lbHNlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4NTgtODYzCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICBhbW91bnQ6IHRoaXMubmFtZWRQbHVnaW5zTWJyKG5hbWUpICsgdGhpcy5wbHVnaW5zTWJyKGFwcC5lc2Nyb3csIG1ldGhvZHNMZW5ndGgpCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg2MAogICAgLy8gcmVjZWl2ZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBjb250cm9sbGVkQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNDb250cm9sbGVkQWRkcmVzcyB9KTsKICAgIGJ5dGVjXzAgLy8gImNvbnRyb2xsZWRfYWRkcmVzcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4NjAKICAgIC8vIHJlY2VpdmVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1OAogICAgLy8gcmV0dXJuIE1pbk5hbWVkUGx1Z2luTUJSICsgKEJveENvc3RQZXJCeXRlICogQnl0ZXMobmFtZSkubGVuZ3RoKTsKICAgIGRpZyAzCiAgICBsZW4KICAgIGludGMgNCAvLyA0MDAKICAgICoKICAgIGludGMgNSAvLyAyMTcwMAogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg2MQogICAgLy8gYW1vdW50OiB0aGlzLm5hbWVkUGx1Z2luc01icihuYW1lKSArIHRoaXMucGx1Z2luc01icihhcHAuZXNjcm93LCBtZXRob2RzTGVuZ3RoKQogICAgZGlnIDMKICAgIGR1cAogICAgcHVzaGludCA0MCAvLyA0MAogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAxCiAgICBsZW4KICAgIHN1YnN0cmluZzMKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMwogICAgY2FsbHN1YiBwbHVnaW5zTWJyCiAgICArCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg1OC04NjIKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHJlY2VpdmVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIGFtb3VudDogdGhpcy5uYW1lZFBsdWdpbnNNYnIobmFtZSkgKyB0aGlzLnBsdWdpbnNNYnIoYXBwLmVzY3JvdywgbWV0aG9kc0xlbmd0aCkKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4NTgtODYzCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICBhbW91bnQ6IHRoaXMubmFtZWRQbHVnaW5zTWJyKG5hbWUpICsgdGhpcy5wbHVnaW5zTWJyKGFwcC5lc2Nyb3csIG1ldGhvZHNMZW5ndGgpCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKCmFyYzU4X3JlbW92ZU5hbWVkUGx1Z2luX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gbGFzdFVzZXJJbnRlcmFjdGlvbiA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0xhc3RVc2VySW50ZXJhY3Rpb24gfSkKICAgIGJ5dGVjXzMgLy8gImxhc3RfdXNlcl9pbnRlcmFjdGlvbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NAogICAgLy8gdGhpcy5sYXN0VXNlckludGVyYWN0aW9uLnZhbHVlID0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMgogICAgLy8gbGFzdENoYW5nZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0xhc3RDaGFuZ2UgfSkKICAgIGJ5dGVjIDYgLy8gImxhc3RfY2hhbmdlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyB0aGlzLmxhc3RDaGFuZ2UudmFsdWUgPSBHbG9iYWwubGF0ZXN0VGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg0NgogICAgLy8gYXJjNThfcmVtb3ZlTmFtZWRQbHVnaW4obmFtZTogc3RyaW5nKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9uZXdFc2Nyb3dbcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF9uZXdFc2Nyb3c6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODc1CiAgICAvLyBhcmM1OF9uZXdFc2Nyb3coZXNjcm93OiBzdHJpbmcpOiB1aW50NjQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODc2CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSwgRVJSX0FETUlOX09OTFkpOwogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNgogICAgLy8gYWRtaW4gPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQWRtaW4gfSkKICAgIGJ5dGVjXzIgLy8gImFkbWluIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg3NgogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuYWRtaW4udmFsdWUsIEVSUl9BRE1JTl9PTkxZKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIGFkbWluIG9ubHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNwogICAgLy8gZXNjcm93cyA9IEJveE1hcDxzdHJpbmcsIEVzY3Jvd0luZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhFc2Nyb3dzIH0pCiAgICBieXRlYyA1IC8vICJlIgogICAgZGlnIDEKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg3NwogICAgLy8gYXNzZXJ0KCF0aGlzLmVzY3Jvd3MoZXNjcm93KS5leGlzdHMsIEVSUl9FU0NST1dfQUxSRUFEWV9FWElTVFMpOwogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gZXNjcm93IGFscmVhZHkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODc4CiAgICAvLyBhc3NlcnQoZXNjcm93ICE9PSAnJywgRVJSX0VTQ1JPV19OQU1FX1JFUVVJUkVEKTsKICAgIGR1cAogICAgYnl0ZWNfMSAvLyAiIgogICAgIT0KICAgIGFzc2VydCAvLyBFc2Nyb3cgbmFtZSBpcyByZXF1aXJlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg3OQogICAgLy8gcmV0dXJuIHRoaXMubmV3RXNjcm93KGVzY3Jvdyk7CiAgICBjYWxsc3ViIG5ld0VzY3JvdwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg3NQogICAgLy8gYXJjNThfbmV3RXNjcm93KGVzY3Jvdzogc3RyaW5nKTogdWludDY0IHsKICAgIGl0b2IKICAgIGJ5dGVjIDcgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3RvZ2dsZUVzY3Jvd0xvY2tbcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF90b2dnbGVFc2Nyb3dMb2NrOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg4NwogICAgLy8gYXJjNThfdG9nZ2xlRXNjcm93TG9jayhlc2Nyb3c6IHN0cmluZyk6IEVzY3Jvd0luZm8gewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODg4CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSwgRVJSX0FETUlOX09OTFkpOwogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNgogICAgLy8gYWRtaW4gPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQWRtaW4gfSkKICAgIGJ5dGVjXzIgLy8gImFkbWluIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg4OAogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuYWRtaW4udmFsdWUsIEVSUl9BRE1JTl9PTkxZKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIGFkbWluIG9ubHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNwogICAgLy8gZXNjcm93cyA9IEJveE1hcDxzdHJpbmcsIEVzY3Jvd0luZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhFc2Nyb3dzIH0pCiAgICBieXRlYyA1IC8vICJlIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODg5CiAgICAvLyBhc3NlcnQodGhpcy5lc2Nyb3dzKGVzY3JvdykuZXhpc3RzLCBFUlJfRVNDUk9XX0RPRVNfTk9UX0VYSVNUKTsKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gZXNjcm93IGRvZXMgbm90IGV4aXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODkxCiAgICAvLyB0aGlzLmVzY3Jvd3MoZXNjcm93KS52YWx1ZS5sb2NrZWQgPSAhdGhpcy5lc2Nyb3dzKGVzY3JvdykudmFsdWUubG9ja2VkOwogICAgZHVwCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIHB1c2hpbnQgNjQgLy8gNjQKICAgIGdldGJpdAogICAgIQogICAgZGlnIDEKICAgIGludGNfMyAvLyA4CiAgICBpbnRjXzEgLy8gMQogICAgYm94X2V4dHJhY3QKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgZGlnIDEKICAgIGludGNfMyAvLyA4CiAgICB1bmNvdmVyIDIKICAgIGJveF9yZXBsYWNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIGxhc3RVc2VySW50ZXJhY3Rpb24gPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNMYXN0VXNlckludGVyYWN0aW9uIH0pCiAgICBieXRlY18zIC8vICJsYXN0X3VzZXJfaW50ZXJhY3Rpb24iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHRoaXMubGFzdFVzZXJJbnRlcmFjdGlvbi52YWx1ZSA9IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjIKICAgIC8vIGxhc3RDaGFuZ2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNMYXN0Q2hhbmdlIH0pCiAgICBieXRlYyA2IC8vICJsYXN0X2NoYW5nZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0OAogICAgLy8gdGhpcy5sYXN0Q2hhbmdlLnZhbHVlID0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4OTYKICAgIC8vIHJldHVybiB0aGlzLmVzY3Jvd3MoZXNjcm93KS52YWx1ZTsKICAgIGJveF9nZXQKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg4NwogICAgLy8gYXJjNThfdG9nZ2xlRXNjcm93TG9jayhlc2Nyb3c6IHN0cmluZyk6IEVzY3Jvd0luZm8gewogICAgYnl0ZWMgNyAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVjbGFpbVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmFyYzU4X3JlY2xhaW06CiAgICBpbnRjXzAgLy8gMAogICAgZHVwCiAgICBieXRlY18xIC8vICIiCiAgICBkdXBuIDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MDUKICAgIC8vIGFyYzU4X3JlY2xhaW0oZXNjcm93OiBzdHJpbmcsIHJlY2xhaW1zOiBFc2Nyb3dSZWNsYWltW10pOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbit1dGY4W10pCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwCiAgICBjb3ZlciAzCiAgICBwdXNoaW50IDE3IC8vIDE3CiAgICAqCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgc3dhcAogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuKyh1aW50NjQsdWludDY0LGJvb2wxKVtdKQogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTA2CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSwgRVJSX0ZPUkJJRERFTik7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE2CiAgICAvLyBhZG1pbiA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNBZG1pbiB9KQogICAgYnl0ZWNfMiAvLyAiYWRtaW4iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTA2CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSwgRVJSX0ZPUkJJRERFTik7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBmb3JiaWRkZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNwogICAgLy8gZXNjcm93cyA9IEJveE1hcDxzdHJpbmcsIEVzY3Jvd0luZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhFc2Nyb3dzIH0pCiAgICBieXRlYyA1IC8vICJlIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTA3CiAgICAvLyBhc3NlcnQodGhpcy5lc2Nyb3dzKGVzY3JvdykuZXhpc3RzLCBFUlJfRVNDUk9XX0RPRVNfTk9UX0VYSVNUKTsKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gZXNjcm93IGRvZXMgbm90IGV4aXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTA4CiAgICAvLyBjb25zdCBzZW5kZXIgPSBBcHBsaWNhdGlvbih0aGlzLmVzY3Jvd3MoZXNjcm93KS52YWx1ZS5pZCkuYWRkcmVzcwogICAgYm94X2dldAogICAgcG9wCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MTAKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCByZWNsYWltcy5sZW5ndGg7IGkgKz0gMSkgewogICAgaW50Y18wIC8vIDAKCmFyYzU4X3JlY2xhaW1fd2hpbGVfdG9wQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTEwCiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgcmVjbGFpbXMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGR1cAogICAgZGlnIDUKICAgIDwKICAgIGJ6IGFyYzU4X3JlY2xhaW1fYWZ0ZXJfd2hpbGVAMTcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MTEKICAgIC8vIGlmIChyZWNsYWltc1tpXS5hc3NldCA9PT0gMCkgewogICAgZGlnIDUKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMQogICAgcHVzaGludCAxNyAvLyAxNwogICAgKgogICAgcHVzaGludCAxNyAvLyAxNwogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZHVwCiAgICBidXJ5IDEyCiAgICBibnogYXJjNThfcmVjbGFpbV9lbHNlX2JvZHlAMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MTQKICAgIC8vIHJlY2VpdmVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29udHJvbGxlZEFkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ29udHJvbGxlZEFkZHJlc3MgfSk7CiAgICBieXRlY18wIC8vICJjb250cm9sbGVkX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTE0CiAgICAvLyByZWNlaXZlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBidXJ5IDE1CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTE1CiAgICAvLyBhbW91bnQ6IHJlY2xhaW1zW2ldLmFtb3VudAogICAgZHVwCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIGJ1cnkgMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MTIKICAgIC8vIGNvbnN0IHBtdCA9IGl0eG4ucGF5bWVudCh7CiAgICBpbnRjXzAgLy8gMAogICAgYnVyeSAxMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjkxOAogICAgLy8gaWYgKHJlY2xhaW1zW2ldLmNsb3NlT3V0KSB7CiAgICBwdXNoaW50IDEyOCAvLyAxMjgKICAgIGdldGJpdAogICAgYnogYXJjNThfcmVjbGFpbV9hZnRlcl9pZl9lbHNlQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MTkKICAgIC8vIHBtdC5zZXQoeyBjbG9zZVJlbWFpbmRlclRvOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlIH0pOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29udHJvbGxlZEFkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ29udHJvbGxlZEFkZHJlc3MgfSk7CiAgICBieXRlY18wIC8vICJjb250cm9sbGVkX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTE5CiAgICAvLyBwbXQuc2V0KHsgY2xvc2VSZW1haW5kZXJUbzogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSB9KTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpbnRjXzEgLy8gMQogICAgYnVyeSAxMgogICAgYnVyeSAzCgphcmM1OF9yZWNsYWltX2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MjIKICAgIC8vIHBtdC5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIGRpZyAxMAogICAgYnogYXJjNThfcmVjbGFpbV9uZXh0X2ZpZWxkQDgKICAgIGRpZyAyCiAgICBpdHhuX2ZpZWxkIENsb3NlUmVtYWluZGVyVG8KCmFyYzU4X3JlY2xhaW1fbmV4dF9maWVsZEA4OgogICAgZGlnIDgKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBkaWcgMTIKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjkxMi05MTYKICAgIC8vIGNvbnN0IHBtdCA9IGl0eG4ucGF5bWVudCh7CiAgICAvLyAgIHNlbmRlciwKICAgIC8vICAgcmVjZWl2ZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgIGFtb3VudDogcmVjbGFpbXNbaV0uYW1vdW50CiAgICAvLyB9KQogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjkyMgogICAgLy8gcG10LnN1Ym1pdCgpOwogICAgaXR4bl9zdWJtaXQKCmFyYzU4X3JlY2xhaW1fYWZ0ZXJfaWZfZWxzZUAxNjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MTAKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCByZWNsYWltcy5sZW5ndGg7IGkgKz0gMSkgewogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIGFyYzU4X3JlY2xhaW1fd2hpbGVfdG9wQDIKCmFyYzU4X3JlY2xhaW1fZWxzZV9ib2R5QDEwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjkyNgogICAgLy8gYXNzZXRSZWNlaXZlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGNvbnRyb2xsZWRBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0NvbnRyb2xsZWRBZGRyZXNzIH0pOwogICAgYnl0ZWNfMCAvLyAiY29udHJvbGxlZF9hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjkyNgogICAgLy8gYXNzZXRSZWNlaXZlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBidXJ5IDE0CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTI3CiAgICAvLyBhc3NldEFtb3VudDogcmVjbGFpbXNbaV0uYW1vdW50LAogICAgZHVwCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIGJ1cnkgOQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjkyNAogICAgLy8gY29uc3QgeGZlciA9IGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICBpbnRjXzAgLy8gMAogICAgYnVyeSA4CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTMxCiAgICAvLyBpZiAocmVjbGFpbXNbaV0uY2xvc2VPdXQpIHsKICAgIHB1c2hpbnQgMTI4IC8vIDEyOAogICAgZ2V0Yml0CiAgICBieiBhcmM1OF9yZWNsYWltX2FmdGVyX2lmX2Vsc2VAMTIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MzIKICAgIC8vIHhmZXIuc2V0KHsgYXNzZXRDbG9zZVRvOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlIH0pOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29udHJvbGxlZEFkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ29udHJvbGxlZEFkZHJlc3MgfSk7CiAgICBieXRlY18wIC8vICJjb250cm9sbGVkX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTMyCiAgICAvLyB4ZmVyLnNldCh7IGFzc2V0Q2xvc2VUbzogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSB9KTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpbnRjXzEgLy8gMQogICAgYnVyeSA4CiAgICBidXJ5IDQKCmFyYzU4X3JlY2xhaW1fYWZ0ZXJfaWZfZWxzZUAxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MzUKICAgIC8vIHhmZXIuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICBkaWcgNgogICAgYnogYXJjNThfcmVjbGFpbV9uZXh0X2ZpZWxkQDE0CiAgICBkaWcgMwogICAgaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCmFyYzU4X3JlY2xhaW1fbmV4dF9maWVsZEAxNDoKICAgIGRpZyA5CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgZGlnIDcKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGRpZyAxMQogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBkaWcgMQogICAgaXR4bl9maWVsZCBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MjQtOTI5CiAgICAvLyBjb25zdCB4ZmVyID0gaXR4bi5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgc2VuZGVyLAogICAgLy8gICBhc3NldFJlY2VpdmVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICBhc3NldEFtb3VudDogcmVjbGFpbXNbaV0uYW1vdW50LAogICAgLy8gICB4ZmVyQXNzZXQ6IHJlY2xhaW1zW2ldLmFzc2V0CiAgICAvLyB9KQogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjkzNQogICAgLy8geGZlci5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0CiAgICBiIGFyYzU4X3JlY2xhaW1fYWZ0ZXJfaWZfZWxzZUAxNgoKYXJjNThfcmVjbGFpbV9hZnRlcl93aGlsZUAxNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MDUKICAgIC8vIGFyYzU4X3JlY2xhaW0oZXNjcm93OiBzdHJpbmcsIHJlY2xhaW1zOiBFc2Nyb3dSZWNsYWltW10pOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X29wdGluRXNjcm93W3JvdXRpbmddKCkgLT4gdm9pZDoKYXJjNThfb3B0aW5Fc2Nyb3c6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTQ2CiAgICAvLyBhcmM1OF9vcHRpbkVzY3Jvdyhlc2Nyb3c6IHN0cmluZywgYXNzZXRzOiB1aW50NjRbXSk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICBkdXAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgY292ZXIgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cAogICAgY292ZXIgMwogICAgZHVwCiAgICBpbnRjXzMgLy8gOAogICAgKgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIHVuY292ZXIgMgogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3VpbnQ2NFtdKQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjk0NwogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuYWRtaW4udmFsdWUsIEVSUl9GT1JCSURERU4pOwogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNgogICAgLy8gYWRtaW4gPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQWRtaW4gfSkKICAgIGJ5dGVjXzIgLy8gImFkbWluIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjk0NwogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuYWRtaW4udmFsdWUsIEVSUl9GT1JCSURERU4pOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gZm9yYmlkZGVuCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzcKICAgIC8vIGVzY3Jvd3MgPSBCb3hNYXA8c3RyaW5nLCBFc2Nyb3dJbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4RXNjcm93cyB9KQogICAgYnl0ZWMgNSAvLyAiZSIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTQ4CiAgICAvLyBhc3NlcnQodGhpcy5lc2Nyb3dzKGVzY3JvdykuZXhpc3RzLCBFUlJfRVNDUk9XX0RPRVNfTk9UX0VYSVNUKQogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBlc2Nyb3cgZG9lcyBub3QgZXhpc3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5NDkKICAgIC8vIGNvbnN0IGVzY3Jvd0lEID0gdGhpcy5lc2Nyb3dzKGVzY3JvdykudmFsdWUuaWQKICAgIGJveF9nZXQKICAgIHBvcAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5NTAKICAgIC8vIGNvbnN0IGVzY3Jvd0FkZHJlc3MgPSBBcHBsaWNhdGlvbihlc2Nyb3dJRCkuYWRkcmVzcwogICAgYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAzCiAgICBjb3ZlciA0CiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTUxCiAgICAvLyBhc3NlcnQoIXRoaXMuZXNjcm93cyhlc2Nyb3cpLnZhbHVlLmxvY2tlZCwgRVJSX0VTQ1JPV19MT0NLRUQpCiAgICBwdXNoaW50IDY0IC8vIDY0CiAgICBnZXRiaXQKICAgICEKICAgIGFzc2VydCAvLyBFc2Nyb3cgaXMgbG9ja2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTUzLTk1OQogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIHJlY2VpdmVyOiBlc2Nyb3dBZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogR2xvYmFsLmFzc2V0T3B0SW5NaW5CYWxhbmNlICogYXNzZXRzLmxlbmd0aAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTU1CiAgICAvLyBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBjb250cm9sbGVkQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNDb250cm9sbGVkQWRkcmVzcyB9KTsKICAgIGJ5dGVjXzAgLy8gImNvbnRyb2xsZWRfYWRkcmVzcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5NTUKICAgIC8vIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTU3CiAgICAvLyBhbW91bnQ6IEdsb2JhbC5hc3NldE9wdEluTWluQmFsYW5jZSAqIGFzc2V0cy5sZW5ndGgKICAgIGdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQogICAgdW5jb3ZlciAzCiAgICAqCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaXR4bl9maWVsZCBTZW5kZXIKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5NTMtOTU4CiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgcmVjZWl2ZXI6IGVzY3Jvd0FkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiBHbG9iYWwuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKiBhc3NldHMubGVuZ3RoCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTUzLTk1OQogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIHJlY2VpdmVyOiBlc2Nyb3dBZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogR2xvYmFsLmFzc2V0T3B0SW5NaW5CYWxhbmNlICogYXNzZXRzLmxlbmd0aAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjk2MQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGFzc2V0cy5sZW5ndGg7IGkgKz0gMSkgewogICAgaW50Y18wIC8vIDAKCmFyYzU4X29wdGluRXNjcm93X3doaWxlX3RvcEAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjk2MQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGFzc2V0cy5sZW5ndGg7IGkgKz0gMSkgewogICAgZHVwCiAgICBkaWcgMwogICAgPAogICAgYnogYXJjNThfb3B0aW5Fc2Nyb3dfYWZ0ZXJfd2hpbGVANgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjk2MwogICAgLy8gdGhpcy5hbGxvd2FuY2VzKHsgZXNjcm93LCBhc3NldDogYXNzZXRzW2ldIH0pLmV4aXN0cywKICAgIGRpZyAzCiAgICBleHRyYWN0IDIgMAogICAgZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGV4dHJhY3RfdWludDY0CiAgICBkaWcgNgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBpdG9iCiAgICBieXRlYyAxMyAvLyAweDAwMGEKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGFsbG93YW5jZXMgPSBCb3hNYXA8QWxsb3dhbmNlS2V5LCBBbGxvd2FuY2VJbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4QWxsb3dhbmNlcyB9KSAvLyAzOF81MDAKICAgIGJ5dGVjIDE0IC8vICJhIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTYzCiAgICAvLyB0aGlzLmFsbG93YW5jZXMoeyBlc2Nyb3csIGFzc2V0OiBhc3NldHNbaV0gfSkuZXhpc3RzLAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTYyLTk2NQogICAgLy8gYXNzZXJ0KAogICAgLy8gICB0aGlzLmFsbG93YW5jZXMoeyBlc2Nyb3csIGFzc2V0OiBhc3NldHNbaV0gfSkuZXhpc3RzLAogICAgLy8gICBFUlJfQUxMT1dBTkNFX0RPRVNfTk9UX0VYSVNUCiAgICAvLyApOwogICAgYXNzZXJ0IC8vIGFsbG93YW5jZSBkb2VzIG5vdCBleGlzdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjk2Ny05NzQKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIHNlbmRlcjogZXNjcm93QWRkcmVzcywKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBlc2Nyb3dBZGRyZXNzLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIHhmZXJBc3NldDogYXNzZXRzW2ldCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTcxCiAgICAvLyBhc3NldEFtb3VudDogMCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBkaWcgMgogICAgZHVwCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTY3LTk3MwogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgc2VuZGVyOiBlc2Nyb3dBZGRyZXNzLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IGVzY3Jvd0FkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDAsCiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldHNbaV0KICAgIC8vICAgfSkKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5NjctOTc0CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBzZW5kZXI6IGVzY3Jvd0FkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogZXNjcm93QWRkcmVzcywKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0c1tpXQogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjk2MQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGFzc2V0cy5sZW5ndGg7IGkgKz0gMSkgewogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiBhcmM1OF9vcHRpbkVzY3Jvd193aGlsZV90b3BAMwoKYXJjNThfb3B0aW5Fc2Nyb3dfYWZ0ZXJfd2hpbGVANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5NDYKICAgIC8vIGFyYzU4X29wdGluRXNjcm93KGVzY3Jvdzogc3RyaW5nLCBhc3NldHM6IHVpbnQ2NFtdKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9wbHVnaW5PcHRpbkVzY3Jvd1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmFyYzU4X3BsdWdpbk9wdGluRXNjcm93OgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gIiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5ODYtOTkyCiAgICAvLyBhcmM1OF9wbHVnaW5PcHRpbkVzY3JvdygKICAgIC8vICAgcGx1Z2luOiB1aW50NjQsCiAgICAvLyAgIGNhbGxlcjogQWRkcmVzcywKICAgIC8vICAgZXNjcm93OiBzdHJpbmcsCiAgICAvLyAgIGFzc2V0czogdWludDY0W10sCiAgICAvLyAgIG1iclBheW1lbnQ6IGd0eG4uUGF5bWVudFR4bgogICAgLy8gKTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDhbMzJdCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdXRmOFtdKQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgY292ZXIgNAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cAogICAgY292ZXIgNQogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdWludDY0W10pCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgY292ZXIgNAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5OTMKICAgIC8vIGNvbnN0IGtleTogUGx1Z2luS2V5ID0geyBwbHVnaW4sIGNhbGxlcjogY2FsbGVyLm5hdGl2ZSwgZXNjcm93IH0KICAgIGRpZyAyCiAgICBpdG9iCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIGR1cAogICAgY292ZXIgNAogICAgc3dhcAogICAgYnl0ZWMgMTIgLy8gMHgwMDJhCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBwbHVnaW5zID0gQm94TWFwPFBsdWdpbktleSwgUGx1Z2luSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeFBsdWdpbnMgfSk7CiAgICBieXRlYyA0IC8vICJwIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTk1CiAgICAvLyBhc3NlcnQodGhpcy5wbHVnaW5zKGtleSkuZXhpc3RzLCBFUlJfUExVR0lOX0RPRVNfTk9UX0VYSVNUKQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gcGx1Z2luIGRvZXMgbm90IGV4aXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzcKICAgIC8vIGVzY3Jvd3MgPSBCb3hNYXA8c3RyaW5nLCBFc2Nyb3dJbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4RXNjcm93cyB9KQogICAgYnl0ZWMgNSAvLyAiZSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjk5NgogICAgLy8gYXNzZXJ0KHRoaXMuZXNjcm93cyhlc2Nyb3cpLmV4aXN0cywgRVJSX0VTQ1JPV19ET0VTX05PVF9FWElTVCkKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gZXNjcm93IGRvZXMgbm90IGV4aXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTk3CiAgICAvLyBhc3NlcnQoIXRoaXMuZXNjcm93cyhlc2Nyb3cpLnZhbHVlLmxvY2tlZCwgRVJSX0VTQ1JPV19MT0NLRUQpCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIGR1cAogICAgcHVzaGludCA2NCAvLyA2NAogICAgZ2V0Yml0CiAgICAhCiAgICBhc3NlcnQgLy8gRXNjcm93IGlzIGxvY2tlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjk5OQogICAgLy8gY29uc3QgZXNjcm93SUQgPSB0aGlzLmVzY3Jvd3MoZXNjcm93KS52YWx1ZS5pZAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTAwMgogICAgLy8gVHhuLnNlbmRlciA9PT0gQXBwbGljYXRpb24ocGx1Z2luKS5hZGRyZXNzIHx8CiAgICB0eG4gU2VuZGVyCiAgICBzd2FwCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwMDItMTAwMwogICAgLy8gVHhuLnNlbmRlciA9PT0gQXBwbGljYXRpb24ocGx1Z2luKS5hZGRyZXNzIHx8CiAgICAvLyBUeG4uc2VuZGVyID09PSBjYWxsZXIubmF0aXZlIHx8CiAgICBibnogYXJjNThfcGx1Z2luT3B0aW5Fc2Nyb3dfYm9vbF90cnVlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDAzCiAgICAvLyBUeG4uc2VuZGVyID09PSBjYWxsZXIubmF0aXZlIHx8CiAgICB0eG4gU2VuZGVyCiAgICBkaWcgNgogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDAyLTEwMDMKICAgIC8vIFR4bi5zZW5kZXIgPT09IEFwcGxpY2F0aW9uKHBsdWdpbikuYWRkcmVzcyB8fAogICAgLy8gVHhuLnNlbmRlciA9PT0gY2FsbGVyLm5hdGl2ZSB8fAogICAgYm56IGFyYzU4X3BsdWdpbk9wdGluRXNjcm93X2Jvb2xfdHJ1ZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTAwNAogICAgLy8gY2FsbGVyLm5hdGl2ZSA9PT0gR2xvYmFsLnplcm9BZGRyZXNzLAogICAgZGlnIDUKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDAyLTEwMDQKICAgIC8vIFR4bi5zZW5kZXIgPT09IEFwcGxpY2F0aW9uKHBsdWdpbikuYWRkcmVzcyB8fAogICAgLy8gVHhuLnNlbmRlciA9PT0gY2FsbGVyLm5hdGl2ZSB8fAogICAgLy8gY2FsbGVyLm5hdGl2ZSA9PT0gR2xvYmFsLnplcm9BZGRyZXNzLAogICAgYnogYXJjNThfcGx1Z2luT3B0aW5Fc2Nyb3dfYm9vbF9mYWxzZUA1CgphcmM1OF9wbHVnaW5PcHRpbkVzY3Jvd19ib29sX3RydWVANDoKICAgIGludGNfMSAvLyAxCgphcmM1OF9wbHVnaW5PcHRpbkVzY3Jvd19ib29sX21lcmdlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTAwMS0xMDA2CiAgICAvLyBhc3NlcnQoCiAgICAvLyAgIFR4bi5zZW5kZXIgPT09IEFwcGxpY2F0aW9uKHBsdWdpbikuYWRkcmVzcyB8fAogICAgLy8gICBUeG4uc2VuZGVyID09PSBjYWxsZXIubmF0aXZlIHx8CiAgICAvLyAgIGNhbGxlci5uYXRpdmUgPT09IEdsb2JhbC56ZXJvQWRkcmVzcywKICAgIC8vICAgRVJSX0ZPUkJJRERFTgogICAgLy8gKQogICAgYXNzZXJ0IC8vIGZvcmJpZGRlbgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwMDgKICAgIC8vIGNvbnN0IGVzY3Jvd0FkZHJlc3MgPSBBcHBsaWNhdGlvbihlc2Nyb3dJRCkuYWRkcmVzcwogICAgZHVwCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGJ1cnkgMTAKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDEwLTEwMTcKICAgIC8vIGFzc2VydE1hdGNoKAogICAgLy8gICBtYnJQYXltZW50LAogICAgLy8gICB7CiAgICAvLyAgICAgcmVjZWl2ZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgYW1vdW50OiBHbG9iYWwuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKiBhc3NldHMubGVuZ3RoCiAgICAvLyAgIH0sCiAgICAvLyAgIEVSUl9JTlZBTElEX1BBWU1FTlQKICAgIC8vICkKICAgIGRpZyAzCiAgICBkdXAKICAgIGd0eG5zIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTAxMwogICAgLy8gcmVjZWl2ZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBjb250cm9sbGVkQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNDb250cm9sbGVkQWRkcmVzcyB9KTsKICAgIGJ5dGVjXzAgLy8gImNvbnRyb2xsZWRfYWRkcmVzcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDEzCiAgICAvLyByZWNlaXZlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTAxMC0xMDE3CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgbWJyUGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIGFtb3VudDogR2xvYmFsLmFzc2V0T3B0SW5NaW5CYWxhbmNlICogYXNzZXRzLmxlbmd0aAogICAgLy8gICB9LAogICAgLy8gICBFUlJfSU5WQUxJRF9QQVlNRU5UCiAgICAvLyApCiAgICBzd2FwCiAgICBkaWcgMQogICAgPT0KICAgIHVuY292ZXIgMgogICAgZ3R4bnMgQW1vdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTAxNAogICAgLy8gYW1vdW50OiBHbG9iYWwuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKiBhc3NldHMubGVuZ3RoCiAgICBnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKICAgIGRpZyA4CiAgICBkdXAKICAgIGNvdmVyIDQKICAgICoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDEwLTEwMTcKICAgIC8vIGFzc2VydE1hdGNoKAogICAgLy8gICBtYnJQYXltZW50LAogICAgLy8gICB7CiAgICAvLyAgICAgcmVjZWl2ZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgYW1vdW50OiBHbG9iYWwuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKiBhc3NldHMubGVuZ3RoCiAgICAvLyAgIH0sCiAgICAvLyAgIEVSUl9JTlZBTElEX1BBWU1FTlQKICAgIC8vICkKICAgID09CiAgICAmJgogICAgYXNzZXJ0IC8vIGludmFsaWQgcGF5bWVudAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwMTktMTAyNQogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIHJlY2VpdmVyOiBlc2Nyb3dBZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogR2xvYmFsLmFzc2V0T3B0SW5NaW5CYWxhbmNlICogYXNzZXRzLmxlbmd0aAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTAyMwogICAgLy8gYW1vdW50OiBHbG9iYWwuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKiBhc3NldHMubGVuZ3RoCiAgICBnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKICAgICoKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpdHhuX2ZpZWxkIFNlbmRlcgogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwMTktMTAyNAogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIHJlY2VpdmVyOiBlc2Nyb3dBZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogR2xvYmFsLmFzc2V0T3B0SW5NaW5CYWxhbmNlICogYXNzZXRzLmxlbmd0aAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwMTktMTAyNQogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIHJlY2VpdmVyOiBlc2Nyb3dBZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogR2xvYmFsLmFzc2V0T3B0SW5NaW5CYWxhbmNlICogYXNzZXRzLmxlbmd0aAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwMjcKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhc3NldHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMCAvLyAwCiAgICBidXJ5IDcKCmFyYzU4X3BsdWdpbk9wdGluRXNjcm93X3doaWxlX3RvcEA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwMjcKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhc3NldHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGRpZyA2CiAgICBkaWcgNAogICAgPAogICAgYnogYXJjNThfcGx1Z2luT3B0aW5Fc2Nyb3dfYWZ0ZXJfd2hpbGVAMTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDI5CiAgICAvLyB0aGlzLmFsbG93YW5jZXMoeyBlc2Nyb3csIGFzc2V0OiBhc3NldHNbaV0gfSkuZXhpc3RzLAogICAgZGlnIDQKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgNwogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzMgLy8gOAogICAgKgogICAgZXh0cmFjdF91aW50NjQKICAgIGR1cAogICAgaXRvYgogICAgYnl0ZWMgMTMgLy8gMHgwMDBhCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGRpZyA0CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozOQogICAgLy8gYWxsb3dhbmNlcyA9IEJveE1hcDxBbGxvd2FuY2VLZXksIEFsbG93YW5jZUluZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhBbGxvd2FuY2VzIH0pIC8vIDM4XzUwMAogICAgYnl0ZWMgMTQgLy8gImEiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDI5CiAgICAvLyB0aGlzLmFsbG93YW5jZXMoeyBlc2Nyb3csIGFzc2V0OiBhc3NldHNbaV0gfSkuZXhpc3RzLAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTAyOC0xMDMxCiAgICAvLyBhc3NlcnQoCiAgICAvLyAgIHRoaXMuYWxsb3dhbmNlcyh7IGVzY3JvdywgYXNzZXQ6IGFzc2V0c1tpXSB9KS5leGlzdHMsCiAgICAvLyAgIEVSUl9BTExPV0FOQ0VfRE9FU19OT1RfRVhJU1QKICAgIC8vICk7CiAgICBhc3NlcnQgLy8gYWxsb3dhbmNlIGRvZXMgbm90IGV4aXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTAzMy0xMDQwCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBzZW5kZXI6IGVzY3Jvd0FkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogZXNjcm93QWRkcmVzcywKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0c1tpXQogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwMzcKICAgIC8vIGFzc2V0QW1vdW50OiAwLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGRpZyA4CiAgICBkdXAKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDMzLTEwMzkKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIHNlbmRlcjogZXNjcm93QWRkcmVzcywKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBlc2Nyb3dBZGRyZXNzLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIHhmZXJBc3NldDogYXNzZXRzW2ldCiAgICAvLyAgIH0pCiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTAzMy0xMDQwCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBzZW5kZXI6IGVzY3Jvd0FkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogZXNjcm93QWRkcmVzcywKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0c1tpXQogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwMjcKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhc3NldHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDcKICAgIGIgYXJjNThfcGx1Z2luT3B0aW5Fc2Nyb3dfd2hpbGVfdG9wQDgKCmFyYzU4X3BsdWdpbk9wdGluRXNjcm93X2FmdGVyX3doaWxlQDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjk4Ni05OTIKICAgIC8vIGFyYzU4X3BsdWdpbk9wdGluRXNjcm93KAogICAgLy8gICBwbHVnaW46IHVpbnQ2NCwKICAgIC8vICAgY2FsbGVyOiBBZGRyZXNzLAogICAgLy8gICBlc2Nyb3c6IHN0cmluZywKICAgIC8vICAgYXNzZXRzOiB1aW50NjRbXSwKICAgIC8vICAgbWJyUGF5bWVudDogZ3R4bi5QYXltZW50VHhuCiAgICAvLyApOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmFyYzU4X3BsdWdpbk9wdGluRXNjcm93X2Jvb2xfZmFsc2VANToKICAgIGludGNfMCAvLyAwCiAgICBiIGFyYzU4X3BsdWdpbk9wdGluRXNjcm93X2Jvb2xfbWVyZ2VANgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfYWRkQWxsb3dhbmNlc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmFyYzU4X2FkZEFsbG93YW5jZXM6CiAgICBpbnRjXzAgLy8gMAogICAgZHVwbiA0CiAgICBieXRlY18xIC8vICIiCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDUwCiAgICAvLyBhcmM1OF9hZGRBbGxvd2FuY2VzKGVzY3Jvdzogc3RyaW5nLCBhbGxvd2FuY2VzOiBBZGRBbGxvd2FuY2VJbmZvW10pOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbit1dGY4W10pCiAgICBleHRyYWN0IDIgMAogICAgZHVwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAKICAgIGNvdmVyIDMKICAgIHB1c2hpbnQgMzQgLy8gMzQKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rKHVpbnQ2NCx1aW50OCx1aW50NjQsdWludDY0LHVpbnQ2NCxib29sMSlbXSkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDUxCiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSwgRVJSX0FETUlOX09OTFkpOwogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNgogICAgLy8gYWRtaW4gPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQWRtaW4gfSkKICAgIGJ5dGVjXzIgLy8gImFkbWluIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwNTEKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSB0aGlzLmFkbWluLnZhbHVlLCBFUlJfQURNSU5fT05MWSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBhZG1pbiBvbmx5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzcKICAgIC8vIGVzY3Jvd3MgPSBCb3hNYXA8c3RyaW5nLCBFc2Nyb3dJbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4RXNjcm93cyB9KQogICAgYnl0ZWMgNSAvLyAiZSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwNTIKICAgIC8vIGFzc2VydCh0aGlzLmVzY3Jvd3MoZXNjcm93KS5leGlzdHMsIEVSUl9FU0NST1dfRE9FU19OT1RfRVhJU1QpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBlc2Nyb3cgZG9lcyBub3QgZXhpc3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDUzCiAgICAvLyBhc3NlcnQoIXRoaXMuZXNjcm93cyhlc2Nyb3cpLnZhbHVlLmxvY2tlZCwgRVJSX0VTQ1JPV19MT0NLRUQpOwogICAgYm94X2dldAogICAgcG9wCiAgICBwdXNoaW50IDY0IC8vIDY0CiAgICBnZXRiaXQKICAgICEKICAgIGFzc2VydCAvLyBFc2Nyb3cgaXMgbG9ja2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTA1NQogICAgLy8gaWYgKHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUgIT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzKSB7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBjb250cm9sbGVkQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNDb250cm9sbGVkQWRkcmVzcyB9KTsKICAgIGJ5dGVjXzAgLy8gImNvbnRyb2xsZWRfYWRkcmVzcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDU1CiAgICAvLyBpZiAodGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSAhPT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MpIHsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgIT0KICAgIGJ6IGFyYzU4X2FkZEFsbG93YW5jZXNfYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTA1Ni0xMDYyCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogdGhpcy5hbGxvd2FuY2VzTWJyKGVzY3JvdykgKiBhbGxvd2FuY2VzLmxlbmd0aAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDU4CiAgICAvLyBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBjb250cm9sbGVkQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNDb250cm9sbGVkQWRkcmVzcyB9KTsKICAgIGJ5dGVjXzAgLy8gImNvbnRyb2xsZWRfYWRkcmVzcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDU4CiAgICAvLyBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwNTkKICAgIC8vIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NjYKICAgIC8vIHJldHVybiBNaW5BbGxvd2FuY2VNQlIgKyAoQm94Q29zdFBlckJ5dGUgKiBCeXRlcyhlc2Nyb3cpLmxlbmd0aCk7CiAgICBkaWcgNAogICAgbGVuCiAgICBpbnRjIDQgLy8gNDAwCiAgICAqCiAgICBpbnRjIDYgLy8gMjc3MDAKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDYwCiAgICAvLyBhbW91bnQ6IHRoaXMuYWxsb3dhbmNlc01icihlc2Nyb3cpICogYWxsb3dhbmNlcy5sZW5ndGgKICAgIGRpZyAzCiAgICAqCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgaXR4bl9maWVsZCBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDU2LTEwNjEKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiB0aGlzLmFsbG93YW5jZXNNYnIoZXNjcm93KSAqIGFsbG93YW5jZXMubGVuZ3RoCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTA1Ni0xMDYyCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogdGhpcy5hbGxvd2FuY2VzTWJyKGVzY3JvdykgKiBhbGxvd2FuY2VzLmxlbmd0aAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CgphcmM1OF9hZGRBbGxvd2FuY2VzX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDY1CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgYWxsb3dhbmNlcy5sZW5ndGg7IGkgKz0gMSkgewogICAgaW50Y18wIC8vIDAKICAgIGJ1cnkgNQoKYXJjNThfYWRkQWxsb3dhbmNlc193aGlsZV90b3BANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDY1CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgYWxsb3dhbmNlcy5sZW5ndGg7IGkgKz0gMSkgewogICAgZGlnIDQKICAgIGRpZyAxCiAgICA8CiAgICBieiBhcmM1OF9hZGRBbGxvd2FuY2VzX2FmdGVyX3doaWxlQDEwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTA2NgogICAgLy8gY29uc3QgeyBhc3NldCwgdHlwZSwgYW1vdW50LCBtYXgsIGludGVydmFsLCB1c2VSb3VuZHMgfSA9IGFsbG93YW5jZXNbaV07CiAgICBkaWcgMQogICAgZXh0cmFjdCAyIDAKICAgIGRpZyA1CiAgICBwdXNoaW50IDM0IC8vIDM0CiAgICAqCiAgICBwdXNoaW50IDM0IC8vIDM0CiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGR1cAogICAgZXh0cmFjdCAwIDgKICAgIGRpZyAxCiAgICBleHRyYWN0IDggMQogICAgYnVyeSA4CiAgICBkaWcgMQogICAgZXh0cmFjdCA5IDgKICAgIGJ1cnkgMTIKICAgIGRpZyAxCiAgICBleHRyYWN0IDE3IDgKICAgIGJ1cnkgMTEKICAgIGRpZyAxCiAgICBleHRyYWN0IDI1IDgKICAgIGJ1cnkgMTAKICAgIHN3YXAKICAgIHB1c2hpbnQgMjY0IC8vIDI2NAogICAgZ2V0Yml0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGJ1cnkgNgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwNjcKICAgIC8vIGNvbnN0IGtleTogQWxsb3dhbmNlS2V5ID0geyBlc2Nyb3csIGFzc2V0IH0KICAgIGRpZyA0CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWMgMTMgLy8gMHgwMDBhCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGFsbG93YW5jZXMgPSBCb3hNYXA8QWxsb3dhbmNlS2V5LCBBbGxvd2FuY2VJbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4QWxsb3dhbmNlcyB9KSAvLyAzOF81MDAKICAgIGJ5dGVjIDE0IC8vICJhIgogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGJ1cnkgOQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwNjgKICAgIC8vIGFzc2VydCghdGhpcy5hbGxvd2FuY2VzKGtleSkuZXhpc3RzLCBFUlJfQUxMT1dBTkNFX0FMUkVBRFlfRVhJU1RTKTsKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIGFsbG93YW5jZSBhbHJlYWR5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwNjkKICAgIC8vIGNvbnN0IHN0YXJ0ID0gdXNlUm91bmRzID8gR2xvYmFsLnJvdW5kIDogR2xvYmFsLmxhdGVzdFRpbWVzdGFtcDsKICAgIGJ6IGFyYzU4X2FkZEFsbG93YW5jZXNfdGVybmFyeV9mYWxzZUA4CiAgICBnbG9iYWwgUm91bmQKCmFyYzU4X2FkZEFsbG93YW5jZXNfdGVybmFyeV9tZXJnZUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwNzEtMTA4MAogICAgLy8gdGhpcy5hbGxvd2FuY2VzKGtleSkudmFsdWUgPSB7CiAgICAvLyAgIHR5cGUsCiAgICAvLyAgIHNwZW50OiAwLAogICAgLy8gICBhbW91bnQsCiAgICAvLyAgIGxhc3Q6IDAsCiAgICAvLyAgIG1heCwKICAgIC8vICAgaW50ZXJ2YWwsCiAgICAvLyAgIHN0YXJ0LAogICAgLy8gICB1c2VSb3VuZHMKICAgIC8vIH0KICAgIGRpZyA2CiAgICBkaWcgMTAKICAgIGNvbmNhdAogICAgZGlnIDExCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDczCiAgICAvLyBzcGVudDogMCwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTA3MS0xMDgwCiAgICAvLyB0aGlzLmFsbG93YW5jZXMoa2V5KS52YWx1ZSA9IHsKICAgIC8vICAgdHlwZSwKICAgIC8vICAgc3BlbnQ6IDAsCiAgICAvLyAgIGFtb3VudCwKICAgIC8vICAgbGFzdDogMCwKICAgIC8vICAgbWF4LAogICAgLy8gICBpbnRlcnZhbCwKICAgIC8vICAgc3RhcnQsCiAgICAvLyAgIHVzZVJvdW5kcwogICAgLy8gfQogICAgaXRvYgogICAgc3dhcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZGlnIDEwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICBieXRlYyA5IC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICBkaWcgNgogICAgc2V0Yml0CiAgICBjb25jYXQKICAgIGRpZyA3CiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTA2NQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGFsbG93YW5jZXMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGRpZyA0CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSA1CiAgICBiIGFyYzU4X2FkZEFsbG93YW5jZXNfd2hpbGVfdG9wQDUKCmFyYzU4X2FkZEFsbG93YW5jZXNfdGVybmFyeV9mYWxzZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwNjkKICAgIC8vIGNvbnN0IHN0YXJ0ID0gdXNlUm91bmRzID8gR2xvYmFsLnJvdW5kIDogR2xvYmFsLmxhdGVzdFRpbWVzdGFtcDsKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGIgYXJjNThfYWRkQWxsb3dhbmNlc190ZXJuYXJ5X21lcmdlQDkKCmFyYzU4X2FkZEFsbG93YW5jZXNfYWZ0ZXJfd2hpbGVAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIGxhc3RVc2VySW50ZXJhY3Rpb24gPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNMYXN0VXNlckludGVyYWN0aW9uIH0pCiAgICBieXRlY18zIC8vICJsYXN0X3VzZXJfaW50ZXJhY3Rpb24iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHRoaXMubGFzdFVzZXJJbnRlcmFjdGlvbi52YWx1ZSA9IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjIKICAgIC8vIGxhc3RDaGFuZ2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNMYXN0Q2hhbmdlIH0pCiAgICBieXRlYyA2IC8vICJsYXN0X2NoYW5nZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0OAogICAgLy8gdGhpcy5sYXN0Q2hhbmdlLnZhbHVlID0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDUwCiAgICAvLyBhcmM1OF9hZGRBbGxvd2FuY2VzKGVzY3Jvdzogc3RyaW5nLCBhbGxvd2FuY2VzOiBBZGRBbGxvd2FuY2VJbmZvW10pOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3JlbW92ZUFsbG93YW5jZXNbcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF9yZW1vdmVBbGxvd2FuY2VzOgogICAgYnl0ZWNfMSAvLyAiIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwOTMKICAgIC8vIGFyYzU4X3JlbW92ZUFsbG93YW5jZXMoZXNjcm93OiBzdHJpbmcsIGFzc2V0czogdWludDY0W10pOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbit1dGY4W10pCiAgICBleHRyYWN0IDIgMAogICAgZHVwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgc3dhcAogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3VpbnQ2NFtdKQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwOTQKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSB0aGlzLmFkbWluLnZhbHVlLCBFUlJfQURNSU5fT05MWSk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE2CiAgICAvLyBhZG1pbiA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNBZG1pbiB9KQogICAgYnl0ZWNfMiAvLyAiYWRtaW4iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTA5NAogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuYWRtaW4udmFsdWUsIEVSUl9BRE1JTl9PTkxZKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIGFkbWluIG9ubHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNwogICAgLy8gZXNjcm93cyA9IEJveE1hcDxzdHJpbmcsIEVzY3Jvd0luZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhFc2Nyb3dzIH0pCiAgICBieXRlYyA1IC8vICJlIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTA5NQogICAgLy8gYXNzZXJ0KHRoaXMuZXNjcm93cyhlc2Nyb3cpLmV4aXN0cywgRVJSX0VTQ1JPV19ET0VTX05PVF9FWElTVCk7CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGVzY3JvdyBkb2VzIG5vdCBleGlzdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwOTYKICAgIC8vIGFzc2VydCghdGhpcy5lc2Nyb3dzKGVzY3JvdykudmFsdWUubG9ja2VkLCBFUlJfRVNDUk9XX0xPQ0tFRCk7CiAgICBib3hfZ2V0CiAgICBwb3AKICAgIHB1c2hpbnQgNjQgLy8gNjQKICAgIGdldGJpdAogICAgIQogICAgYXNzZXJ0IC8vIEVzY3JvdyBpcyBsb2NrZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDk4CiAgICAvLyBpZiAodGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSAhPT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MpIHsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGNvbnRyb2xsZWRBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0NvbnRyb2xsZWRBZGRyZXNzIH0pOwogICAgYnl0ZWNfMCAvLyAiY29udHJvbGxlZF9hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwOTgKICAgIC8vIGlmICh0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlICE9PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcykgewogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAhPQogICAgYnogYXJjNThfcmVtb3ZlQWxsb3dhbmNlc19hZnRlcl9pZl9lbHNlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDk5LTExMDQKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHJlY2VpdmVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIGFtb3VudDogdGhpcy5hbGxvd2FuY2VzTWJyKGVzY3JvdykgKiBhc3NldHMubGVuZ3RoCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExMDEKICAgIC8vIHJlY2VpdmVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29udHJvbGxlZEFkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ29udHJvbGxlZEFkZHJlc3MgfSk7CiAgICBieXRlY18wIC8vICJjb250cm9sbGVkX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTEwMQogICAgLy8gcmVjZWl2ZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY2CiAgICAvLyByZXR1cm4gTWluQWxsb3dhbmNlTUJSICsgKEJveENvc3RQZXJCeXRlICogQnl0ZXMoZXNjcm93KS5sZW5ndGgpOwogICAgZGlnIDMKICAgIGxlbgogICAgaW50YyA0IC8vIDQwMAogICAgKgogICAgaW50YyA2IC8vIDI3NzAwCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTEwMgogICAgLy8gYW1vdW50OiB0aGlzLmFsbG93YW5jZXNNYnIoZXNjcm93KSAqIGFzc2V0cy5sZW5ndGgKICAgIGRpZyAyCiAgICAqCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwOTktMTEwMwogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgcmVjZWl2ZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgYW1vdW50OiB0aGlzLmFsbG93YW5jZXNNYnIoZXNjcm93KSAqIGFzc2V0cy5sZW5ndGgKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDk5LTExMDQKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHJlY2VpdmVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIGFtb3VudDogdGhpcy5hbGxvd2FuY2VzTWJyKGVzY3JvdykgKiBhc3NldHMubGVuZ3RoCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKCmFyYzU4X3JlbW92ZUFsbG93YW5jZXNfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExMDcKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhc3NldHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMCAvLyAwCiAgICBidXJ5IDQKCmFyYzU4X3JlbW92ZUFsbG93YW5jZXNfd2hpbGVfdG9wQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTEwNwogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGFzc2V0cy5sZW5ndGg7IGkgKz0gMSkgewogICAgZGlnIDMKICAgIGRpZyAxCiAgICA8CiAgICBieiBhcmM1OF9yZW1vdmVBbGxvd2FuY2VzX2FmdGVyX3doaWxlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTEwCiAgICAvLyBhc3NldDogYXNzZXRzW2ldCiAgICBkaWcgMQogICAgZXh0cmFjdCAyIDAKICAgIGRpZyA0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTEwOC0xMTExCiAgICAvLyBjb25zdCBrZXk6IEFsbG93YW5jZUtleSA9IHsKICAgIC8vICAgZXNjcm93LAogICAgLy8gICBhc3NldDogYXNzZXRzW2ldCiAgICAvLyB9CiAgICBkaWcgNAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjIDEzIC8vIDB4MDAwYQogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBhbGxvd2FuY2VzID0gQm94TWFwPEFsbG93YW5jZUtleSwgQWxsb3dhbmNlSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeEFsbG93YW5jZXMgfSkgLy8gMzhfNTAwCiAgICBieXRlYyAxNCAvLyAiYSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExMTIKICAgIC8vIGFzc2VydCh0aGlzLmFsbG93YW5jZXMoa2V5KS5leGlzdHMsIEVSUl9BTExPV0FOQ0VfRE9FU19OT1RfRVhJU1QpCiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFsbG93YW5jZSBkb2VzIG5vdCBleGlzdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExMTMKICAgIC8vIHRoaXMuYWxsb3dhbmNlcyhrZXkpLmRlbGV0ZSgpCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTA3CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgYXNzZXRzLmxlbmd0aDsgaSArPSAxKSB7CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSA0CiAgICBiIGFyYzU4X3JlbW92ZUFsbG93YW5jZXNfd2hpbGVfdG9wQDUKCmFyYzU4X3JlbW92ZUFsbG93YW5jZXNfYWZ0ZXJfd2hpbGVANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gbGFzdFVzZXJJbnRlcmFjdGlvbiA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0xhc3RVc2VySW50ZXJhY3Rpb24gfSkKICAgIGJ5dGVjXzMgLy8gImxhc3RfdXNlcl9pbnRlcmFjdGlvbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NAogICAgLy8gdGhpcy5sYXN0VXNlckludGVyYWN0aW9uLnZhbHVlID0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMgogICAgLy8gbGFzdENoYW5nZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0xhc3RDaGFuZ2UgfSkKICAgIGJ5dGVjIDYgLy8gImxhc3RfY2hhbmdlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyB0aGlzLmxhc3RDaGFuZ2UudmFsdWUgPSBHbG9iYWwubGF0ZXN0VGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwOTMKICAgIC8vIGFyYzU4X3JlbW92ZUFsbG93YW5jZXMoZXNjcm93OiBzdHJpbmcsIGFzc2V0czogdWludDY0W10pOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X2FkZEV4ZWN1dGlvbktleVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmFyYzU4X2FkZEV4ZWN1dGlvbktleToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTIwCiAgICAvLyBhcmM1OF9hZGRFeGVjdXRpb25LZXkobGVhc2U6IGJ5dGVzPDMyPiwgZ3JvdXBzOiBieXRlczwzMj5bXSwgZmlyc3RWYWxpZDogdWludDY0LCBsYXN0VmFsaWQ6IHVpbnQ2NCk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ4WzMyXQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgcHVzaGludCAzMiAvLyAzMgogICAgKgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbit1aW50OFszMl1bXSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICBjb3ZlciAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgY292ZXIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExMjEKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSB0aGlzLmFkbWluLnZhbHVlLCBFUlJfQURNSU5fT05MWSkKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIGFkbWluID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0FkbWluIH0pCiAgICBieXRlY18yIC8vICJhZG1pbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTIxCiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSwgRVJSX0FETUlOX09OTFkpCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBhZG1pbiBvbmx5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIGV4ZWN1dGlvbnMgPSBCb3hNYXA8Ynl0ZXM8MzI+LCBFeGVjdXRpb25JbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4RXhlY3V0aW9ucyB9KQogICAgYnl0ZWMgOCAvLyAieCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBjb3ZlciAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTEyMgogICAgLy8gaWYgKCF0aGlzLmV4ZWN1dGlvbnMobGVhc2UpLmV4aXN0cykgewogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBibnogYXJjNThfYWRkRXhlY3V0aW9uS2V5X2Vsc2VfYm9keUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTEyMy0xMTI3CiAgICAvLyB0aGlzLmV4ZWN1dGlvbnMobGVhc2UpLnZhbHVlID0gewogICAgLy8gICBncm91cHM6IGNsb25lKGdyb3VwcyksCiAgICAvLyAgIGZpcnN0VmFsaWQsCiAgICAvLyAgIGxhc3RWYWxpZAogICAgLy8gfQogICAgZGlnIDMKICAgIGl0b2IKICAgIHB1c2hieXRlcyAweDAwMTIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBzd2FwCiAgICBib3hfcHV0CgphcmM1OF9hZGRFeGVjdXRpb25LZXlfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyBsYXN0VXNlckludGVyYWN0aW9uID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzTGFzdFVzZXJJbnRlcmFjdGlvbiB9KQogICAgYnl0ZWNfMyAvLyAibGFzdF91c2VyX2ludGVyYWN0aW9uIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyB0aGlzLmxhc3RVc2VySW50ZXJhY3Rpb24udmFsdWUgPSBHbG9iYWwubGF0ZXN0VGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIyCiAgICAvLyBsYXN0Q2hhbmdlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzTGFzdENoYW5nZSB9KQogICAgYnl0ZWMgNiAvLyAibGFzdF9jaGFuZ2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIHRoaXMubGFzdENoYW5nZS52YWx1ZSA9IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTEyMAogICAgLy8gYXJjNThfYWRkRXhlY3V0aW9uS2V5KGxlYXNlOiBieXRlczwzMj4sIGdyb3VwczogYnl0ZXM8MzI+W10sIGZpcnN0VmFsaWQ6IHVpbnQ2NCwgbGFzdFZhbGlkOiB1aW50NjQpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmFyYzU4X2FkZEV4ZWN1dGlvbktleV9lbHNlX2JvZHlAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTI5CiAgICAvLyBhc3NlcnQodGhpcy5leGVjdXRpb25zKGxlYXNlKS52YWx1ZS5maXJzdFZhbGlkID09PSBmaXJzdFZhbGlkLCBFUlJfRVhFQ1VUSU9OX0tFWV9VUERBVEVfTVVTVF9NQVRDSF9GSVJTVF9WQUxJRCkKICAgIGRpZyAyCiAgICBkdXAKICAgIGludGNfMiAvLyAyCiAgICBpbnRjXzMgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGRpZyA1CiAgICA9PQogICAgYXNzZXJ0IC8vIGV4ZWN1dGlvbiBrZXkgdXBkYXRlIG11c3QgbWF0Y2ggZmlyc3QgdmFsaWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTMwCiAgICAvLyBhc3NlcnQodGhpcy5leGVjdXRpb25zKGxlYXNlKS52YWx1ZS5sYXN0VmFsaWQgPT09IGxhc3RWYWxpZCwgRVJSX0VYRUNVVElPTl9LRVlfVVBEQVRFX01VU1RfTUFUQ0hfTEFTVF9WQUxJRCkKICAgIGR1cAogICAgcHVzaGludCAxMCAvLyAxMAogICAgaW50Y18zIC8vIDgKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICB1bmNvdmVyIDMKICAgID09CiAgICBhc3NlcnQgLy8gZXhlY3V0aW9uIGtleSB1cGRhdGUgbXVzdCBtYXRjaCBsYXN0IHZhbGlkCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTEzMgogICAgLy8gdGhpcy5leGVjdXRpb25zKGxlYXNlKS52YWx1ZS5ncm91cHMgPSBbLi4uY2xvbmUodGhpcy5leGVjdXRpb25zKGxlYXNlKS52YWx1ZS5ncm91cHMpLCAuLi5jbG9uZShncm91cHMpXQogICAgZHVwCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMQogICAgbGVuCiAgICBkaWcgMgogICAgZGlnIDIKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgdW5jb3ZlciA0CiAgICBleHRyYWN0IDIgMAogICAgY29uY2F0IC8vIG9uIGVycm9yOiBtYXggYXJyYXkgbGVuZ3RoIGV4Y2VlZGVkCiAgICBkdXAKICAgIGV4dHJhY3QgMiAwCiAgICBsZW4KICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgIC8KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICByZXBsYWNlMiAwCiAgICB1bmNvdmVyIDIKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDMKICAgIGV4dHJhY3QzCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGJveF9wdXQKICAgIGIgYXJjNThfYWRkRXhlY3V0aW9uS2V5X2FmdGVyX2lmX2Vsc2VANAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVtb3ZlRXhlY3V0aW9uS2V5W3JvdXRpbmddKCkgLT4gdm9pZDoKYXJjNThfcmVtb3ZlRXhlY3V0aW9uS2V5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExMzkKICAgIC8vIGFyYzU4X3JlbW92ZUV4ZWN1dGlvbktleShsZWFzZTogYnl0ZXM8MzI+KTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDhbMzJdCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIGV4ZWN1dGlvbnMgPSBCb3hNYXA8Ynl0ZXM8MzI+LCBFeGVjdXRpb25JbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4RXhlY3V0aW9ucyB9KQogICAgYnl0ZWMgOCAvLyAieCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE0MAogICAgLy8gYXNzZXJ0KHRoaXMuZXhlY3V0aW9ucyhsZWFzZSkuZXhpc3RzLCBFUlJfRVhFQ1VUSU9OX0tFWV9ET0VTX05PVF9FWElTVCkKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGV4ZWN1dGlvbiBrZXkgZG9lcyBub3QgZXhpc3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTQxCiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSB8fCB0aGlzLmV4ZWN1dGlvbnMobGVhc2UpLnZhbHVlLmxhc3RWYWxpZCA8IEdsb2JhbC5yb3VuZCwgRVJSX0FETUlOX09OTFkpCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE2CiAgICAvLyBhZG1pbiA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNBZG1pbiB9KQogICAgYnl0ZWNfMiAvLyAiYWRtaW4iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE0MQogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuYWRtaW4udmFsdWUgfHwgdGhpcy5leGVjdXRpb25zKGxlYXNlKS52YWx1ZS5sYXN0VmFsaWQgPCBHbG9iYWwucm91bmQsIEVSUl9BRE1JTl9PTkxZKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBibnogYXJjNThfcmVtb3ZlRXhlY3V0aW9uS2V5X2Jvb2xfdHJ1ZUAzCiAgICBkdXAKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIGludGNfMyAvLyA4CiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgZ2xvYmFsIFJvdW5kCiAgICA8CiAgICBieiBhcmM1OF9yZW1vdmVFeGVjdXRpb25LZXlfYm9vbF9mYWxzZUA0CgphcmM1OF9yZW1vdmVFeGVjdXRpb25LZXlfYm9vbF90cnVlQDM6CiAgICBpbnRjXzEgLy8gMQoKYXJjNThfcmVtb3ZlRXhlY3V0aW9uS2V5X2Jvb2xfbWVyZ2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTQxCiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSB8fCB0aGlzLmV4ZWN1dGlvbnMobGVhc2UpLnZhbHVlLmxhc3RWYWxpZCA8IEdsb2JhbC5yb3VuZCwgRVJSX0FETUlOX09OTFkpCiAgICBhc3NlcnQgLy8gYWRtaW4gb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNDMKICAgIC8vIHRoaXMuZXhlY3V0aW9ucyhsZWFzZSkuZGVsZXRlKCkKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIGxhc3RVc2VySW50ZXJhY3Rpb24gPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNMYXN0VXNlckludGVyYWN0aW9uIH0pCiAgICBieXRlY18zIC8vICJsYXN0X3VzZXJfaW50ZXJhY3Rpb24iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHRoaXMubGFzdFVzZXJJbnRlcmFjdGlvbi52YWx1ZSA9IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjIKICAgIC8vIGxhc3RDaGFuZ2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNMYXN0Q2hhbmdlIH0pCiAgICBieXRlYyA2IC8vICJsYXN0X2NoYW5nZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0OAogICAgLy8gdGhpcy5sYXN0Q2hhbmdlLnZhbHVlID0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTM5CiAgICAvLyBhcmM1OF9yZW1vdmVFeGVjdXRpb25LZXkobGVhc2U6IGJ5dGVzPDMyPik6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKYXJjNThfcmVtb3ZlRXhlY3V0aW9uS2V5X2Jvb2xfZmFsc2VANDoKICAgIGludGNfMCAvLyAwCiAgICBiIGFyYzU4X3JlbW92ZUV4ZWN1dGlvbktleV9ib29sX21lcmdlQDUKCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X2dldFBsdWdpbnNbcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF9nZXRQbHVnaW5zOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gIiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTQ5CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTUxCiAgICAvLyBsZXQgcGx1Z2luczogUGx1Z2luSW5mb1tdID0gW10KICAgIGJ5dGVjIDEwIC8vIDB4MDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNTIKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSArPSAxKSB7CiAgICBpbnRjXzAgLy8gMAoKYXJjNThfZ2V0UGx1Z2luc193aGlsZV90b3BAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTUyCiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkgKz0gMSkgewogICAgZGlnIDIKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwCiAgICBidXJ5IDUKICAgIGRpZyAxCiAgICA+CiAgICBieiBhcmM1OF9nZXRQbHVnaW5zX2FmdGVyX3doaWxlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTUzCiAgICAvLyBpZiAodGhpcy5wbHVnaW5zKGtleXNbaV0pLmV4aXN0cykgewogICAgZGlnIDIKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgZGlnIDEKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICB1bmNvdmVyIDIKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBkdXAKICAgIGJ1cnkgNAogICAgZGlnIDYKICAgIGRpZyAxCiAgICAtIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZGlnIDMKICAgIGxlbgogICAgdW5jb3ZlciAyCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgZGlnIDQKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgc3Vic3RyaW5nMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBwbHVnaW5zID0gQm94TWFwPFBsdWdpbktleSwgUGx1Z2luSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeFBsdWdpbnMgfSk7CiAgICBieXRlYyA0IC8vICJwIgogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGJ1cnkgNgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNTMKICAgIC8vIGlmICh0aGlzLnBsdWdpbnMoa2V5c1tpXSkuZXhpc3RzKSB7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJ6IGFyYzU4X2dldFBsdWdpbnNfYWZ0ZXJfaWZfZWxzZUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE1NAogICAgLy8gcGx1Z2lucy5wdXNoKHRoaXMucGx1Z2lucyhrZXlzW2ldKS52YWx1ZSkKICAgIGRpZyA0CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgZGlnIDIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBleHRyYWN0IDIgMAogICAgYnl0ZWMgMjAgLy8gMHgwMDAyCiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgY292ZXIgMgogICAgaW50Y18xIC8vIDEKICAgIHVuY292ZXIgMwogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnQKICAgIGJ1cnkgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNTUKICAgIC8vIGNvbnRpbnVlCiAgICBiIGFyYzU4X2dldFBsdWdpbnNfd2hpbGVfdG9wQDIKCmFyYzU4X2dldFBsdWdpbnNfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNTcKICAgIC8vIHBsdWdpbnMucHVzaChlbXB0eVBsdWdpbkluZm8oKSkKICAgIGRpZyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgc3dhcAogICAgZXh0cmFjdCAyIDAKICAgIGludGNfMSAvLyAxCiAgICBieXRlYyAyMSAvLyAweDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnQKICAgIGJ1cnkgMgogICAgYiBhcmM1OF9nZXRQbHVnaW5zX3doaWxlX3RvcEAyCgphcmM1OF9nZXRQbHVnaW5zX2FmdGVyX3doaWxlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE0OQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBieXRlYyA3IC8vIDB4MTUxZjdjNzUKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfZ2V0TmFtZWRQbHVnaW5zW3JvdXRpbmddKCkgLT4gdm9pZDoKYXJjNThfZ2V0TmFtZWRQbHVnaW5zOgogICAgaW50Y18wIC8vIDAKICAgIGR1cAogICAgYnl0ZWNfMSAvLyAiIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNjIKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNjQKICAgIC8vIGxldCBwbHVnaW5zOiBQbHVnaW5JbmZvW10gPSBbXQogICAgYnl0ZWMgMTAgLy8gMHgwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE2NQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSArPSAxKSB7CiAgICBpbnRjXzAgLy8gMAoKYXJjNThfZ2V0TmFtZWRQbHVnaW5zX3doaWxlX3RvcEAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNjUKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkgKz0gMSkgewogICAgZGlnIDIKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDEKICAgID4KICAgIGR1cAogICAgYnVyeSA1CiAgICBieiBhcmM1OF9nZXROYW1lZFBsdWdpbnNfYWZ0ZXJfd2hpbGVAOQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNjYKICAgIC8vIGlmICh0aGlzLm5hbWVkUGx1Z2lucyhuYW1lc1tpXSkuZXhpc3RzKSB7CiAgICBkaWcgMgogICAgZXh0cmFjdCAyIDAKICAgIGRpZyA0CiAgICBhc3NlcnQgLy8gaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGRpZyAxCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgZGlnIDEKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGV4dHJhY3QzCiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM1CiAgICAvLyBuYW1lZFBsdWdpbnMgPSBCb3hNYXA8c3RyaW5nLCBQbHVnaW5LZXk+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhOYW1lZFBsdWdpbnMgfSk7CiAgICBieXRlYyAxNiAvLyAibiIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBidXJ5IDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTY2CiAgICAvLyBpZiAodGhpcy5uYW1lZFBsdWdpbnMobmFtZXNbaV0pLmV4aXN0cykgewogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBhcmM1OF9nZXROYW1lZFBsdWdpbnNfYWZ0ZXJfaWZfZWxzZUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE2NwogICAgLy8gY29uc3QgbmFtZUtleSA9IGNsb25lKHRoaXMubmFtZWRQbHVnaW5zKG5hbWVzW2ldKS52YWx1ZSkKICAgIGRpZyA1CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBwbHVnaW5zID0gQm94TWFwPFBsdWdpbktleSwgUGx1Z2luSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeFBsdWdpbnMgfSk7CiAgICBieXRlYyA0IC8vICJwIgogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGJ1cnkgNgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNjgKICAgIC8vIGlmICh0aGlzLnBsdWdpbnMobmFtZUtleSkuZXhpc3RzKSB7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJ6IGFyYzU4X2dldE5hbWVkUGx1Z2luc19hZnRlcl9pZl9lbHNlQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTY5CiAgICAvLyBwbHVnaW5zLnB1c2godGhpcy5wbHVnaW5zKG5hbWVLZXkpLnZhbHVlKQogICAgZGlnIDQKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBkaWcgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIHN3YXAKICAgIGV4dHJhY3QgMiAwCiAgICBieXRlYyAyMCAvLyAweDAwMDIKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICBjb3ZlciAyCiAgICBpbnRjXzEgLy8gMQogICAgdW5jb3ZlciAzCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudAogICAgYnVyeSAyCgphcmM1OF9nZXROYW1lZFBsdWdpbnNfYmxvY2tAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTY1CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGR1cAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiBhcmM1OF9nZXROYW1lZFBsdWdpbnNfd2hpbGVfdG9wQDIKCmFyYzU4X2dldE5hbWVkUGx1Z2luc19hZnRlcl9pZl9lbHNlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE3MgogICAgLy8gcGx1Z2lucy5wdXNoKGVtcHR5UGx1Z2luSW5mbygpKQogICAgZGlnIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBleHRyYWN0IDIgMAogICAgaW50Y18xIC8vIDEKICAgIGJ5dGVjIDIxIC8vIDB4MDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudAogICAgYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE3MwogICAgLy8gY29udGludWUKICAgIGIgYXJjNThfZ2V0TmFtZWRQbHVnaW5zX2Jsb2NrQDgKCmFyYzU4X2dldE5hbWVkUGx1Z2luc19hZnRlcl9pZl9lbHNlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE3NQogICAgLy8gcGx1Z2lucy5wdXNoKGVtcHR5UGx1Z2luSW5mbygpKQogICAgZGlnIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBleHRyYWN0IDIgMAogICAgaW50Y18xIC8vIDEKICAgIGJ5dGVjIDIxIC8vIDB4MDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudAogICAgYnVyeSAyCiAgICBiIGFyYzU4X2dldE5hbWVkUGx1Z2luc19ibG9ja0A4CgphcmM1OF9nZXROYW1lZFBsdWdpbnNfYWZ0ZXJfd2hpbGVAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTYyCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGJ5dGVjIDcgLy8gMHgxNTFmN2M3NQogICAgZGlnIDIKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9nZXRFc2Nyb3dzW3JvdXRpbmddKCkgLT4gdm9pZDoKYXJjNThfZ2V0RXNjcm93czoKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE4MAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE4MgogICAgLy8gbGV0IHJlc3VsdDogRXNjcm93SW5mb1tdID0gW10KICAgIGJ5dGVjIDEwIC8vIDB4MDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExODMKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBlc2Nyb3dzLmxlbmd0aDsgaSArPSAxKSB7CiAgICBpbnRjXzAgLy8gMAoKYXJjNThfZ2V0RXNjcm93c193aGlsZV90b3BAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTgzCiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgZXNjcm93cy5sZW5ndGg7IGkgKz0gMSkgewogICAgZGlnIDIKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDEKICAgID4KICAgIGR1cAogICAgYnVyeSA1CiAgICBieiBhcmM1OF9nZXRFc2Nyb3dzX2FmdGVyX3doaWxlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTg0CiAgICAvLyBpZiAodGhpcy5lc2Nyb3dzKGVzY3Jvd3NbaV0pLmV4aXN0cykgewogICAgZGlnIDIKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgNAogICAgYXNzZXJ0IC8vIGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkaWcgMQogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGRpZyAxCiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwMgogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBleHRyYWN0MwogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNwogICAgLy8gZXNjcm93cyA9IEJveE1hcDxzdHJpbmcsIEVzY3Jvd0luZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhFc2Nyb3dzIH0pCiAgICBieXRlYyA1IC8vICJlIgogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGJ1cnkgNgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExODQKICAgIC8vIGlmICh0aGlzLmVzY3Jvd3MoZXNjcm93c1tpXSkuZXhpc3RzKSB7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJ6IGFyYzU4X2dldEVzY3Jvd3NfYWZ0ZXJfaWZfZWxzZUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE4NQogICAgLy8gcmVzdWx0LnB1c2godGhpcy5lc2Nyb3dzKGVzY3Jvd3NbaV0pLnZhbHVlKQogICAgZGlnIDQKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBkaWcgMgogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdCAvLyBvbiBlcnJvcjogbWF4IGFycmF5IGxlbmd0aCBleGNlZWRlZAogICAgc3dhcAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHJlcGxhY2UyIDAKICAgIGJ1cnkgMgoKYXJjNThfZ2V0RXNjcm93c19ibG9ja0A2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExODMKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBlc2Nyb3dzLmxlbmd0aDsgaSArPSAxKSB7CiAgICBkdXAKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgYXJjNThfZ2V0RXNjcm93c193aGlsZV90b3BAMgoKYXJjNThfZ2V0RXNjcm93c19hZnRlcl9pZl9lbHNlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE4OAogICAgLy8gcmVzdWx0LnB1c2goZW1wdHlFc2Nyb3dJbmZvKCkpCiAgICBkaWcgMQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L3V0aWxzLnRzOjIwLTIzCiAgICAvLyByZXR1cm4gewogICAgLy8gICBpZDogMCwKICAgIC8vICAgbG9ja2VkOiBmYWxzZQogICAgLy8gfTsKICAgIHB1c2hieXRlcyAweDAwMDAwMDAwMDAwMDAwMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExODgKICAgIC8vIHJlc3VsdC5wdXNoKGVtcHR5RXNjcm93SW5mbygpKQogICAgY29uY2F0IC8vIG9uIGVycm9yOiBtYXggYXJyYXkgbGVuZ3RoIGV4Y2VlZGVkCiAgICBzd2FwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgcmVwbGFjZTIgMAogICAgYnVyeSAyCiAgICBiIGFyYzU4X2dldEVzY3Jvd3NfYmxvY2tANgoKYXJjNThfZ2V0RXNjcm93c19hZnRlcl93aGlsZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExODAKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgYnl0ZWMgNyAvLyAweDE1MWY3Yzc1CiAgICBkaWcgMgogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X2dldEFsbG93YW5jZXNbcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF9nZXRBbGxvd2FuY2VzOgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTkzCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbit1dGY4W10pCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwbiAyCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdWludDY0W10pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE5NQogICAgLy8gbGV0IHJlc3VsdDogQWxsb3dhbmNlSW5mb1tdID0gW10KICAgIGJ5dGVjIDEwIC8vIDB4MDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExOTYKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhc3NldHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMCAvLyAwCgphcmM1OF9nZXRBbGxvd2FuY2VzX3doaWxlX3RvcEAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExOTYKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhc3NldHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGR1cAogICAgZGlnIDMKICAgIDwKICAgIGJ6IGFyYzU4X2dldEFsbG93YW5jZXNfYWZ0ZXJfd2hpbGVANwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExOTcKICAgIC8vIGNvbnN0IGtleTogQWxsb3dhbmNlS2V5ID0geyBlc2Nyb3csIGFzc2V0OiBhc3NldHNbaV0gfQogICAgZGlnIDMKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMQogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGRpZyA1CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWMgMTMgLy8gMHgwMDBhCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGFsbG93YW5jZXMgPSBCb3hNYXA8QWxsb3dhbmNlS2V5LCBBbGxvd2FuY2VJbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4QWxsb3dhbmNlcyB9KSAvLyAzOF81MDAKICAgIGJ5dGVjIDE0IC8vICJhIgogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGJ1cnkgNwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExOTgKICAgIC8vIGlmICh0aGlzLmFsbG93YW5jZXMoa2V5KS5leGlzdHMpIHsKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYnogYXJjNThfZ2V0QWxsb3dhbmNlc19hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTk5CiAgICAvLyByZXN1bHQucHVzaCh0aGlzLmFsbG93YW5jZXMoa2V5KS52YWx1ZSkKICAgIGRpZyA1CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgZGlnIDIKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQgLy8gb24gZXJyb3I6IG1heCBhcnJheSBsZW5ndGggZXhjZWVkZWQKICAgIHN3YXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICByZXBsYWNlMiAwCiAgICBidXJ5IDIKCmFyYzU4X2dldEFsbG93YW5jZXNfYmxvY2tANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTk2CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgYXNzZXRzLmxlbmd0aDsgaSArPSAxKSB7CiAgICBkdXAKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgYXJjNThfZ2V0QWxsb3dhbmNlc193aGlsZV90b3BAMgoKYXJjNThfZ2V0QWxsb3dhbmNlc19hZnRlcl9pZl9lbHNlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTIwMgogICAgLy8gcmVzdWx0LnB1c2goZW1wdHlBbGxvd2FuY2VJbmZvKCkpCiAgICBkaWcgMQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L3V0aWxzLnRzOjI3LTM2CiAgICAvLyByZXR1cm4gewogICAgLy8gICB0eXBlOiBuZXcgVWludDgoMCksCiAgICAvLyAgIG1heDogMCwKICAgIC8vICAgYW1vdW50OiAwLAogICAgLy8gICBzcGVudDogMCwKICAgIC8vICAgaW50ZXJ2YWw6IDAsCiAgICAvLyAgIGxhc3Q6IDAsCiAgICAvLyAgIHN0YXJ0OiAwLAogICAgLy8gICB1c2VSb3VuZHM6IGZhbHNlCiAgICAvLyB9OwogICAgcHVzaGJ5dGVzIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyMDIKICAgIC8vIHJlc3VsdC5wdXNoKGVtcHR5QWxsb3dhbmNlSW5mbygpKQogICAgY29uY2F0IC8vIG9uIGVycm9yOiBtYXggYXJyYXkgbGVuZ3RoIGV4Y2VlZGVkCiAgICBzd2FwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgcmVwbGFjZTIgMAogICAgYnVyeSAyCiAgICBiIGFyYzU4X2dldEFsbG93YW5jZXNfYmxvY2tANgoKYXJjNThfZ2V0QWxsb3dhbmNlc19hZnRlcl93aGlsZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExOTMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgYnl0ZWMgNyAvLyAweDE1MWY3Yzc1CiAgICBkaWcgMgogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X2dldEV4ZWN1dGlvbnNbcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF9nZXRFeGVjdXRpb25zOgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMjA3CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdWludDhbMzJdW10pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTIwOQogICAgLy8gbGV0IHJlc3VsdDogRXhlY3V0aW9uSW5mb1tdID0gW10KICAgIGJ5dGVjIDEwIC8vIDB4MDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyMTAKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBsZWFzZXMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMCAvLyAwCgphcmM1OF9nZXRFeGVjdXRpb25zX3doaWxlX3RvcEAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyMTAKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBsZWFzZXMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGR1cAogICAgZGlnIDMKICAgIDwKICAgIGJ6IGFyYzU4X2dldEV4ZWN1dGlvbnNfYWZ0ZXJfd2hpbGVANwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyMTEKICAgIC8vIGlmICh0aGlzLmV4ZWN1dGlvbnMobGVhc2VzW2ldKS5leGlzdHMpIHsKICAgIGRpZyAzCiAgICBleHRyYWN0IDIgMAogICAgZGlnIDEKICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgICoKICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBleGVjdXRpb25zID0gQm94TWFwPGJ5dGVzPDMyPiwgRXhlY3V0aW9uSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeEV4ZWN1dGlvbnMgfSkKICAgIGJ5dGVjIDggLy8gIngiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgYnVyeSA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTIxMQogICAgLy8gaWYgKHRoaXMuZXhlY3V0aW9ucyhsZWFzZXNbaV0pLmV4aXN0cykgewogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBhcmM1OF9nZXRFeGVjdXRpb25zX2FmdGVyX2lmX2Vsc2VANQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyMTIKICAgIC8vIHJlc3VsdC5wdXNoKHRoaXMuZXhlY3V0aW9ucyhsZWFzZXNbaV0pLnZhbHVlKQogICAgZGlnIDQKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBkaWcgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIHN3YXAKICAgIGV4dHJhY3QgMiAwCiAgICBieXRlYyAyMCAvLyAweDAwMDIKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICBjb3ZlciAyCiAgICBpbnRjXzEgLy8gMQogICAgdW5jb3ZlciAzCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudAogICAgYnVyeSAyCgphcmM1OF9nZXRFeGVjdXRpb25zX2Jsb2NrQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTIxMAogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGxlYXNlcy5sZW5ndGg7IGkgKz0gMSkgewogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIGFyYzU4X2dldEV4ZWN1dGlvbnNfd2hpbGVfdG9wQDIKCmFyYzU4X2dldEV4ZWN1dGlvbnNfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyMTUKICAgIC8vIHJlc3VsdC5wdXNoKGVtcHR5RXhlY3V0aW9uSW5mbygpKQogICAgZGlnIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBleHRyYWN0IDIgMAogICAgaW50Y18xIC8vIDEKICAgIHB1c2hieXRlcyAweDAwMDIwMDEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudAogICAgYnVyeSAyCiAgICBiIGFyYzU4X2dldEV4ZWN1dGlvbnNfYmxvY2tANgoKYXJjNThfZ2V0RXhlY3V0aW9uc19hZnRlcl93aGlsZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyMDcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgYnl0ZWMgNyAvLyAweDE1MWY3Yzc1CiAgICBkaWcgMgogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50Lm1icltyb3V0aW5nXSgpIC0+IHZvaWQ6Cm1icjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMjIwCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbit1dGY4W10pCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbit1dGY4W10pCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2MgogICAgLy8gcmV0dXJuIE1pbkVzY3Jvd3NNQlIgKyAoQm94Q29zdFBlckJ5dGUgKiBCeXRlcyhlc2Nyb3cpLmxlbmd0aCk7CiAgICBkaWcgMwogICAgbGVuCiAgICBpbnRjIDQgLy8gNDAwCiAgICAqCiAgICBwdXNoaW50IDY1MDAgLy8gNjUwMAogICAgZGlnIDEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMjMwCiAgICAvLyBwbHVnaW5zOiB0aGlzLnBsdWdpbnNNYnIoZXNjcm93LCBtZXRob2RDb3VudCksCiAgICBkaWcgNQogICAgdW5jb3ZlciA1CiAgICBjYWxsc3ViIHBsdWdpbnNNYnIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1OAogICAgLy8gcmV0dXJuIE1pbk5hbWVkUGx1Z2luTUJSICsgKEJveENvc3RQZXJCeXRlICogQnl0ZXMobmFtZSkubGVuZ3RoKTsKICAgIHVuY292ZXIgNAogICAgbGVuCiAgICBpbnRjIDQgLy8gNDAwCiAgICAqCiAgICBpbnRjIDUgLy8gMjE3MDAKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2NgogICAgLy8gcmV0dXJuIE1pbkFsbG93YW5jZU1CUiArIChCb3hDb3N0UGVyQnl0ZSAqIEJ5dGVzKGVzY3JvdykubGVuZ3RoKTsKICAgIGludGMgNiAvLyAyNzcwMAogICAgdW5jb3ZlciA0CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzAKICAgIC8vIHJldHVybiBNaW5FeGVjdXRpb25zTUJSICsgKEJveENvc3RQZXJCeXRlICogKGdyb3VwcyAqIDMyKSk7CiAgICB1bmNvdmVyIDQKICAgIHB1c2hpbnQgMTI4MDAgLy8gMTI4MDAKICAgICoKICAgIHB1c2hpbnQgMjA1MDAgLy8gMjA1MDAKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNwogICAgLy8gZXNjcm93cyA9IEJveE1hcDxzdHJpbmcsIEVzY3Jvd0luZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhFc2Nyb3dzIH0pCiAgICBieXRlYyA1IC8vICJlIgogICAgdW5jb3ZlciA2CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMjM1CiAgICAvLyBlc2Nyb3dFeGlzdHM6IHRoaXMuZXNjcm93cyhlc2Nyb3cpLmV4aXN0cywKICAgIGJveF9sZW4KICAgIGNvdmVyIDYKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyMzgKICAgIC8vIEdsb2JhbC5taW5CYWxhbmNlICsKICAgIGdsb2JhbCBNaW5CYWxhbmNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTIzNy0xMjM5CiAgICAvLyBOZXdDb3N0Rm9yQVJDNTggKwogICAgLy8gR2xvYmFsLm1pbkJhbGFuY2UgKwogICAgLy8gQVJDNThXYWxsZXRJRHNCeUFjY291bnRzTWJyICsKICAgIHB1c2hpbnQgMTYyMTAwIC8vIDE2MjEwMAogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyMzctMTI0MAogICAgLy8gTmV3Q29zdEZvckFSQzU4ICsKICAgIC8vIEdsb2JhbC5taW5CYWxhbmNlICsKICAgIC8vIEFSQzU4V2FsbGV0SURzQnlBY2NvdW50c01iciArCiAgICAvLyBlc2Nyb3dzCiAgICBkaWcgNQogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyMjktMTI0MgogICAgLy8gcmV0dXJuIHsKICAgIC8vICAgcGx1Z2luczogdGhpcy5wbHVnaW5zTWJyKGVzY3JvdywgbWV0aG9kQ291bnQpLAogICAgLy8gICBuYW1lZFBsdWdpbnM6IHRoaXMubmFtZWRQbHVnaW5zTWJyKHBsdWdpbiksCiAgICAvLyAgIGVzY3Jvd3MsCiAgICAvLyAgIGFsbG93YW5jZXM6IHRoaXMuYWxsb3dhbmNlc01icihlc2Nyb3cpLAogICAgLy8gICBleGVjdXRpb25zOiB0aGlzLmV4ZWN1dGlvbnNNYnIoZ3JvdXBzKSwKICAgIC8vICAgZXNjcm93RXhpc3RzOiB0aGlzLmVzY3Jvd3MoZXNjcm93KS5leGlzdHMsCiAgICAvLyAgIG5ld0VzY3Jvd01pbnRDb3N0OiAoCiAgICAvLyAgICAgTmV3Q29zdEZvckFSQzU4ICsKICAgIC8vICAgICBHbG9iYWwubWluQmFsYW5jZSArCiAgICAvLyAgICAgQVJDNThXYWxsZXRJRHNCeUFjY291bnRzTWJyICsKICAgIC8vICAgICBlc2Nyb3dzCiAgICAvLyAgICkKICAgIC8vIH0KICAgIHVuY292ZXIgNAogICAgaXRvYgogICAgdW5jb3ZlciA0CiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgNAogICAgaXRvYgogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBpdG9iCiAgICBjb25jYXQKICAgIGJ5dGVjIDkgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgNAogICAgc2V0Yml0CiAgICBjb25jYXQKICAgIHN3YXAKICAgIGl0b2IKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyMjAKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgYnl0ZWMgNyAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQucGx1Z2luc01icihlc2Nyb3c6IGJ5dGVzLCBtZXRob2RDb3VudDogdWludDY0KSAtPiB1aW50NjQ6CnBsdWdpbnNNYnI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIHByaXZhdGUgcGx1Z2luc01icihlc2Nyb3c6IHN0cmluZywgbWV0aG9kQ291bnQ6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAyIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1MwogICAgLy8gQm94Q29zdFBlckJ5dGUgKiAoKE1ldGhvZFJlc3RyaWN0aW9uQnl0ZUxlbmd0aCAqIG1ldGhvZENvdW50KSArIEJ5dGVzKGVzY3JvdykubGVuZ3RoKQogICAgcHVzaGludCAyMCAvLyAyMAogICAgZnJhbWVfZGlnIC0xCiAgICAqCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgKwogICAgaW50YyA0IC8vIDQwMAogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjUyCiAgICAvLyByZXR1cm4gTWluUGx1Z2luTUJSICsgKAogICAgcHVzaGludCAzODkwMCAvLyAzODkwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjUyLTU0CiAgICAvLyByZXR1cm4gTWluUGx1Z2luTUJSICsgKAogICAgLy8gICBCb3hDb3N0UGVyQnl0ZSAqICgoTWV0aG9kUmVzdHJpY3Rpb25CeXRlTGVuZ3RoICogbWV0aG9kQ291bnQpICsgQnl0ZXMoZXNjcm93KS5sZW5ndGgpCiAgICAvLyApOwogICAgKwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5tYXliZU5ld0VzY3Jvdyhlc2Nyb3c6IGJ5dGVzKSAtPiB1aW50NjQ6Cm1heWJlTmV3RXNjcm93OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjczCiAgICAvLyBwcml2YXRlIG1heWJlTmV3RXNjcm93KGVzY3Jvdzogc3RyaW5nKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo3NAogICAgLy8gaWYgKGVzY3JvdyA9PT0gJycpIHsKICAgIGZyYW1lX2RpZyAtMQogICAgYnl0ZWNfMSAvLyAiIgogICAgPT0KICAgIGJ6IG1heWJlTmV3RXNjcm93X2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjc1CiAgICAvLyByZXR1cm4gMDsKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICByZXRzdWIKCm1heWJlTmV3RXNjcm93X2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNwogICAgLy8gZXNjcm93cyA9IEJveE1hcDxzdHJpbmcsIEVzY3Jvd0luZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhFc2Nyb3dzIH0pCiAgICBieXRlYyA1IC8vICJlIgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzgKICAgIC8vIHJldHVybiB0aGlzLmVzY3Jvd3MoZXNjcm93KS5leGlzdHMKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjc4LTgwCiAgICAvLyByZXR1cm4gdGhpcy5lc2Nyb3dzKGVzY3JvdykuZXhpc3RzCiAgICAvLyAgID8gdGhpcy5lc2Nyb3dzKGVzY3JvdykudmFsdWUuaWQKICAgIC8vICAgOiB0aGlzLm5ld0VzY3Jvdyhlc2Nyb3cpOwogICAgYnogbWF5YmVOZXdFc2Nyb3dfdGVybmFyeV9mYWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzkKICAgIC8vID8gdGhpcy5lc2Nyb3dzKGVzY3JvdykudmFsdWUuaWQKICAgIGZyYW1lX2RpZyAwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CgptYXliZU5ld0VzY3Jvd190ZXJuYXJ5X21lcmdlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzgtODAKICAgIC8vIHJldHVybiB0aGlzLmVzY3Jvd3MoZXNjcm93KS5leGlzdHMKICAgIC8vICAgPyB0aGlzLmVzY3Jvd3MoZXNjcm93KS52YWx1ZS5pZAogICAgLy8gICA6IHRoaXMubmV3RXNjcm93KGVzY3Jvdyk7CiAgICBzd2FwCiAgICByZXRzdWIKCm1heWJlTmV3RXNjcm93X3Rlcm5hcnlfZmFsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4MAogICAgLy8gOiB0aGlzLm5ld0VzY3Jvdyhlc2Nyb3cpOwogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIG5ld0VzY3JvdwogICAgYiBtYXliZU5ld0VzY3Jvd190ZXJuYXJ5X21lcmdlQDUKCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50Lm5ld0VzY3Jvdyhlc2Nyb3c6IGJ5dGVzKSAtPiB1aW50NjQ6Cm5ld0VzY3JvdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4MwogICAgLy8gcHJpdmF0ZSBuZXdFc2Nyb3coZXNjcm93OiBzdHJpbmcpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODQKICAgIC8vIGlmICh0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlICE9PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcykgewogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29udHJvbGxlZEFkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ29udHJvbGxlZEFkZHJlc3MgfSk7CiAgICBieXRlY18wIC8vICJjb250cm9sbGVkX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODQKICAgIC8vIGlmICh0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlICE9PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcykgewogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAhPQogICAgYnogbmV3RXNjcm93X2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg1LTkxCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogdGhpcy5lc2Nyb3dzTWJyKGVzY3JvdykKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODcKICAgIC8vIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGNvbnRyb2xsZWRBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0NvbnRyb2xsZWRBZGRyZXNzIH0pOwogICAgYnl0ZWNfMCAvLyAiY29udHJvbGxlZF9hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg3CiAgICAvLyBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg4CiAgICAvLyByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjYyCiAgICAvLyByZXR1cm4gTWluRXNjcm93c01CUiArIChCb3hDb3N0UGVyQnl0ZSAqIEJ5dGVzKGVzY3JvdykubGVuZ3RoKTsKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjIDQgLy8gNDAwCiAgICAqCiAgICBwdXNoaW50IDY1MDAgLy8gNjUwMAogICAgKwogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODUtOTAKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiB0aGlzLmVzY3Jvd3NNYnIoZXNjcm93KQogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg1LTkxCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogdGhpcy5lc2Nyb3dzTWJyKGVzY3JvdykKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAoKbmV3RXNjcm93X2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5NC0xMDQKICAgIC8vIGNvbnN0IGlkID0gYWJpQ2FsbDx0eXBlb2YgRXNjcm93RmFjdG9yeS5wcm90b3R5cGUubmV3Pih7CiAgICAvLyAgIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgYXBwSWQ6IHRoaXMuZXNjcm93RmFjdG9yeS52YWx1ZSwKICAgIC8vICAgYXJnczogWwogICAgLy8gICAgIGl0eG4ucGF5bWVudCh7CiAgICAvLyAgICAgICBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgICBhbW91bnQ6IE5ld0Nvc3RGb3JBUkM1OCArIEdsb2JhbC5taW5CYWxhbmNlLAogICAgLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMuZXNjcm93RmFjdG9yeS52YWx1ZS5hZGRyZXNzCiAgICAvLyAgICAgfSksCiAgICAvLyAgIF0KICAgIC8vIH0pLnJldHVyblZhbHVlCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTkKICAgIC8vIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGNvbnRyb2xsZWRBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0NvbnRyb2xsZWRBZGRyZXNzIH0pOwogICAgYnl0ZWNfMCAvLyAiY29udHJvbGxlZF9hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjk5CiAgICAvLyBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwMAogICAgLy8gYW1vdW50OiBOZXdDb3N0Rm9yQVJDNTggKyBHbG9iYWwubWluQmFsYW5jZSwKICAgIHB1c2hpbnQgMTUwMDAwIC8vIDE1MDAwMAogICAgZ2xvYmFsIE1pbkJhbGFuY2UKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDEKICAgIC8vIHJlY2VpdmVyOiB0aGlzLmVzY3Jvd0ZhY3RvcnkudmFsdWUuYWRkcmVzcwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNAogICAgLy8gZXNjcm93RmFjdG9yeSA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzRXNjcm93RmFjdG9yeSB9KQogICAgYnl0ZWMgMTggLy8gImVzY3Jvd19mYWN0b3J5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwMQogICAgLy8gcmVjZWl2ZXI6IHRoaXMuZXNjcm93RmFjdG9yeS52YWx1ZS5hZGRyZXNzCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZHVwCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgZGlnIDEKICAgIGl0eG5fZmllbGQgU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTgtMTAyCiAgICAvLyBpdHhuLnBheW1lbnQoewogICAgLy8gICBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgIGFtb3VudDogTmV3Q29zdEZvckFSQzU4ICsgR2xvYmFsLm1pbkJhbGFuY2UsCiAgICAvLyAgIHJlY2VpdmVyOiB0aGlzLmVzY3Jvd0ZhY3RvcnkudmFsdWUuYWRkcmVzcwogICAgLy8gfSksCiAgICBpbnRjXzEgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTQtMTA0CiAgICAvLyBjb25zdCBpZCA9IGFiaUNhbGw8dHlwZW9mIEVzY3Jvd0ZhY3RvcnkucHJvdG90eXBlLm5ldz4oewogICAgLy8gICBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgIGFwcElkOiB0aGlzLmVzY3Jvd0ZhY3RvcnkudmFsdWUsCiAgICAvLyAgIGFyZ3M6IFsKICAgIC8vICAgICBpdHhuLnBheW1lbnQoewogICAgLy8gICAgICAgc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgICAgYW1vdW50OiBOZXdDb3N0Rm9yQVJDNTggKyBHbG9iYWwubWluQmFsYW5jZSwKICAgIC8vICAgICAgIHJlY2VpdmVyOiB0aGlzLmVzY3Jvd0ZhY3RvcnkudmFsdWUuYWRkcmVzcwogICAgLy8gICAgIH0pLAogICAgLy8gICBdCiAgICAvLyB9KS5yZXR1cm5WYWx1ZQogICAgaXR4bl9uZXh0CiAgICBwdXNoYnl0ZXMgMHhkODVjZjE4NCAvLyBtZXRob2QgIm5ldyhwYXkpdWludDY0IgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgaXR4bl9maWVsZCBTZW5kZXIKICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBnaXR4biAxIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlYyA3IC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDYKICAgIC8vIHRoaXMuZXNjcm93cyhlc2Nyb3cpLnZhbHVlID0geyBpZCwgbG9ja2VkOiBmYWxzZSB9CiAgICBkdXAKICAgIGl0b2IKICAgIGJ5dGVjIDkgLy8gMHgwMAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzcKICAgIC8vIGVzY3Jvd3MgPSBCb3hNYXA8c3RyaW5nLCBFc2Nyb3dJbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4RXNjcm93cyB9KQogICAgYnl0ZWMgNSAvLyAiZSIKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTA2CiAgICAvLyB0aGlzLmVzY3Jvd3MoZXNjcm93KS52YWx1ZSA9IHsgaWQsIGxvY2tlZDogZmFsc2UgfQogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwOAogICAgLy8gcmV0dXJuIGlkOwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5wbHVnaW5DYWxsQWxsb3dlZChwbHVnaW46IHVpbnQ2NCwgY2FsbGVyOiBieXRlcywgZXNjcm93OiBieXRlcywgbWV0aG9kOiBieXRlcykgLT4gdWludDY0OgpwbHVnaW5DYWxsQWxsb3dlZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTEKICAgIC8vIHByaXZhdGUgcGx1Z2luQ2FsbEFsbG93ZWQocGx1Z2luOiB1aW50NjQsIGNhbGxlcjogQWNjb3VudCwgZXNjcm93OiBzdHJpbmcsIG1ldGhvZDogYnl0ZXM8ND4pOiBib29sZWFuIHsKICAgIHByb3RvIDQgMQogICAgYnl0ZWNfMSAvLyAiIgogICAgZHVwbiA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTEyCiAgICAvLyBjb25zdCBrZXk6IFBsdWdpbktleSA9IHsgcGx1Z2luLCBjYWxsZXIsIGVzY3JvdyB9CiAgICBmcmFtZV9kaWcgLTQKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMwogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBieXRlYyAxMiAvLyAweDAwMmEKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIHBsdWdpbnMgPSBCb3hNYXA8UGx1Z2luS2V5LCBQbHVnaW5JbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4UGx1Z2lucyB9KTsKICAgIGJ5dGVjIDQgLy8gInAiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNAogICAgLy8gaWYgKCF0aGlzLnBsdWdpbnMoa2V5KS5leGlzdHMpIHsKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYm56IHBsdWdpbkNhbGxBbGxvd2VkX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNQogICAgLy8gcmV0dXJuIGZhbHNlOwogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpwbHVnaW5DYWxsQWxsb3dlZF9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE4CiAgICAvLyBjb25zdCB7IG1ldGhvZHMsIHVzZVJvdW5kcywgbGFzdENhbGxlZCwgY29vbGRvd24sIHVzZUV4ZWN1dGlvbktleSB9ID0gdGhpcy5wbHVnaW5zKGtleSkudmFsdWUgYXMgUmVhZG9ubHk8UGx1Z2luSW5mbz4KICAgIGZyYW1lX2RpZyA2CiAgICBkdXAKICAgIHB1c2hpbnQgMTcgLy8gMTcKICAgIGludGNfMyAvLyA4CiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgZnJhbWVfYnVyeSAwCiAgICBkdXAKICAgIHB1c2hpbnQgMjcgLy8gMjcKICAgIGludGNfMSAvLyAxCiAgICBib3hfZXh0cmFjdAogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgZ2V0Yml0CiAgICBmcmFtZV9idXJ5IDUKICAgIGludGNfMiAvLyAyCiAgICBnZXRiaXQKICAgIHN3YXAKICAgIHB1c2hpbnQgMjggLy8gMjgKICAgIGludGNfMyAvLyA4CiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgZnJhbWVfYnVyeSAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTIwCiAgICAvLyBpZiAodXNlRXhlY3V0aW9uS2V5KSB7CiAgICBieiBwbHVnaW5DYWxsQWxsb3dlZF9hZnRlcl9pZl9lbHNlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMjEKICAgIC8vIHJldHVybiBmYWxzZQogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpwbHVnaW5DYWxsQWxsb3dlZF9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTI0CiAgICAvLyBsZXQgbWV0aG9kQWxsb3dlZCA9IG1ldGhvZHMubGVuZ3RoID4gMCA/IGZhbHNlIDogdHJ1ZTsKICAgIGZyYW1lX2RpZyA2CiAgICBwdXNoaW50IDQ0IC8vIDQ0CiAgICBpbnRjXzIgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgICEKICAgIGZyYW1lX2J1cnkgNAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyNQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IG1ldGhvZHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDIKCnBsdWdpbkNhbGxBbGxvd2VkX3doaWxlX3RvcEA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyNQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IG1ldGhvZHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGZyYW1lX2RpZyA2CiAgICBwdXNoaW50IDQ0IC8vIDQ0CiAgICBpbnRjXzIgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGZyYW1lX2RpZyAyCiAgICA+CiAgICBieiBwbHVnaW5DYWxsQWxsb3dlZF9ibG9ja0AxMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyNgogICAgLy8gaWYgKG1ldGhvZHNbaV0uc2VsZWN0b3IgPT09IG1ldGhvZCkgewogICAgZnJhbWVfZGlnIDIKICAgIHB1c2hpbnQgMjAgLy8gMjAKICAgICoKICAgIHB1c2hpbnQgNDYgLy8gNDYKICAgICsKICAgIGZyYW1lX2RpZyA2CiAgICBzd2FwCiAgICBwdXNoaW50IDIwIC8vIDIwCiAgICBib3hfZXh0cmFjdAogICAgZXh0cmFjdCAwIDQKICAgIGZyYW1lX2RpZyAtMQogICAgPT0KICAgIGJ6IHBsdWdpbkNhbGxBbGxvd2VkX2FmdGVyX2lmX2Vsc2VAOAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyNwogICAgLy8gbWV0aG9kQWxsb3dlZCA9IHRydWU7CiAgICBpbnRjXzEgLy8gMQogICAgZnJhbWVfYnVyeSA0CgpwbHVnaW5DYWxsQWxsb3dlZF9ibG9ja0AxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMzIKICAgIC8vIGNvbnN0IGVwb2NoUmVmID0gdXNlUm91bmRzID8gR2xvYmFsLnJvdW5kIDogR2xvYmFsLmxhdGVzdFRpbWVzdGFtcDsKICAgIGZyYW1lX2RpZyA1CiAgICBieiBwbHVnaW5DYWxsQWxsb3dlZF90ZXJuYXJ5X2ZhbHNlQDEyCiAgICBnbG9iYWwgUm91bmQKICAgIGZyYW1lX2J1cnkgMQoKcGx1Z2luQ2FsbEFsbG93ZWRfdGVybmFyeV9tZXJnZUAxMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMzUKICAgIC8vIGxhc3RDYWxsZWQgPj0gZXBvY2hSZWYgJiYKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMQogICAgPj0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMzUtMTM2CiAgICAvLyBsYXN0Q2FsbGVkID49IGVwb2NoUmVmICYmCiAgICAvLyAoZXBvY2hSZWYgLSBsYXN0Q2FsbGVkKSA+PSBjb29sZG93biAmJgogICAgYnogcGx1Z2luQ2FsbEFsbG93ZWRfYm9vbF9mYWxzZUAxNgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEzNgogICAgLy8gKGVwb2NoUmVmIC0gbGFzdENhbGxlZCkgPj0gY29vbGRvd24gJiYKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgMwogICAgLQogICAgZnJhbWVfZGlnIDAKICAgID49CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTM1LTEzNgogICAgLy8gbGFzdENhbGxlZCA+PSBlcG9jaFJlZiAmJgogICAgLy8gKGVwb2NoUmVmIC0gbGFzdENhbGxlZCkgPj0gY29vbGRvd24gJiYKICAgIGJ6IHBsdWdpbkNhbGxBbGxvd2VkX2Jvb2xfZmFsc2VAMTYKICAgIGludGNfMSAvLyAxCgpwbHVnaW5DYWxsQWxsb3dlZF9ib29sX21lcmdlQDE3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEzNS0xMzcKICAgIC8vIGxhc3RDYWxsZWQgPj0gZXBvY2hSZWYgJiYKICAgIC8vIChlcG9jaFJlZiAtIGxhc3RDYWxsZWQpID49IGNvb2xkb3duICYmCiAgICAvLyBtZXRob2RBbGxvd2VkCiAgICBmcmFtZV9kaWcgNAogICAgJiYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMzQtMTM4CiAgICAvLyByZXR1cm4gKAogICAgLy8gICBsYXN0Q2FsbGVkID49IGVwb2NoUmVmICYmCiAgICAvLyAgIChlcG9jaFJlZiAtIGxhc3RDYWxsZWQpID49IGNvb2xkb3duICYmCiAgICAvLyAgIG1ldGhvZEFsbG93ZWQKICAgIC8vICkKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpwbHVnaW5DYWxsQWxsb3dlZF9ib29sX2ZhbHNlQDE2OgogICAgaW50Y18wIC8vIDAKICAgIGIgcGx1Z2luQ2FsbEFsbG93ZWRfYm9vbF9tZXJnZUAxNwoKcGx1Z2luQ2FsbEFsbG93ZWRfdGVybmFyeV9mYWxzZUAxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMzIKICAgIC8vIGNvbnN0IGVwb2NoUmVmID0gdXNlUm91bmRzID8gR2xvYmFsLnJvdW5kIDogR2xvYmFsLmxhdGVzdFRpbWVzdGFtcDsKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGZyYW1lX2J1cnkgMQogICAgYiBwbHVnaW5DYWxsQWxsb3dlZF90ZXJuYXJ5X21lcmdlQDEzCgpwbHVnaW5DYWxsQWxsb3dlZF9hZnRlcl9pZl9lbHNlQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTI1CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7IGkgKz0gMSkgewogICAgZnJhbWVfZGlnIDIKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDIKICAgIGIgcGx1Z2luQ2FsbEFsbG93ZWRfd2hpbGVfdG9wQDUKCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LnR4blJla2V5c0JhY2sodHhuOiB1aW50NjQpIC0+IHVpbnQ2NDoKdHhuUmVrZXlzQmFjazoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNDEKICAgIC8vIHByaXZhdGUgdHhuUmVrZXlzQmFjayh0eG46IGd0eG4uVHJhbnNhY3Rpb24pOiBib29sZWFuIHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE0NAogICAgLy8gdHhuLnNlbmRlciA9PT0gdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSAmJgogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGNvbnRyb2xsZWRBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0NvbnRyb2xsZWRBZGRyZXNzIH0pOwogICAgYnl0ZWNfMCAvLyAiY29udHJvbGxlZF9hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE0NAogICAgLy8gdHhuLnNlbmRlciA9PT0gdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSAmJgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTQ0LTE0NQogICAgLy8gdHhuLnNlbmRlciA9PT0gdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSAmJgogICAgLy8gdHhuLnJla2V5VG8gPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBieiB0eG5SZWtleXNCYWNrX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE0NQogICAgLy8gdHhuLnJla2V5VG8gPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIFJla2V5VG8KICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE0NC0xNDUKICAgIC8vIHR4bi5zZW5kZXIgPT09IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUgJiYKICAgIC8vIHR4bi5yZWtleVRvID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgYnogdHhuUmVrZXlzQmFja19hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNDcKICAgIC8vIHJldHVybiB0cnVlOwogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKdHhuUmVrZXlzQmFja19hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTUxCiAgICAvLyB0eG4udHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLkFwcGxpY2F0aW9uQ2FsbAogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBUeXBlRW51bQogICAgcHVzaGludCA2IC8vIDYKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTUxLTE1MgogICAgLy8gdHhuLnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5BcHBsaWNhdGlvbkNhbGwKICAgIC8vICYmIHR4bi5hcHBJZCA9PT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbklkCiAgICBieiB0eG5SZWtleXNCYWNrX2Jvb2xfZmFsc2VAOQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE1MgogICAgLy8gJiYgdHhuLmFwcElkID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uSWQKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQXBwbGljYXRpb25JRAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbklECiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE1MS0xNTIKICAgIC8vIHR4bi50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuQXBwbGljYXRpb25DYWxsCiAgICAvLyAmJiB0eG4uYXBwSWQgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25JZAogICAgYnogdHhuUmVrZXlzQmFja19ib29sX2ZhbHNlQDkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNTMKICAgIC8vICYmIHR4bi5udW1BcHBBcmdzID09PSAxCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIE51bUFwcEFyZ3MKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE1MS0xNTMKICAgIC8vIHR4bi50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuQXBwbGljYXRpb25DYWxsCiAgICAvLyAmJiB0eG4uYXBwSWQgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25JZAogICAgLy8gJiYgdHhuLm51bUFwcEFyZ3MgPT09IDEKICAgIGJ6IHR4blJla2V5c0JhY2tfYm9vbF9mYWxzZUA5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTU0CiAgICAvLyAmJiB0eG4ub25Db21wbGV0aW9uID09PSBPbkNvbXBsZXRlQWN0aW9uLk5vT3AKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgT25Db21wbGV0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTUxLTE1NAogICAgLy8gdHhuLnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5BcHBsaWNhdGlvbkNhbGwKICAgIC8vICYmIHR4bi5hcHBJZCA9PT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbklkCiAgICAvLyAmJiB0eG4ubnVtQXBwQXJncyA9PT0gMQogICAgLy8gJiYgdHhuLm9uQ29tcGxldGlvbiA9PT0gT25Db21wbGV0ZUFjdGlvbi5Ob09wCiAgICBibnogdHhuUmVrZXlzQmFja19ib29sX2ZhbHNlQDkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNTUKICAgIC8vICYmIHR4bi5hcHBBcmdzKDApID09PSBtZXRob2RTZWxlY3RvcignYXJjNThfdmVyaWZ5QXV0aEFkZHJlc3MoKXZvaWQnKQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgZ3R4bnNhcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGVjIDIyIC8vIG1ldGhvZCAiYXJjNThfdmVyaWZ5QXV0aEFkZHJlc3MoKXZvaWQiCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE1MS0xNTUKICAgIC8vIHR4bi50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuQXBwbGljYXRpb25DYWxsCiAgICAvLyAmJiB0eG4uYXBwSWQgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25JZAogICAgLy8gJiYgdHhuLm51bUFwcEFyZ3MgPT09IDEKICAgIC8vICYmIHR4bi5vbkNvbXBsZXRpb24gPT09IE9uQ29tcGxldGVBY3Rpb24uTm9PcAogICAgLy8gJiYgdHhuLmFwcEFyZ3MoMCkgPT09IG1ldGhvZFNlbGVjdG9yKCdhcmM1OF92ZXJpZnlBdXRoQWRkcmVzcygpdm9pZCcpCiAgICBieiB0eG5SZWtleXNCYWNrX2Jvb2xfZmFsc2VAOQogICAgaW50Y18xIC8vIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNTAtMTU2CiAgICAvLyByZXR1cm4gKAogICAgLy8gICB0eG4udHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLkFwcGxpY2F0aW9uQ2FsbAogICAgLy8gICAmJiB0eG4uYXBwSWQgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25JZAogICAgLy8gICAmJiB0eG4ubnVtQXBwQXJncyA9PT0gMQogICAgLy8gICAmJiB0eG4ub25Db21wbGV0aW9uID09PSBPbkNvbXBsZXRlQWN0aW9uLk5vT3AKICAgIC8vICAgJiYgdHhuLmFwcEFyZ3MoMCkgPT09IG1ldGhvZFNlbGVjdG9yKCdhcmM1OF92ZXJpZnlBdXRoQWRkcmVzcygpdm9pZCcpCiAgICAvLyApCiAgICByZXRzdWIKCnR4blJla2V5c0JhY2tfYm9vbF9mYWxzZUA5OgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNTAtMTU2CiAgICAvLyByZXR1cm4gKAogICAgLy8gICB0eG4udHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLkFwcGxpY2F0aW9uQ2FsbAogICAgLy8gICAmJiB0eG4uYXBwSWQgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25JZAogICAgLy8gICAmJiB0eG4ubnVtQXBwQXJncyA9PT0gMQogICAgLy8gICAmJiB0eG4ub25Db21wbGV0aW9uID09PSBPbkNvbXBsZXRlQWN0aW9uLk5vT3AKICAgIC8vICAgJiYgdHhuLmFwcEFyZ3MoMCkgPT09IG1ldGhvZFNlbGVjdG9yKCdhcmM1OF92ZXJpZnlBdXRoQWRkcmVzcygpdm9pZCcpCiAgICAvLyApCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LnBsdWdpbkNoZWNrKGtleTogYnl0ZXMpIC0+IGJ5dGVzLCBieXRlczoKcGx1Z2luQ2hlY2s6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTczCiAgICAvLyBwcml2YXRlIHBsdWdpbkNoZWNrKGtleTogUGx1Z2luS2V5KTogUGx1Z2luVmFsaWRhdGlvbiB7CiAgICBwcm90byAxIDIKICAgIGJ5dGVjXzEgLy8gIiIKICAgIGR1cG4gMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBwbHVnaW5zID0gQm94TWFwPFBsdWdpbktleSwgUGx1Z2luSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeFBsdWdpbnMgfSk7CiAgICBieXRlYyA0IC8vICJwIgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE3NQogICAgLy8gY29uc3QgZXhpc3RzID0gdGhpcy5wbHVnaW5zKGtleSkuZXhpc3RzOwogICAgYm94X2xlbgogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE3NgogICAgLy8gaWYgKCFleGlzdHMpIHsKICAgIGJueiBwbHVnaW5DaGVja19hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNzctMTgyCiAgICAvLyByZXR1cm4gewogICAgLy8gICBleGlzdHM6IGZhbHNlLAogICAgLy8gICBleHBpcmVkOiB0cnVlLAogICAgLy8gICBvbkNvb2xkb3duOiB0cnVlLAogICAgLy8gICBoYXNNZXRob2RSZXN0cmljdGlvbnM6IGZhbHNlLAogICAgLy8gfQogICAgcHVzaGJ5dGVzIDB4NjAKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfYnVyeSAxCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKcGx1Z2luQ2hlY2tfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4NQogICAgLy8gY29uc3QgeyB1c2VSb3VuZHMsIGxhc3RWYWxpZCwgY29vbGRvd24sIGxhc3RDYWxsZWQsIG1ldGhvZHMgfSA9IHRoaXMucGx1Z2lucyhrZXkpLnZhbHVlIGFzIFJlYWRvbmx5PFBsdWdpbkluZm8+CiAgICBmcmFtZV9kaWcgMwogICAgZHVwCiAgICBwdXNoaW50IDkgLy8gOQogICAgaW50Y18zIC8vIDgKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBmcmFtZV9idXJ5IDIKICAgIGR1cAogICAgcHVzaGludCAxNyAvLyAxNwogICAgaW50Y18zIC8vIDgKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBmcmFtZV9idXJ5IDAKICAgIGR1cAogICAgcHVzaGludCAyNyAvLyAyNwogICAgaW50Y18xIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICBpbnRjXzEgLy8gMQogICAgZ2V0Yml0CiAgICBzd2FwCiAgICBwdXNoaW50IDI4IC8vIDI4CiAgICBpbnRjXzMgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4NgogICAgLy8gY29uc3QgZXBvY2hSZWYgPSB1c2VSb3VuZHMgPyBHbG9iYWwucm91bmQgOiBHbG9iYWwubGF0ZXN0VGltZXN0YW1wOwogICAgYnogcGx1Z2luQ2hlY2tfdGVybmFyeV9mYWxzZUA0CiAgICBnbG9iYWwgUm91bmQKCnBsdWdpbkNoZWNrX3Rlcm5hcnlfbWVyZ2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOTAKICAgIC8vIGV4cGlyZWQ6IGVwb2NoUmVmID4gbGFzdFZhbGlkLAogICAgZHVwCiAgICBmcmFtZV9kaWcgMgogICAgPgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE5MQogICAgLy8gb25Db29sZG93bjogKGVwb2NoUmVmIC0gbGFzdENhbGxlZCkgPCBjb29sZG93biwKICAgIHN3YXAKICAgIGZyYW1lX2RpZyAxCiAgICAtCiAgICBmcmFtZV9kaWcgMAogICAgPAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE5MgogICAgLy8gaGFzTWV0aG9kUmVzdHJpY3Rpb25zOiBtZXRob2RzLmxlbmd0aCA+IDAsCiAgICBmcmFtZV9kaWcgMwogICAgcHVzaGludCA0NCAvLyA0NAogICAgaW50Y18yIC8vIDIKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBpbnRjXzAgLy8gMAogICAgPgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4OC0xOTMKICAgIC8vIHJldHVybiB7CiAgICAvLyAgIGV4aXN0cywKICAgIC8vICAgZXhwaXJlZDogZXBvY2hSZWYgPiBsYXN0VmFsaWQsCiAgICAvLyAgIG9uQ29vbGRvd246IChlcG9jaFJlZiAtIGxhc3RDYWxsZWQpIDwgY29vbGRvd24sCiAgICAvLyAgIGhhc01ldGhvZFJlc3RyaWN0aW9uczogbWV0aG9kcy5sZW5ndGggPiAwLAogICAgLy8gfQogICAgYnl0ZWMgOSAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfZGlnIDQKICAgIHNldGJpdAogICAgaW50Y18xIC8vIDEKICAgIHVuY292ZXIgNAogICAgc2V0Yml0CiAgICBpbnRjXzIgLy8gMgogICAgdW5jb3ZlciAzCiAgICBzZXRiaXQKICAgIHB1c2hpbnQgMyAvLyAzCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9idXJ5IDEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpwbHVnaW5DaGVja190ZXJuYXJ5X2ZhbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTg2CiAgICAvLyBjb25zdCBlcG9jaFJlZiA9IHVzZVJvdW5kcyA/IEdsb2JhbC5yb3VuZCA6IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXA7CiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBiIHBsdWdpbkNoZWNrX3Rlcm5hcnlfbWVyZ2VANQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbihwbHVnaW46IHVpbnQ2NCwgZ2xvYmFsOiB1aW50NjQsIGVzY3JvdzogYnl0ZXMsIG1ldGhvZE9mZnNldHM6IGJ5dGVzLCBmdW5kc1JlcXVlc3Q6IGJ5dGVzKSAtPiBieXRlcywgYnl0ZXM6CnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1NjctNTczCiAgICAvLyBhcmM1OF9yZWtleVRvUGx1Z2luKAogICAgLy8gICBwbHVnaW46IHVpbnQ2NCwKICAgIC8vICAgZ2xvYmFsOiBib29sZWFuLAogICAgLy8gICBlc2Nyb3c6IHN0cmluZywKICAgIC8vICAgbWV0aG9kT2Zmc2V0czogdWludDY0W10sCiAgICAvLyAgIGZ1bmRzUmVxdWVzdDogRnVuZHNSZXF1ZXN0W10KICAgIC8vICk6IHZvaWQgewogICAgcHJvdG8gNSAyCiAgICBpbnRjXzAgLy8gMAogICAgZHVwbiAxMAogICAgYnl0ZWNfMSAvLyAiIgogICAgZHVwbiAxOAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU3NQogICAgLy8gY29uc3QgY2FsbGVyID0gZ2xvYmFsID8gR2xvYmFsLnplcm9BZGRyZXNzIDogVHhuLnNlbmRlcgogICAgZnJhbWVfZGlnIC00CiAgICBieiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fdGVybmFyeV9mYWxzZUAyCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl90ZXJuYXJ5X21lcmdlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTc2CiAgICAvLyBjb25zdCBrZXk6IFBsdWdpbktleSA9IHsgcGx1Z2luLCBjYWxsZXIsIGVzY3JvdyB9CiAgICBmcmFtZV9kaWcgLTUKICAgIGl0b2IKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0zCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTMKICAgIGNvbmNhdAogICAgZHVwCiAgICBmcmFtZV9idXJ5IDEKICAgIHN3YXAKICAgIGJ5dGVjIDEyIC8vIDB4MDAyYQogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgZnJhbWVfYnVyeSA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIHBsdWdpbnMgPSBCb3hNYXA8UGx1Z2luS2V5LCBQbHVnaW5JbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4UGx1Z2lucyB9KTsKICAgIGJ5dGVjIDQgLy8gInAiCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU3OAogICAgLy8gYXNzZXJ0KHRoaXMucGx1Z2lucyhrZXkpLmV4aXN0cywgRVJSX1BMVUdJTl9ET0VTX05PVF9FWElTVCkKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIHBsdWdpbiBkb2VzIG5vdCBleGlzdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI4CiAgICAvLyBjdXJyZW50UGx1Z2luID0gR2xvYmFsU3RhdGU8UGx1Z2luS2V5Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ3VycmVudFBsdWdpbiB9KQogICAgYnl0ZWMgMTkgLy8gImN1cnJlbnRfcGx1Z2luIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU3OQogICAgLy8gdGhpcy5jdXJyZW50UGx1Z2luLnZhbHVlID0gY2xvbmUoa2V5KQogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1ODEKICAgIC8vIGlmIChlc2Nyb3cgIT09ICcnKSB7CiAgICBmcmFtZV9kaWcgLTMKICAgIGJ5dGVjXzEgLy8gIiIKICAgICE9CiAgICBieiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fZWxzZV9ib2R5QDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNwogICAgLy8gZXNjcm93cyA9IEJveE1hcDxzdHJpbmcsIEVzY3Jvd0luZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhFc2Nyb3dzIH0pCiAgICBieXRlYyA1IC8vICJlIgogICAgZnJhbWVfZGlnIC0zCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1ODIKICAgIC8vIGFzc2VydCh0aGlzLmVzY3Jvd3MoZXNjcm93KS5leGlzdHMsIEVSUl9FU0NST1dfRE9FU19OT1RfRVhJU1QpCiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGVzY3JvdyBkb2VzIG5vdCBleGlzdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU4MwogICAgLy8gY29uc3QgZXNjcm93SUQgPSB0aGlzLmVzY3Jvd3MoZXNjcm93KS52YWx1ZS5pZAogICAgYm94X2dldAogICAgcG9wCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1ODUKICAgIC8vIHRoaXMuc3BlbmRpbmdBZGRyZXNzLnZhbHVlID0gc3BlbmRpbmdBcHAuYWRkcmVzcwogICAgZHVwCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjYKICAgIC8vIHNwZW5kaW5nQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNTcGVuZGluZ0FkZHJlc3MgfSkKICAgIGJ5dGVjIDExIC8vICJzcGVuZGluZ19hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU4NQogICAgLy8gdGhpcy5zcGVuZGluZ0FkZHJlc3MudmFsdWUgPSBzcGVuZGluZ0FwcC5hZGRyZXNzCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMxNgogICAgLy8gY29uc3QgZXNjcm93QWRkcmVzcyA9IEFwcGxpY2F0aW9uKGVzY3Jvd0lEKS5hZGRyZXNzOwogICAgYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwogICAgc3dhcAogICAgZnJhbWVfYnVyeSA1CiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzE4CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgZnVuZHNSZXF1ZXN0cy5sZW5ndGg7IGkgKz0gMSkgewogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgMTYKCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl93aGlsZV90b3BANTY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzE4CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgZnVuZHNSZXF1ZXN0cy5sZW5ndGg7IGkgKz0gMSkgewogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2RpZyAxNgogICAgPgogICAgYnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VAOAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMyMgogICAgLy8gYXNzZXQ6IGZ1bmRzUmVxdWVzdHNbaV0uYXNzZXQKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAxNgogICAgcHVzaGludCAxNiAvLyAxNgogICAgKgogICAgcHVzaGludCAxNiAvLyAxNgogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMjkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozMjAtMzIzCiAgICAvLyBjb25zdCBhbGxvd2FuY2VLZXk6IEFsbG93YW5jZUtleSA9IHsKICAgIC8vICAgZXNjcm93LAogICAgLy8gICBhc3NldDogZnVuZHNSZXF1ZXN0c1tpXS5hc3NldAogICAgLy8gfQogICAgaXRvYgogICAgYnl0ZWMgMTMgLy8gMHgwMDBhCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAxCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozOQogICAgLy8gYWxsb3dhbmNlcyA9IEJveE1hcDxBbGxvd2FuY2VLZXksIEFsbG93YW5jZUluZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhBbGxvd2FuY2VzIH0pIC8vIDM4XzUwMAogICAgYnl0ZWMgMTQgLy8gImEiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgZnJhbWVfYnVyeSAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzQ5CiAgICAvLyBhc3NlcnQodGhpcy5hbGxvd2FuY2VzKGtleSkuZXhpc3RzLCBFUlJfQUxMT1dBTkNFX0RPRVNfTk9UX0VYSVNUKTsKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWxsb3dhbmNlIGRvZXMgbm90IGV4aXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzUwCiAgICAvLyBjb25zdCB7IHR5cGUsIHNwZW50LCBhbW91bnQsIGxhc3QsIG1heCwgaW50ZXJ2YWwsIHN0YXJ0LCB1c2VSb3VuZHMgfSA9IHRoaXMuYWxsb3dhbmNlcyhrZXkpLnZhbHVlCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIGR1cAogICAgZXh0cmFjdCAwIDEKICAgIGZyYW1lX2J1cnkgMTAKICAgIGR1cAogICAgcHVzaGludCAxNyAvLyAxNwogICAgZXh0cmFjdF91aW50NjQKICAgIGZyYW1lX2J1cnkgMjYKICAgIGR1cAogICAgcHVzaGludCA5IC8vIDkKICAgIGV4dHJhY3RfdWludDY0CiAgICBmcmFtZV9idXJ5IDExCiAgICBkdXAKICAgIHB1c2hpbnQgMzMgLy8gMzMKICAgIGV4dHJhY3RfdWludDY0CiAgICBmcmFtZV9idXJ5IDE5CiAgICBkdXAKICAgIGludGNfMSAvLyAxCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZnJhbWVfYnVyeSAyMQogICAgZHVwCiAgICBwdXNoaW50IDI1IC8vIDI1CiAgICBleHRyYWN0X3VpbnQ2NAogICAgZnJhbWVfYnVyeSAxNwogICAgZHVwCiAgICBwdXNoaW50IDQxIC8vIDQxCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZnJhbWVfYnVyeSAyNwogICAgcHVzaGludCAzOTIgLy8gMzkyCiAgICBnZXRiaXQKICAgIGR1cAogICAgZnJhbWVfYnVyeSAyOAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM1MQogICAgLy8gY29uc3QgbmV3TGFzdCA9IHVzZVJvdW5kcyA/IEdsb2JhbC5yb3VuZCA6IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXA7CiAgICBieiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fdGVybmFyeV9mYWxzZUA1OQogICAgZ2xvYmFsIFJvdW5kCiAgICBmcmFtZV9idXJ5IDI0CgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fdGVybmFyeV9tZXJnZUA2MDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNTMKICAgIC8vIGlmICh0eXBlID09PSBTcGVuZEFsbG93YW5jZVR5cGVGbGF0KSB7CiAgICBmcmFtZV9kaWcgMTAKICAgIGJ5dGVjIDE1IC8vIDB4MDEKICAgID09CiAgICBieiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fZWxzZV9ib2R5QDYyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzU0CiAgICAvLyBjb25zdCBsZWZ0b3ZlcjogdWludDY0ID0gYW1vdW50IC0gc3BlbnQ7CiAgICBmcmFtZV9kaWcgMTEKICAgIGZyYW1lX2RpZyAyNgogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM1NQogICAgLy8gYXNzZXJ0KGxlZnRvdmVyID49IGZ1bmRSZXF1ZXN0LmFtb3VudCwgRVJSX0FMTE9XQU5DRV9FWENFRURFRCk7CiAgICBmcmFtZV9kaWcgMAogICAgaW50Y18zIC8vIDgKICAgIGV4dHJhY3RfdWludDY0CiAgICBzd2FwCiAgICBkaWcgMQogICAgPj0KICAgIGFzc2VydCAvLyBhbGxvd2FuY2UgZXhjZWVkZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNTYKICAgIC8vIHRoaXMuYWxsb3dhbmNlcyhrZXkpLnZhbHVlLnNwZW50ICs9IGZ1bmRSZXF1ZXN0LmFtb3VudAogICAgZnJhbWVfZGlnIDMKICAgIGR1cAogICAgY292ZXIgMgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIHB1c2hpbnQgMTcgLy8gMTcKICAgIGV4dHJhY3RfdWludDY0CiAgICArCiAgICBpdG9iCiAgICBwdXNoaW50IDE3IC8vIDE3CiAgICBzd2FwCiAgICBib3hfcmVwbGFjZQoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VANzE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzgxCiAgICAvLyB0aGlzLmFsbG93YW5jZXMoa2V5KS52YWx1ZS5sYXN0ID0gbmV3TGFzdAogICAgZnJhbWVfZGlnIDI0CiAgICBpdG9iCiAgICBmcmFtZV9kaWcgMwogICAgcHVzaGludCAzMyAvLyAzMwogICAgdW5jb3ZlciAyCiAgICBib3hfcmVwbGFjZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMyNwogICAgLy8gaWYgKGZ1bmRzUmVxdWVzdHNbaV0uYXNzZXQgIT09IDApIHsKICAgIGZyYW1lX2RpZyAyOQogICAgYnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2Vsc2VfYm9keUA3MwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMyOC0zMzUKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBlc2Nyb3dBZGRyZXNzLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiBmdW5kc1JlcXVlc3RzW2ldLmFtb3VudCwKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGZ1bmRzUmVxdWVzdHNbaV0uYXNzZXQKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMzMAogICAgLy8gc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29udHJvbGxlZEFkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ29udHJvbGxlZEFkZHJlc3MgfSk7CiAgICBieXRlY18wIC8vICJjb250cm9sbGVkX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzMwCiAgICAvLyBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMzMgogICAgLy8gYXNzZXRBbW91bnQ6IGZ1bmRzUmVxdWVzdHNbaV0uYW1vdW50LAogICAgZnJhbWVfZGlnIDAKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgZnJhbWVfZGlnIDI5CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIDUKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozMjgtMzM0CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogZXNjcm93QWRkcmVzcywKICAgIC8vICAgICBhc3NldEFtb3VudDogZnVuZHNSZXF1ZXN0c1tpXS5hbW91bnQsCiAgICAvLyAgICAgeGZlckFzc2V0OiBmdW5kc1JlcXVlc3RzW2ldLmFzc2V0CiAgICAvLyAgIH0pCiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzI4LTMzNQogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IGVzY3Jvd0FkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IGZ1bmRzUmVxdWVzdHNbaV0uYW1vdW50LAogICAgLy8gICAgIHhmZXJBc3NldDogZnVuZHNSZXF1ZXN0c1tpXS5hc3NldAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX3N1Ym1pdAoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VANzQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzE4CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgZnVuZHNSZXF1ZXN0cy5sZW5ndGg7IGkgKz0gMSkgewogICAgZnJhbWVfZGlnIDE2CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAxNgogICAgYiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fd2hpbGVfdG9wQDU2CgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fZWxzZV9ib2R5QDczOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMzNy0zNDMKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcjogZXNjcm93QWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IGZ1bmRzUmVxdWVzdHNbaV0uYW1vdW50CiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozMzkKICAgIC8vIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGNvbnRyb2xsZWRBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0NvbnRyb2xsZWRBZGRyZXNzIH0pOwogICAgYnl0ZWNfMCAvLyAiY29udHJvbGxlZF9hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMzOQogICAgLy8gc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNDEKICAgIC8vIGFtb3VudDogZnVuZHNSZXF1ZXN0c1tpXS5hbW91bnQKICAgIGZyYW1lX2RpZyAwCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBmcmFtZV9kaWcgNQogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgaXR4bl9maWVsZCBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozMzctMzQyCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgcmVjZWl2ZXI6IGVzY3Jvd0FkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiBmdW5kc1JlcXVlc3RzW2ldLmFtb3VudAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMzNy0zNDMKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcjogZXNjcm93QWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IGZ1bmRzUmVxdWVzdHNbaV0uYW1vdW50CiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0CiAgICBiIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pZl9lbHNlQDc0CgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fZWxzZV9ib2R5QDYyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM1NwogICAgLy8gfSBlbHNlIGlmICh0eXBlID09PSBTcGVuZEFsbG93YW5jZVR5cGVXaW5kb3cpIHsKICAgIGZyYW1lX2RpZyAxMAogICAgcHVzaGJ5dGVzIDB4MDIKICAgID09CiAgICBieiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fZWxzZV9ib2R5QDY2CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Mzg1CiAgICAvLyBpZiAodXNlUm91bmRzKSB7CiAgICBmcmFtZV9kaWcgMjgKICAgIGJ6IHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pZl9lbHNlQDc3CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Mzg2CiAgICAvLyByZXR1cm4gR2xvYmFsLnJvdW5kIC0gKChHbG9iYWwucm91bmQgLSBzdGFydCkgJSBpbnRlcnZhbCkKICAgIGdsb2JhbCBSb3VuZAogICAgZHVwCiAgICBmcmFtZV9kaWcgMjcKICAgIC0KICAgIGZyYW1lX2RpZyAxNwogICAgJQogICAgLQoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5nZXRMYXRlc3RXaW5kb3dTdGFydEA3ODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNjAKICAgIC8vIGlmIChjdXJyZW50V2luZG93U3RhcnQgPiBsYXN0KSB7CiAgICBmcmFtZV9kaWcgMTkKICAgID4KICAgIGJ6IHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9lbHNlX2JvZHlANjUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNjEKICAgIC8vIGFzc2VydChhbW91bnQgPj0gZnVuZFJlcXVlc3QuYW1vdW50LCBFUlJfQUxMT1dBTkNFX0VYQ0VFREVEKTsKICAgIGZyYW1lX2RpZyAwCiAgICBkdXAKICAgIGV4dHJhY3QgOCA4CiAgICBzd2FwCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIGZyYW1lX2RpZyAxMQogICAgPD0KICAgIGFzc2VydCAvLyBhbGxvd2FuY2UgZXhjZWVkZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNjIKICAgIC8vIHRoaXMuYWxsb3dhbmNlcyhrZXkpLnZhbHVlLnNwZW50ID0gZnVuZFJlcXVlc3QuYW1vdW50CiAgICBmcmFtZV9kaWcgMwogICAgcHVzaGludCAxNyAvLyAxNwogICAgdW5jb3ZlciAyCiAgICBib3hfcmVwbGFjZQogICAgYiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYWZ0ZXJfaWZfZWxzZUA3MQoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2Vsc2VfYm9keUA2NToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNjUKICAgIC8vIGNvbnN0IGxlZnRvdmVyOiB1aW50NjQgPSBhbW91bnQgLSBzcGVudDsKICAgIGZyYW1lX2RpZyAxMQogICAgZnJhbWVfZGlnIDI2CiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzY2CiAgICAvLyBhc3NlcnQobGVmdG92ZXIgPj0gZnVuZFJlcXVlc3QuYW1vdW50LCBFUlJfQUxMT1dBTkNFX0VYQ0VFREVEKTsKICAgIGZyYW1lX2RpZyAwCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIHN3YXAKICAgIGRpZyAxCiAgICA+PQogICAgYXNzZXJ0IC8vIGFsbG93YW5jZSBleGNlZWRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM2NwogICAgLy8gdGhpcy5hbGxvd2FuY2VzKGtleSkudmFsdWUuc3BlbnQgKz0gZnVuZFJlcXVlc3QuYW1vdW50CiAgICBmcmFtZV9kaWcgMwogICAgZHVwCiAgICBjb3ZlciAyCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgcHVzaGludCAxNyAvLyAxNwogICAgZXh0cmFjdF91aW50NjQKICAgICsKICAgIGl0b2IKICAgIHB1c2hpbnQgMTcgLy8gMTcKICAgIHN3YXAKICAgIGJveF9yZXBsYWNlCiAgICBiIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pZl9lbHNlQDcxCgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYWZ0ZXJfaWZfZWxzZUA3NzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozODgKICAgIC8vIHJldHVybiBHbG9iYWwubGF0ZXN0VGltZXN0YW1wIC0gKChHbG9iYWwubGF0ZXN0VGltZXN0YW1wIC0gc3RhcnQpICUgaW50ZXJ2YWwpCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBkdXAKICAgIGZyYW1lX2RpZyAyNwogICAgLQogICAgZnJhbWVfZGlnIDE3CiAgICAlCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzU4CiAgICAvLyBjb25zdCBjdXJyZW50V2luZG93U3RhcnQgPSB0aGlzLmdldExhdGVzdFdpbmRvd1N0YXJ0KHVzZVJvdW5kcywgc3RhcnQsIGludGVydmFsKQogICAgYiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmdldExhdGVzdFdpbmRvd1N0YXJ0QDc4CgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fZWxzZV9ib2R5QDY2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM2OQogICAgLy8gfSBlbHNlIGlmICh0eXBlID09PSBTcGVuZEFsbG93YW5jZVR5cGVEcmlwKSB7CiAgICBmcmFtZV9kaWcgMTAKICAgIHB1c2hieXRlcyAweDAzCiAgICA9PQogICAgYnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VANzEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNzAKICAgIC8vIGNvbnN0IGVwb2NoUmVmID0gdXNlUm91bmRzID8gR2xvYmFsLnJvdW5kIDogR2xvYmFsLmxhdGVzdFRpbWVzdGFtcDsKICAgIGZyYW1lX2RpZyAyOAogICAgYnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX3Rlcm5hcnlfZmFsc2VANjkKICAgIGdsb2JhbCBSb3VuZAogICAgZnJhbWVfYnVyeSAxNAoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX3Rlcm5hcnlfbWVyZ2VANzA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzcxCiAgICAvLyBjb25zdCBwYXNzZWQ6IHVpbnQ2NCA9IGVwb2NoUmVmIC0gbGFzdAogICAgZnJhbWVfZGlnIDE0CiAgICBmcmFtZV9kaWcgMTkKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNzUKICAgIC8vIGNvbnN0IGFjY3J1ZWQ6IHVpbnQ2NCA9IHNwZW50ICsgKChwYXNzZWQgLyBpbnRlcnZhbCkgKiBhbW91bnQpCiAgICBmcmFtZV9kaWcgMTcKICAgIC8KICAgIGZyYW1lX2RpZyAxMQogICAgKgogICAgZnJhbWVfZGlnIDI2CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Mzc2CiAgICAvLyBjb25zdCBhdmFpbGFibGU6IHVpbnQ2NCA9IGFjY3J1ZWQgPiBtYXggPyBtYXggOiBhY2NydWVkCiAgICBkdXAKICAgIGZyYW1lX2RpZyAyMQogICAgZHVwCiAgICBjb3ZlciAzCiAgICA+CiAgICBzd2FwCiAgICBjb3ZlciAyCiAgICBzZWxlY3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNzgKICAgIC8vIGFzc2VydChhdmFpbGFibGUgPj0gZnVuZFJlcXVlc3QuYW1vdW50LCBFUlJfQUxMT1dBTkNFX0VYQ0VFREVEKTsKICAgIGZyYW1lX2RpZyAwCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIGR1cDIKICAgID49CiAgICBhc3NlcnQgLy8gYWxsb3dhbmNlIGV4Y2VlZGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Mzc5CiAgICAvLyB0aGlzLmFsbG93YW5jZXMoa2V5KS52YWx1ZS5zcGVudCA9IChhdmFpbGFibGUgLSBmdW5kUmVxdWVzdC5hbW91bnQpCiAgICAtCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgMwogICAgcHVzaGludCAxNyAvLyAxNwogICAgdW5jb3ZlciAyCiAgICBib3hfcmVwbGFjZQogICAgYiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYWZ0ZXJfaWZfZWxzZUA3MQoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX3Rlcm5hcnlfZmFsc2VANjk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzcwCiAgICAvLyBjb25zdCBlcG9jaFJlZiA9IHVzZVJvdW5kcyA/IEdsb2JhbC5yb3VuZCA6IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXA7CiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBmcmFtZV9idXJ5IDE0CiAgICBiIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl90ZXJuYXJ5X21lcmdlQDcwCgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fdGVybmFyeV9mYWxzZUA1OToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNTEKICAgIC8vIGNvbnN0IG5ld0xhc3QgPSB1c2VSb3VuZHMgPyBHbG9iYWwucm91bmQgOiBHbG9iYWwubGF0ZXN0VGltZXN0YW1wOwogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgZnJhbWVfYnVyeSAyNAogICAgYiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fdGVybmFyeV9tZXJnZUA2MAoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMDQKICAgIC8vIGNvbnN0IHsgdXNlUm91bmRzLCB1c2VFeGVjdXRpb25LZXkgfSA9IHRoaXMucGx1Z2lucyhrZXkpLnZhbHVlCiAgICBmcmFtZV9kaWcgMgogICAgcHVzaGludCAyNyAvLyAyNwogICAgaW50Y18xIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICBkdXAKICAgIGludGNfMSAvLyAxCiAgICBnZXRiaXQKICAgIGZyYW1lX2J1cnkgMjgKICAgIGludGNfMiAvLyAyCiAgICBnZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMDYKICAgIC8vIGlmICh1c2VFeGVjdXRpb25LZXkgJiYgIShUeG4uc2VuZGVyID09PSB0aGlzLmFkbWluLnZhbHVlKSkgewogICAgYnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VAMjIKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIGFkbWluID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0FkbWluIH0pCiAgICBieXRlY18yIC8vICJhZG1pbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMDYKICAgIC8vIGlmICh1c2VFeGVjdXRpb25LZXkgJiYgIShUeG4uc2VuZGVyID09PSB0aGlzLmFkbWluLnZhbHVlKSkgewogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBibnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VAMjIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0MQogICAgLy8gZXhlY3V0aW9ucyA9IEJveE1hcDxieXRlczwzMj4sIEV4ZWN1dGlvbkluZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhFeGVjdXRpb25zIH0pCiAgICBieXRlYyA4IC8vICJ4IgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIwNwogICAgLy8gYXNzZXJ0KHRoaXMuZXhlY3V0aW9ucyhUeG4ubGVhc2UpLmV4aXN0cywgRVJSX0VYRUNVVElPTl9LRVlfTk9UX0ZPVU5EKTsKICAgIHR4biBMZWFzZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBleGVjdXRpb25zID0gQm94TWFwPGJ5dGVzPDMyPiwgRXhlY3V0aW9uSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeEV4ZWN1dGlvbnMgfSkKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIwNwogICAgLy8gYXNzZXJ0KHRoaXMuZXhlY3V0aW9ucyhUeG4ubGVhc2UpLmV4aXN0cywgRVJSX0VYRUNVVElPTl9LRVlfTk9UX0ZPVU5EKTsKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEV4ZWN1dGlvbiBrZXkgbm90IGZvdW5kCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIGV4ZWN1dGlvbnMgPSBCb3hNYXA8Ynl0ZXM8MzI+LCBFeGVjdXRpb25JbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4RXhlY3V0aW9ucyB9KQogICAgYnl0ZWMgOCAvLyAieCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMDgKICAgIC8vIGFzc2VydCh0aGlzLmV4ZWN1dGlvbnMoVHhuLmxlYXNlKS52YWx1ZS5maXJzdFZhbGlkIDw9IEdsb2JhbC5yb3VuZCwgRVJSX0VYRUNVVElPTl9OT1RfUkVBRFkpOwogICAgdHhuIExlYXNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIGV4ZWN1dGlvbnMgPSBCb3hNYXA8Ynl0ZXM8MzI+LCBFeGVjdXRpb25JbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4RXhlY3V0aW9ucyB9KQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjA4CiAgICAvLyBhc3NlcnQodGhpcy5leGVjdXRpb25zKFR4bi5sZWFzZSkudmFsdWUuZmlyc3RWYWxpZCA8PSBHbG9iYWwucm91bmQsIEVSUl9FWEVDVVRJT05fTk9UX1JFQURZKTsKICAgIGludGNfMiAvLyAyCiAgICBpbnRjXzMgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGdsb2JhbCBSb3VuZAogICAgPD0KICAgIGFzc2VydCAvLyBFeGVjdXRpb24ga2V5IG5vdCByZWFkeQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBleGVjdXRpb25zID0gQm94TWFwPGJ5dGVzPDMyPiwgRXhlY3V0aW9uSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeEV4ZWN1dGlvbnMgfSkKICAgIGJ5dGVjIDggLy8gIngiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjA5CiAgICAvLyBhc3NlcnQodGhpcy5leGVjdXRpb25zKFR4bi5sZWFzZSkudmFsdWUubGFzdFZhbGlkID49IEdsb2JhbC5yb3VuZCwgRVJSX0VYRUNVVElPTl9FWFBJUkVEKTsKICAgIHR4biBMZWFzZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBleGVjdXRpb25zID0gQm94TWFwPGJ5dGVzPDMyPiwgRXhlY3V0aW9uSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeEV4ZWN1dGlvbnMgfSkKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIwOQogICAgLy8gYXNzZXJ0KHRoaXMuZXhlY3V0aW9ucyhUeG4ubGVhc2UpLnZhbHVlLmxhc3RWYWxpZCA+PSBHbG9iYWwucm91bmQsIEVSUl9FWEVDVVRJT05fRVhQSVJFRCk7CiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICBpbnRjXzMgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGdsb2JhbCBSb3VuZAogICAgPj0KICAgIGFzc2VydCAvLyBFeGVjdXRpb24ga2V5IGV4cGlyZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0MQogICAgLy8gZXhlY3V0aW9ucyA9IEJveE1hcDxieXRlczwzMj4sIEV4ZWN1dGlvbkluZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhFeGVjdXRpb25zIH0pCiAgICBieXRlYyA4IC8vICJ4IgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIxMQogICAgLy8gY29uc3QgZ3JvdXBzID0gdGhpcy5leGVjdXRpb25zKFR4bi5sZWFzZSkudmFsdWUuZ3JvdXBzIGFzIFJlYWRvbmx5PGJ5dGVzPDMyPltdPjsKICAgIHR4biBMZWFzZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBleGVjdXRpb25zID0gQm94TWFwPGJ5dGVzPDMyPiwgRXhlY3V0aW9uSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeEV4ZWN1dGlvbnMgfSkKICAgIGNvbmNhdAogICAgZnJhbWVfYnVyeSA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjEzCiAgICAvLyBsZXQgZm91bmRHcm91cCA9IGZhbHNlOwogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgMTUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMTQKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBncm91cHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDE2CgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fd2hpbGVfdG9wQDE3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIxNAogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGdyb3Vwcy5sZW5ndGg7IGkgKz0gMSkgewogICAgZnJhbWVfZGlnIDQKICAgIHB1c2hpbnQgMTggLy8gMTgKICAgIGludGNfMiAvLyAyCiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgZnJhbWVfZGlnIDE2CiAgICA+CiAgICBieiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYWZ0ZXJfd2hpbGVAMjEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMTUKICAgIC8vIGlmIChncm91cHNbaV0gPT09IEdsb2JhbC5ncm91cElkKSB7CiAgICBmcmFtZV9kaWcgMTYKICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgICoKICAgIHB1c2hpbnQgMjAgLy8gMjAKICAgICsKICAgIGZyYW1lX2RpZyA0CiAgICBzd2FwCiAgICBwdXNoaW50IDMyIC8vIDMyCiAgICBib3hfZXh0cmFjdAogICAgZ2xvYmFsIEdyb3VwSUQKICAgID09CiAgICBieiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYWZ0ZXJfaWZfZWxzZUAyMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIxNgogICAgLy8gZm91bmRHcm91cCA9IHRydWU7CiAgICBpbnRjXzEgLy8gMQogICAgZnJhbWVfYnVyeSAxNQoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VAMjA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjE0CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSArPSAxKSB7CiAgICBmcmFtZV9kaWcgMTYKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDE2CiAgICBiIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl93aGlsZV90b3BAMTcKCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl93aGlsZUAyMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMjAKICAgIC8vIGFzc2VydChmb3VuZEdyb3VwLCBFUlJfR1JPVVBfTk9UX0ZPVU5EKTsKICAgIGZyYW1lX2RpZyAxNQogICAgYXNzZXJ0IC8vIEdyb3VwIG5vdCBmb3VuZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBleGVjdXRpb25zID0gQm94TWFwPGJ5dGVzPDMyPiwgRXhlY3V0aW9uSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeEV4ZWN1dGlvbnMgfSkKICAgIGJ5dGVjIDggLy8gIngiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjIxCiAgICAvLyB0aGlzLmV4ZWN1dGlvbnMoVHhuLmxlYXNlKS5kZWxldGUoKTsKICAgIHR4biBMZWFzZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBleGVjdXRpb25zID0gQm94TWFwPGJ5dGVzPDMyPiwgRXhlY3V0aW9uSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeEV4ZWN1dGlvbnMgfSkKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIyMQogICAgLy8gdGhpcy5leGVjdXRpb25zKFR4bi5sZWFzZSkuZGVsZXRlKCk7CiAgICBib3hfZGVsCiAgICBwb3AKCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pZl9lbHNlQDIyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIyNAogICAgLy8gY29uc3QgaW5pdGlhbENoZWNrID0gdGhpcy5wbHVnaW5DaGVjayhrZXkpOwogICAgZnJhbWVfZGlnIDYKICAgIGNhbGxzdWIgcGx1Z2luQ2hlY2sKICAgIGZyYW1lX2J1cnkgNgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIyNgogICAgLy8gYXNzZXJ0KGluaXRpYWxDaGVjay5leGlzdHMsIEVSUl9QTFVHSU5fRE9FU19OT1RfRVhJU1QpOwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBhc3NlcnQgLy8gcGx1Z2luIGRvZXMgbm90IGV4aXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjI3CiAgICAvLyBhc3NlcnQoIWluaXRpYWxDaGVjay5leHBpcmVkLCBFUlJfUExVR0lOX0VYUElSRUQpOwogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgZ2V0Yml0CiAgICAhCiAgICBhc3NlcnQgLy8gcGx1Z2luIGV4cGlyZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMjgKICAgIC8vIGFzc2VydCghaW5pdGlhbENoZWNrLm9uQ29vbGRvd24sIEVSUl9QTFVHSU5fT05fQ09PTERPV04pOwogICAgaW50Y18yIC8vIDIKICAgIGdldGJpdAogICAgIQogICAgYXNzZXJ0IC8vIHBsdWdpbiBvbiBjb29sZG93bgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIzMC0yMzIKICAgIC8vIGNvbnN0IGVwb2NoUmVmID0gdXNlUm91bmRzCiAgICAvLyAgID8gR2xvYmFsLnJvdW5kCiAgICAvLyAgIDogR2xvYmFsLmxhdGVzdFRpbWVzdGFtcDsKICAgIGZyYW1lX2RpZyAyOAogICAgYnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX3Rlcm5hcnlfZmFsc2VAMjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMzEKICAgIC8vID8gR2xvYmFsLnJvdW5kCiAgICBnbG9iYWwgUm91bmQKICAgIGZyYW1lX2J1cnkgMTQKCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl90ZXJuYXJ5X21lcmdlQDI1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIzNAogICAgLy8gbGV0IHJla2V5c0JhY2sgPSBmYWxzZTsKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDI1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjM1CiAgICAvLyBsZXQgbWV0aG9kSW5kZXg6IHVpbnQ2NCA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSAyMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIzNwogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gKFR4bi5ncm91cEluZGV4ICsgMSk7IGkgPCBHbG9iYWwuZ3JvdXBTaXplOyBpICs9IDEpIHsKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAxOAogICAgZnJhbWVfZGlnIDYKICAgIGZyYW1lX2J1cnkgNwoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX3doaWxlX3RvcEAyNjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMzcKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IChUeG4uZ3JvdXBJbmRleCArIDEpOyBpIDwgR2xvYmFsLmdyb3VwU2l6ZTsgaSArPSAxKSB7CiAgICBmcmFtZV9kaWcgMTgKICAgIGdsb2JhbCBHcm91cFNpemUKICAgIDwKICAgIGJ6IHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9ibG9ja0A1MwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI0MAogICAgLy8gaWYgKHRoaXMudHhuUmVrZXlzQmFjayh0eG4pKSB7CiAgICBmcmFtZV9kaWcgMTgKICAgIGNhbGxzdWIgdHhuUmVrZXlzQmFjawogICAgYnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VAMjkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNDEKICAgIC8vIHJla2V5c0JhY2sgPSB0cnVlOwogICAgaW50Y18xIC8vIDEKICAgIGZyYW1lX2J1cnkgMjUKCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9ibG9ja0A1MzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNzEKICAgIC8vIGFzc2VydChyZWtleXNCYWNrLCBFUlJfTUlTU0lOR19SRUtFWV9CQUNLKTsKICAgIGZyYW1lX2RpZyAyNQogICAgYXNzZXJ0IC8vIG1pc3NpbmcgcmVrZXkgYmFjawogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU5My02MDAKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlcjogdGhpcy5zcGVuZGluZ0FkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgcmVjZWl2ZXI6IHRoaXMuc3BlbmRpbmdBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIHJla2V5VG86IHBsdWdpbkFwcC5hZGRyZXNzLAogICAgLy8gICAgIG5vdGU6ICdyZWtleWluZyB0byBwbHVnaW4gYXBwJwogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTk1CiAgICAvLyBzZW5kZXI6IHRoaXMuc3BlbmRpbmdBZGRyZXNzLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNgogICAgLy8gc3BlbmRpbmdBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c1NwZW5kaW5nQWRkcmVzcyB9KQogICAgYnl0ZWMgMTEgLy8gInNwZW5kaW5nX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTk1CiAgICAvLyBzZW5kZXI6IHRoaXMuc3BlbmRpbmdBZGRyZXNzLnZhbHVlLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1OTcKICAgIC8vIHJla2V5VG86IHBsdWdpbkFwcC5hZGRyZXNzLAogICAgZnJhbWVfZGlnIC01CiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTk4CiAgICAvLyBub3RlOiAncmVrZXlpbmcgdG8gcGx1Z2luIGFwcCcKICAgIHB1c2hieXRlcyAicmVrZXlpbmcgdG8gcGx1Z2luIGFwcCIKICAgIGl0eG5fZmllbGQgTm90ZQogICAgaXR4bl9maWVsZCBSZWtleVRvCiAgICBkdXAKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTkzLTU5OQogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyOiB0aGlzLnNwZW5kaW5nQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcjogdGhpcy5zcGVuZGluZ0FkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgcmVrZXlUbzogcGx1Z2luQXBwLmFkZHJlc3MsCiAgICAvLyAgICAgbm90ZTogJ3Jla2V5aW5nIHRvIHBsdWdpbiBhcHAnCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTkzLTYwMAogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyOiB0aGlzLnNwZW5kaW5nQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcjogdGhpcy5zcGVuZGluZ0FkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgcmVrZXlUbzogcGx1Z2luQXBwLmFkZHJlc3MsCiAgICAvLyAgICAgbm90ZTogJ3Jla2V5aW5nIHRvIHBsdWdpbiBhcHAnCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzAKICAgIC8vIHJla2V5SW5kZXggPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwLCBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c1Jla2V5SW5kZXggfSkKICAgIGJ5dGVjIDE3IC8vICJyZWtleV9pbmRleCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2MDMKICAgIC8vIHRoaXMucmVrZXlJbmRleC52YWx1ZSA9IFR4bi5ncm91cEluZGV4CiAgICB0eG4gR3JvdXBJbmRleAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozMwogICAgLy8gcGx1Z2lucyA9IEJveE1hcDxQbHVnaW5LZXksIFBsdWdpbkluZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhQbHVnaW5zIH0pOwogICAgYnl0ZWMgNCAvLyAicCIKICAgIGZyYW1lX2RpZyA3CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2MDUKICAgIC8vIGlmICh0aGlzLnBsdWdpbnMoa2V5KS52YWx1ZS5kZWxlZ2F0aW9uVHlwZSA9PT0gRGVsZWdhdGlvblR5cGVTZWxmKSB7CiAgICBpbnRjXzMgLy8gOAogICAgaW50Y18xIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICBieXRlYyAxNSAvLyAweDAxCiAgICA9PQogICAgYnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VAMTMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gbGFzdFVzZXJJbnRlcmFjdGlvbiA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0xhc3RVc2VySW50ZXJhY3Rpb24gfSkKICAgIGJ5dGVjXzMgLy8gImxhc3RfdXNlcl9pbnRlcmFjdGlvbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NAogICAgLy8gdGhpcy5sYXN0VXNlckludGVyYWN0aW9uLnZhbHVlID0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgYXBwX2dsb2JhbF9wdXQKCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pZl9lbHNlQDEzOgogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2J1cnkgMQogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pZl9lbHNlQDI5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI0NQogICAgLy8gaWYgKHR4bi50eXBlICE9PSBUcmFuc2FjdGlvblR5cGUuQXBwbGljYXRpb25DYWxsKSB7CiAgICBmcmFtZV9kaWcgMTgKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBwdXNoaW50IDYgLy8gNgogICAgIT0KICAgIGJ6IHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pZl9lbHNlQDMxCiAgICBmcmFtZV9kaWcgNwoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2Jsb2NrQDUxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIzNwogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gKFR4bi5ncm91cEluZGV4ICsgMSk7IGkgPCBHbG9iYWwuZ3JvdXBTaXplOyBpICs9IDEpIHsKICAgIGZyYW1lX2RpZyAxOAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMTgKICAgIGZyYW1lX2J1cnkgNwogICAgYiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fd2hpbGVfdG9wQDI2CgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYWZ0ZXJfaWZfZWxzZUAzMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNDkKICAgIC8vIGFzc2VydCh0eG4uYXBwSWQuaWQgPT09IGtleS5wbHVnaW4sIEVSUl9DQU5OT1RfQ0FMTF9PVEhFUl9BUFBTX0RVUklOR19SRUtFWSk7CiAgICBmcmFtZV9kaWcgMTgKICAgIGR1cAogICAgZ3R4bnMgQXBwbGljYXRpb25JRAogICAgZnJhbWVfZGlnIDYKICAgIGR1cAogICAgY292ZXIgMwogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbm5vdCBjYWxsIG90aGVyIGFwcHMgZHVyaW5nIHJla2V5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjUwCiAgICAvLyBhc3NlcnQodHhuLm9uQ29tcGxldGlvbiA9PT0gT25Db21wbGV0ZUFjdGlvbi5Ob09wLCBFUlJfSU5WQUxJRF9PTkNPTVBMRVRFKTsKICAgIGR1cAogICAgZ3R4bnMgT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gaW52YWxpZCBvbmNvbXBsZXRlIG11c3QgYmUgbm8gb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNTMKICAgIC8vIGFzc2VydCh0eG4ubnVtQXBwQXJncyA+IDEsIEVSUl9JTlZBTElEX1NFTkRFUl9BUkcpOwogICAgZHVwCiAgICBndHhucyBOdW1BcHBBcmdzCiAgICBpbnRjXzEgLy8gMQogICAgPgogICAgYXNzZXJ0IC8vIGludmFsaWQgc2VuZGVyIG11c3QgYmUgdGhpcyBhcHAgaWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNTQKICAgIC8vIGFzc2VydChBcHBsaWNhdGlvbihidG9pKHR4bi5hcHBBcmdzKDEpKSkgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25JZCwgRVJSX0lOVkFMSURfU0VOREVSX1ZBTFVFKTsKICAgIGludGNfMSAvLyAxCiAgICBndHhuc2FzIEFwcGxpY2F0aW9uQXJncwogICAgYnRvaQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbklECiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgc2VuZGVyIGFwcCBpZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI1NgogICAgLy8gY29uc3QgeyBleHBpcmVkLCBvbkNvb2xkb3duLCBoYXNNZXRob2RSZXN0cmljdGlvbnMgfSA9IHRoaXMucGx1Z2luQ2hlY2soa2V5KTsKICAgIGNhbGxzdWIgcGx1Z2luQ2hlY2sKICAgIGZyYW1lX2J1cnkgNgogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgZ2V0Yml0CiAgICBkaWcgMQogICAgaW50Y18yIC8vIDIKICAgIGdldGJpdAogICAgdW5jb3ZlciAyCiAgICBwdXNoaW50IDMgLy8gMwogICAgZ2V0Yml0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjU4CiAgICAvLyBhc3NlcnQoIWV4cGlyZWQsIEVSUl9QTFVHSU5fRVhQSVJFRCk7CiAgICB1bmNvdmVyIDIKICAgICEKICAgIGFzc2VydCAvLyBwbHVnaW4gZXhwaXJlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI1OQogICAgLy8gYXNzZXJ0KCFvbkNvb2xkb3duLCBFUlJfUExVR0lOX09OX0NPT0xET1dOKTsKICAgIHN3YXAKICAgICEKICAgIGFzc2VydCAvLyBwbHVnaW4gb24gY29vbGRvd24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNjEKICAgIC8vIGlmIChoYXNNZXRob2RSZXN0cmljdGlvbnMpIHsKICAgIGJ6IHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pZl9lbHNlQDUwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjYyCiAgICAvLyBhc3NlcnQobWV0aG9kSW5kZXggPCBtZXRob2RPZmZzZXRzLmxlbmd0aCwgRVJSX01BTEZPUk1FRF9PRkZTRVRTKTsKICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBmcmFtZV9kaWcgMjIKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICA8CiAgICBhc3NlcnQgLy8gbWFsZm9ybWVkIG1ldGhvZCBvZmZzZXRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjYzCiAgICAvLyBjb25zdCB7IG1ldGhvZEFsbG93ZWQsIG1ldGhvZE9uQ29vbGRvd24gfSA9IHRoaXMubWV0aG9kQ2hlY2soa2V5LCB0eG4sIG1ldGhvZE9mZnNldHNbbWV0aG9kSW5kZXhdKTsKICAgIGZyYW1lX2RpZyAtMgogICAgZXh0cmFjdCAyIDAKICAgIHN3YXAKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI4NAogICAgLy8gYXNzZXJ0KGxlbih0eG4uYXBwQXJncygwKSkgPT09IDQsIEVSUl9JTlZBTElEX01FVEhPRF9TSUdOQVRVUkVfTEVOR1RIKQogICAgZnJhbWVfZGlnIDE4CiAgICBpbnRjXzAgLy8gMAogICAgZ3R4bnNhcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGR1cAogICAgZnJhbWVfYnVyeSA5CiAgICBsZW4KICAgIHB1c2hpbnQgNCAvLyA0CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbWV0aG9kIHNpZ25hdHVyZSBsZW5ndGgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozMwogICAgLy8gcGx1Z2lucyA9IEJveE1hcDxQbHVnaW5LZXksIFBsdWdpbkluZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhQbHVnaW5zIH0pOwogICAgYnl0ZWMgNCAvLyAicCIKICAgIGZyYW1lX2RpZyA2CiAgICBjb25jYXQKICAgIGR1cAogICAgZnJhbWVfYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Mjg3CiAgICAvLyBjb25zdCB7IHVzZVJvdW5kcyB9ID0gdGhpcy5wbHVnaW5zKGtleSkudmFsdWUKICAgIGR1cAogICAgcHVzaGludCAyNyAvLyAyNwogICAgaW50Y18xIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICBpbnRjXzEgLy8gMQogICAgZ2V0Yml0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGZyYW1lX2J1cnkgMjgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyODgKICAgIC8vIGNvbnN0IHsgc2VsZWN0b3IsIGNvb2xkb3duLCBsYXN0Q2FsbGVkIH0gPSB0aGlzLnBsdWdpbnMoa2V5KS52YWx1ZS5tZXRob2RzW29mZnNldF0KICAgIHVuY292ZXIgMgogICAgcHVzaGludCAyMCAvLyAyMAogICAgKgogICAgZHVwCiAgICBmcmFtZV9idXJ5IDEyCiAgICBwdXNoaW50IDQ2IC8vIDQ2CiAgICArCiAgICBwdXNoaW50IDIwIC8vIDIwCiAgICBib3hfZXh0cmFjdAogICAgZHVwCiAgICBleHRyYWN0IDAgNAogICAgZnJhbWVfYnVyeSA4CiAgICBkdXAKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBleHRyYWN0X3VpbnQ2NAogICAgZnJhbWVfYnVyeSAxMwogICAgcHVzaGludCAxMiAvLyAxMgogICAgZXh0cmFjdF91aW50NjQKICAgIGZyYW1lX2J1cnkgMjAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyOTIKICAgIC8vIGNvbnN0IGVwb2NoUmVmID0gdXNlUm91bmRzID8gR2xvYmFsLnJvdW5kIDogR2xvYmFsLmxhdGVzdFRpbWVzdGFtcAogICAgYnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX3Rlcm5hcnlfZmFsc2VAMzQKICAgIGdsb2JhbCBSb3VuZAoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX3Rlcm5hcnlfbWVyZ2VAMzU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjkzCiAgICAvLyBjb25zdCBtZXRob2RPbkNvb2xkb3duID0gKGVwb2NoUmVmIC0gbGFzdENhbGxlZCkgPCBjb29sZG93bgogICAgZnJhbWVfZGlnIDIwCiAgICAtCiAgICBmcmFtZV9kaWcgMTMKICAgIDwKICAgIGZyYW1lX2J1cnkgMjMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyOTUKICAgIC8vIGlmIChzZWxlY3RvciA9PT0gc2VsZWN0b3JBcmcgJiYgKCFoYXNDb29sZG93biB8fCAhbWV0aG9kT25Db29sZG93bikpIHsKICAgIGZyYW1lX2RpZyA4CiAgICBmcmFtZV9kaWcgOQogICAgPT0KICAgIGJ6IHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pZl9lbHNlQDQ0CiAgICBmcmFtZV9kaWcgMTMKICAgIGJ6IHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9pZl9ib2R5QDM4CiAgICBmcmFtZV9kaWcgMjMKICAgIGJueiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYWZ0ZXJfaWZfZWxzZUA0NAoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2lmX2JvZHlAMzg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Mjk3CiAgICAvLyBpZiAoaGFzQ29vbGRvd24pIHsKICAgIGZyYW1lX2RpZyAxMwogICAgYnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VANDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyOTgKICAgIC8vIGNvbnN0IGxhc3RDYWxsZWQgPSB1c2VSb3VuZHMgPyBHbG9iYWwucm91bmQgOiBHbG9iYWwubGF0ZXN0VGltZXN0YW1wOwogICAgZnJhbWVfZGlnIDI4CiAgICBieiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fdGVybmFyeV9mYWxzZUA0MQogICAgZ2xvYmFsIFJvdW5kCgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fdGVybmFyeV9tZXJnZUA0MjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyOTkKICAgIC8vIHRoaXMucGx1Z2lucyhrZXkpLnZhbHVlLm1ldGhvZHNbb2Zmc2V0XS5sYXN0Q2FsbGVkID0gbGFzdENhbGxlZAogICAgaXRvYgogICAgZnJhbWVfZGlnIDEyCiAgICBwdXNoaW50IDU4IC8vIDU4CiAgICArCiAgICBmcmFtZV9kaWcgMgogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBib3hfcmVwbGFjZQoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VANDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzAyLTMwNQogICAgLy8gcmV0dXJuIHsKICAgIC8vICAgbWV0aG9kQWxsb3dlZDogdHJ1ZSwKICAgIC8vICAgbWV0aG9kT25Db29sZG93bgogICAgLy8gfQogICAgcHVzaGJ5dGVzIDB4ODAKICAgIGludGNfMSAvLyAxCiAgICBmcmFtZV9kaWcgMjMKICAgIHNldGJpdAoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5tZXRob2RDaGVja0A0NToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNjMKICAgIC8vIGNvbnN0IHsgbWV0aG9kQWxsb3dlZCwgbWV0aG9kT25Db29sZG93biB9ID0gdGhpcy5tZXRob2RDaGVjayhrZXksIHR4biwgbWV0aG9kT2Zmc2V0c1ttZXRob2RJbmRleF0pOwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBzd2FwCiAgICBpbnRjXzEgLy8gMQogICAgZ2V0Yml0CiAgICBmcmFtZV9idXJ5IDIzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjY0CiAgICAvLyBhc3NlcnQobWV0aG9kQWxsb3dlZCAmJiAhbWV0aG9kT25Db29sZG93biwgRVJSX01FVEhPRF9PTl9DT09MRE9XTik7CiAgICBieiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYm9vbF9mYWxzZUA0OAogICAgZnJhbWVfZGlnIDIzCiAgICBibnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2Jvb2xfZmFsc2VANDgKICAgIGludGNfMSAvLyAxCgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYm9vbF9tZXJnZUA0OToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNjQKICAgIC8vIGFzc2VydChtZXRob2RBbGxvd2VkICYmICFtZXRob2RPbkNvb2xkb3duLCBFUlJfTUVUSE9EX09OX0NPT0xET1dOKTsKICAgIGFzc2VydCAvLyBtZXRob2Qgb24gY29vbGRvd24KCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pZl9lbHNlQDUwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBwbHVnaW5zID0gQm94TWFwPFBsdWdpbktleSwgUGx1Z2luSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeFBsdWdpbnMgfSk7CiAgICBieXRlYyA0IC8vICJwIgogICAgZnJhbWVfZGlnIDYKICAgIGR1cAogICAgY292ZXIgMgogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjY3CiAgICAvLyB0aGlzLnBsdWdpbnMoa2V5KS52YWx1ZS5sYXN0Q2FsbGVkID0gZXBvY2hSZWYKICAgIGZyYW1lX2RpZyAxNAogICAgaXRvYgogICAgcHVzaGludCAyOCAvLyAyOAogICAgc3dhcAogICAgYm94X3JlcGxhY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNjgKICAgIC8vIG1ldGhvZEluZGV4ICs9IDE7CiAgICBmcmFtZV9kaWcgMjIKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDIyCiAgICBiIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9ibG9ja0A1MQoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2Jvb2xfZmFsc2VANDg6CiAgICBpbnRjXzAgLy8gMAogICAgYiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYm9vbF9tZXJnZUA0OQoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX3Rlcm5hcnlfZmFsc2VANDE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Mjk4CiAgICAvLyBjb25zdCBsYXN0Q2FsbGVkID0gdXNlUm91bmRzID8gR2xvYmFsLnJvdW5kIDogR2xvYmFsLmxhdGVzdFRpbWVzdGFtcDsKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGIgc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX3Rlcm5hcnlfbWVyZ2VANDIKCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pZl9lbHNlQDQ0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMwOC0zMTEKICAgIC8vIHJldHVybiB7CiAgICAvLyAgIG1ldGhvZEFsbG93ZWQ6IGZhbHNlLAogICAgLy8gICBtZXRob2RPbkNvb2xkb3duOiB0cnVlCiAgICAvLyB9CiAgICBwdXNoYnl0ZXMgMHg0MAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI2MwogICAgLy8gY29uc3QgeyBtZXRob2RBbGxvd2VkLCBtZXRob2RPbkNvb2xkb3duIH0gPSB0aGlzLm1ldGhvZENoZWNrKGtleSwgdHhuLCBtZXRob2RPZmZzZXRzW21ldGhvZEluZGV4XSk7CiAgICBiIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQubWV0aG9kQ2hlY2tANDUKCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl90ZXJuYXJ5X2ZhbHNlQDM0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI5MgogICAgLy8gY29uc3QgZXBvY2hSZWYgPSB1c2VSb3VuZHMgPyBHbG9iYWwucm91bmQgOiBHbG9iYWwubGF0ZXN0VGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBiIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl90ZXJuYXJ5X21lcmdlQDM1CgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fdGVybmFyeV9mYWxzZUAyNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMzIKICAgIC8vIDogR2xvYmFsLmxhdGVzdFRpbWVzdGFtcDsKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGZyYW1lX2J1cnkgMTQKICAgIGIgc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX3Rlcm5hcnlfbWVyZ2VAMjUKCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9lbHNlX2JvZHlANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1ODgKICAgIC8vIHRoaXMuc3BlbmRpbmdBZGRyZXNzLnZhbHVlID0gdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29udHJvbGxlZEFkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ29udHJvbGxlZEFkZHJlc3MgfSk7CiAgICBieXRlY18wIC8vICJjb250cm9sbGVkX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTg4CiAgICAvLyB0aGlzLnNwZW5kaW5nQWRkcmVzcy52YWx1ZSA9IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjYKICAgIC8vIHNwZW5kaW5nQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNTcGVuZGluZ0FkZHJlc3MgfSkKICAgIGJ5dGVjIDExIC8vICJzcGVuZGluZ19hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU4OAogICAgLy8gdGhpcy5zcGVuZGluZ0FkZHJlc3MudmFsdWUgPSB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgYiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYWZ0ZXJfaWZfZWxzZUA4CgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fdGVybmFyeV9mYWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU3NQogICAgLy8gY29uc3QgY2FsbGVyID0gZ2xvYmFsID8gR2xvYmFsLnplcm9BZGRyZXNzIDogVHhuLnNlbmRlcgogICAgdHhuIFNlbmRlcgogICAgYiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fdGVybmFyeV9tZXJnZUAzCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CyAHAAECCJADxKkBtNgBJhgSY29udHJvbGxlZF9hZGRyZXNzAAVhZG1pbhVsYXN0X3VzZXJfaW50ZXJhY3Rpb24BcAFlC2xhc3RfY2hhbmdlBBUffHUBeAEAAgAAEHNwZW5kaW5nX2FkZHJlc3MCACoCAAoBYQEBAW4LcmVrZXlfaW5kZXgOZXNjcm93X2ZhY3RvcnkOY3VycmVudF9wbHVnaW4CAAIwAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAAAAAAAAAAAAAAAABGzD9gYCACwxGEAABCcRImcxGRREMRhBAMuCBAS9YJnlBNJLdVYEFHts1gQTvETkJxaCFwTJWl09BEcnryEEWC/zggTe/VzSBLPIDfkE7vRI/QQ49ZHqBONQudQECoyywgQltxPKBOuvFKAEH9o7TwSdP4kYBL9NfFcE1d04KwRc6+1DBNWGha8EfDcVbgSv+qToBKJAPd8EAv5FFQRBvcaABFDz41w2GgCOHAD0AU0BbAHaAeUCKgKsAw0DVgOxBVsF3AfCCEEIcgi7CakKWgt0DH8NKg3aDhYOng8+D74QgxERAIAE4YNi4jYaAI4BAIEAigQBKUmL/iQLi/wkCyKLBIsDDEEAHIv9iwRJTgJZiwIIFlcGAosBTFCMASQIjARC/9yL/RWMACKMBIsEiwIMQQAci/+LBElOAlmLAAgWVwYCiwFMUIwBJAiMBEL/3Iv8i/4IFlcGAosBUIv9iwOLAFJQi/8Vi/+LAk8CUlCMAIk2GgFHAhWBIBJENhoCSU4CFYEgEkQ2GgNJFSUSRBdMMQASQAAIMQBLAhJBADQjREsBSUsESU4DE0QqTGcyAxJBABoyCihMZycSSwFnJwsyA2crMgdnJwYyB2cjQ0sCQv/jIkL/yTYaAUkiWSQISwEVEkRXAgBJIkwpE0EAECcFSwJQSb1FAUS+SCJbRQGxIicSZURJcghEgcResgiyByOyECKyAbZLARaABGB+cEayGrIashiBBrIQIrIBsyNDNhoBSRWBIBJEMQAiKmVEEkQqTGcrMgdnJwYyB2cjQzYaAUkVgSASRCInE2VESSJbSwGBKFlLAhVLA04CUlcCACkSRDEASwFyCEQSRCIoZURzAkRMcghEEkQnBExQSb1FAUEAJUmBGyO6IlNBABsjRCpLAmdJJSO6Jw8SQQAEKzIHZycGMgdnI0MiQv/iIiplRCcHTFCwI0MiJwtlRElzAkxOAkQiKGVEEkEALCIoZUQyChJBACIyA0sBEkQnCzIDZzIKIhZMUIAEACoAAFAnE0xnJxEiZyNDMgpC/9spSTYaAUkVgSASRDYaAkkVIxJEIlMxACIqZUQSRLEiKGVEgBtyZWtleWluZyBhYnN0cmFjdGVkIGFjY291bnSyBUsCsiBPArIHsgAjshAisgGzQQAeIkUBMRYjCEUCSwEyBAxBAAtLAYgQk0EACyNFAUlEKzIHZyNDSwEjCEUCQv/cNhoBSRUlEkQXNhoCSRUjEkQiUzYaA0lOAhWBIBJENhoESSJZJAhLARUSRFcCAEw2GgVJTgIVgQQSREEADEsDMgNLA0sDiA95SEsDSwNLA0sDiA9tJwkiTwJUJwdMULAjQzYaAUkVJRJEFzYaAkkVIxJEIlM2GgNJIlkkCEsBFRJEVwIANhoESSJZJQskCEsBFRJENhoFSSJZgRALJAhLARUSRIgQm0YCI0M2GgFJIlkkCEsBFRJEVwIANhoCSRUjEkQiUzYaA0kiWSQISwEVEkRXAgA2GgRJIlklCyQISwEVEkQ2GgVJIlmBEAskCEsBFRJEJxBPBVAiJboXTgSIEEBGAiNDIkcDKUk2GgFJFSUSRBc2GgJJFYEgEkQ2GgNJIlkkCEsBFRJEVwIANhoESRUjEkQiUzYaBUcCFSMSRDYaBkkVJRJEF0w2GgdJFSUSRBdMNhoISU4CSSJZSU4DgQwLJAhMFRJENhoJSRUjEkQiU0w2GgpJFSMSRCJTTDYaC0kVIxJEIlNMMQAiKmVEEkQnDxJBARRLCjIDEkEBDCMUREsBQQEASwoyAxNBAPgjFERJQADmSwlFEUsLFksLUEsRSRUWVwYCTFBMJwxQTFBFECIWRRInCkUPIkUNSwxLBAxBAD1LBFcCAEsNSU4CgQwLgQxYSVcABExXBAhLARWBBBJEUEsTUEsQSU8CUEwiWSMIFlcGAlwARRAjCEUNQv+7SwJBAG4yBkUOIihlRDIKE0EAHrEiKGVEMgpLECJZSxNMiAy0sgiyB7IAI7IQIrIBs0sJiAy3FksIUEsHFlBLBhZQJxdQJwkiSwtUI0sFVCRLBFRQSxJQSw4WUEsPUCcESxFQSbxITL8rMgdnJwYyB2cjQzIHRQ5C/49LCSkTRClFEUL/EyJC/wUiQv7xNhoBSRUlEkQXNhoCSRWBIBJENhoDSSJZJAhLARUSRFcCAElOAzEAIiplRBJETwIWTwJQSwEVFlcGAk8CUEwnDFBMUCcETFBJvUUBREmBLCS6F0y8SCIoZUQyChNBABexIihlREsCSwKIC+CyCLIHI7IQIrIBsysyB2cnBjIHZyNDIkcDKUk2GgFJIlkkCEsBFRJEVwIASTYaAkkVJRJEF0w2GgNJTgIVgSASRDYaBEkiWSQISwEVEkRXAgBMNhoFSRUjEkQiU0w2GgZJTgJJFSMSRDYaB0kVJRJEF04CNhoISRUlEkQXTgI2GglJTgNJIllJTgSBDAskCEwVEkQ2GgpJFSMSRCJTTgI2GgtJFSMSRCJTTgI2GgxJFSMSRCJTTgIxACIqZUQSRCcQTwJQSU4CvUUBFEQnDxJBASZLCzIDEkEBHiMUREsCQQESSwsyAxNBAQojFERLAUAA90sKRRNLDBZLDFBLE0kVFlcGAkxQTCcMUExQSUUTSwFJvEhMvyIWRRQnCkURIkUPSw5LBQxBAD1LBVcCAEsPSU4CgQwLgQxYSVcABExXBAhLARWBBBJEUEsVUEsSSU8CUEwiWSMIFlcGAlwARRIjCEUPQv+7IihlRDIKE0EAKLEiKGVEMgpLEiJZSxVMiApfSxAVIQQLIQUICLIIsgeyACOyECKyAbNLCogKWEUQSwNBAEAyBksQFksKUEsJFlBLCBZQJxdQJwkiSw1UI0sHVCRLBlRQSxVQTBZQSxFQJwRLE1BJvEhMvysyB2cnBjIHZyNDMgdC/71LCikTRClFE0L/AiJC/vMiQv7fNhoBSSJZJAhLARUSRFcCAEkxACIqZUQSRCcQTFBJvUUBREm+SElOAicETFBJvUUBREmBLCS6F04CTLxIvEgiKGVEMgoTQQAssSIoZURLAxUhBAshBQhLA0mBKFlLARVSVwIASwOICXwIsgiyByOyECKyAbMrMgdnJwYyB2cjQzYaAUkiWSQISwEVEkRXAgAxACIqZUQSRCcFSwFQvUUBFERJKRNEiAl9FicHTFCwI0M2GgFJIlkkCEsBFRJEVwIAMQAiKmVEEkQnBUxQSb1FAURJvkiBQFMUSwElI7oiTwJUSwElTwK7KzIHZycGMgdnvkgnB0xQsCNDIkkpRwQ2GgFJIlkkCEsBFRJEVwIANhoCSU4CSSJZSU4DgRELJAhMFRJEIkwiTDEAIiplRBJEJwVMUEm9RQFEvkgiW3IIRCJJSwUMQQCeSwVXAgBLAYERC4ERWEkiW0lFDEAARCIoZUxFD0RJJVtFCiJFDIGAAVNBAAkiKGVEI0UMRQOxSwpBAARLArIJSwiyCEsMsgdLAbIAI7IQIrIBs0kjCEUBQv+fIihlTEUOREklW0UJIkUIgYABU0EACSIoZUQjRQhFBLFLBkEABEsDshVLCbIRSweyEksLshRLAbIAgQSyECKyAbNC/7QjQzYaAUkiWSQISwEVEkRXAgBJNhoCSU4CSSJZSU4DSSULJAhPAhUSRDEAIiplRBJEJwVPAlBJvUUBRL5ISSJbcghMSU4DTgREgUBTFESxIihlRDIQTwMLsgiyALIHI7IQIrIBsyJJSwMMQQBESwNXAgBLAUlOAiULW0sGSRUWVwYCTFBLARYnDUxQTFAnDkxQvUUBRLGyESKyEksCSbIUsgCBBLIQIrIBsyMIRQFC/7UjQyIpNhoBSRUlEkQXNhoCSU4CSRWBIBJENhoDSSJZJAhLARUSRFcCADYaBElOBEkiWUlOBSULJAhMFRJEMRYjCUlOBDgQIxJESwIWTwJQSwEVFlcGAksCUElOBEwnDFBMUCcETFC9RQFEJwVMUEm9RQFEvkhJgUBTFEQiW0wxAExyCEQSQAAQMQBLBhJAAAhLBTIDEkEAgCNESXIITElOAkUKREsDSTgHIihlRExLARJPAjgIMhBLCElOBAsSEESxMhALsgiyALIHI7IQIrIBsyJFB0sGSwQMQQA6SwRXAgBLB0lOAiULW0kWJw1MUEsEUCcOTFC9RQFEsbIRIrISSwhJshSyAIEEshAisgGzIwhFB0L/viNDIkL/fSJHBClJNhoBSSJZJAhLARUSRFcCAEk2GgJJTgJJIllJTgOBIgskCEwVEkQxACIqZUQSRCcFTFBJvUUBRL5IgUBTFEQiKGVEMgoTQQAgsSIoZUQyCksEFSEECyEGCEsDC7IIsgeyACOyECKyAbMiRQVLBEsBDEEAiEsBVwIASwWBIguBIlhJVwAISwFXCAFFCEsBVwkIRQxLAVcRCEULSwFXGQhFCkyBiAJTSU4CRQZLBEkVFlcGAkxQJw1PAlBMUCcOTFBJRQm9RQEUREEALDIGSwZLClBLC1AiFkxLAVBLClBMUEwWUCcJIksGVFBLB0y/SwQjCEUFQv91MgdC/9ErMgdnJwYyB2cjQyk2GgFJIlkkCEsBFRJEVwIASTYaAklOAkkiWUlOAyULJAhMFRJEMQAiKmVEEkQnBUxQSb1FAUS+SIFAUxREIihlRDIKE0EAHLEiKGVESwMVIQQLIQYISwILsgiyByOyECKyAbMiRQRLA0sBDEEAMUsBVwIASwRJTgIlCyVYSwRJFRZXBgJMUCcNTwJQTFAnDkxQSb1FAUS8SCMIRQRC/8crMgdnJwYyB2cjQzYaAUkVgSASRDYaAklOAkkiWYEgCyQITBUSRDYaA0kVJRJEF04CNhoESRUlEkQXTgIxACIqZUQSRCcITFBJTgO9RQFAACFLAxaAAgASTFBPAhZQTFBLAUm8SEy/KzIHZycGMgdnI0NLAkkkJboXSwUSREmBCiW6F08DEkRJvkhJIllLARVLAksCTwJSTwRXAgBQSVcCABWBIAoWVwYCXABPAiJPA1hMUEsBvEi/Qv+sNhoBSRWBIBJEJwhMUEm9RQFEMQAiKmVEEkAADEmBCiW6FzIGDEEAECNESbxIKzIHZycGMgdnI0MiQv/tIik2GgEnCiJLAiJZSUUFSwENQQBrSwJXAgBLAUlOAiQLSwFMWU8CIwhJRQRLBksBCUsDFU8CJAtLBExZTwJNUicETFBJRQa9RQFBAB9LBL5ESwJJIllMVwIAJxRPA1BOAiNPA4jxkkUCQv+cSwFJIllMVwIAIycViPF+RQJC/4gnB0sCULAjQyJJKTYaAScKIksCIllLAQ1JRQVBAIJLAlcCAEsEREsBJAtLAUxZSlkkCFhXAgAnEExQSUUHvUUBQQBJSwW+RCcETFBJRQa9RQFBACRLBL5ESwJJIllMVwIAJxRPA1BOAiNPA4jxC0UCSSMIRQFC/5lLAUkiWUxXAgAjJxWI8PJFAkL/5EsBSSJZTFcCACMnFYjw3kUCQv/QJwdLAlCwI0MiKTYaAScKIksCIllLAQ1JRQVBAGNLAlcCAEsEREsBJAtLAUxZSlkkCFhXAgAnBUxQSUUGvUUBQQAfSwS+REsCSU8CUEwiWSMIFlcGAlwARQJJIwhFAUL/r0sBSYAJAAAAAAAAAAAAUEwiWSMIFlcGAlwARQJC/9knB0sCULAjQyI2GgFJIlkkCEsBFRJEVwIANhoCRwIiWUlOAiULJAhMFRJEJwoiSUsDDEEAkEsDVwIASwElCyVYSwVJFRZXBgJMUCcNTwJQTFAnDkxQSUUHvUUBQQAfSwW+REsCSU8CUEwiWSMIFlcGAlwARQJJIwhFAUL/sUsBSYAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQTCJZIwgWVwYCXABFAkL/sCcHSwJQsCNDIjYaAUcCIllJTgKBIAskCEwVEkQnCiJJSwMMQQBoSwNXAgBLAYEgC4EgWCcITFBJRQa9RQFBACRLBL5ESwJJIllMVwIAJxRPA1BOAiNPA4jvOkUCSSMIRQFC/7tLAUkiWUxXAgAjgBYAAgASAAAAAAAAAAAAAAAAAAAAAAAAiO8LRQJC/84nB0sCULAjQzYaAUkiWSQISwEVEkRXAgA2GgJJFSUSRBc2GgNJIlkkCEsBFRJEVwIANhoESRUlEkQXSwMVIQQLgeQySwEISwVPBYgAUE8EFSEECyEFCCEGTwQITwSBgGQLgZSgAQgnBU8GUL1OBkgyAYG08gkISwUITwQWTwQWUE8EFlBPAxZQTwIWUCcJIk8EVFBMFlAnB0xQsCNDigIBgRSL/wuL/hUIIQQLgfSvAgiJigEBIov/KRJBAAMiTIknBYv/UEmMAL1FAUEACIsAvkQiW0yJi/+IAANC//aKAQEiKGVEMgoTQQAesSIoZUQyCov/FSEEC4HkMgiyCLIHsgAjshAisgGzsSIoZUSB8JMJMgEIIicSZURJcghEsgdMsghLAbIAI7IQIrIBtoAE2FzxhLIashiyAIEGshAisgGztwE+SVcEAExXAAQnBxJESRUlEkQXSRYnCVAnBYv/UEy/iYoEASlHBYv8Fov9UIv+FRZXBgKL/lBMJwxQTFAnBExQSb1FAUAABCKMAImLBkmBESW6F4wASYEbI7pJI1OMBSRTTIEcJboXjANBAAQijACJiwaBLCS6FxSMBCKMAosGgSwkuheLAg1BABqLAoEUC4EuCIsGTIEUulcABIv/EkEAMSOMBIsFQQAiMgaMAYsDiwEPQQASiwGLAwmLAA9BAAcjiwQQjACJIkL/9jIHjAFC/9uLAiMIjAJC/6KKAQGL/zgAIihlRBJBAAyL/zggMgoSQQACI4mL/zgQgQYSQQAni/84GDIIEkEAHYv/OBsjEkEAFIv/OBlAAA2L/yLCGicWEkEAAiOJIomKAQIpRwInBIv/UEm9SU8CSEAACoABYIv/jAGMAImLA0mBCSW6F4wCSYERJboXjABJgRsjuiNTTIEcJboXjAFBADAyBkmLAg1MiwEJiwAMiwOBLCS6FyINJwkiiwRUI08EVCRPA1SBA08CVIv/jAGMAIkyB0L/zYoFAiJHCilHEov8QQQxMgOL+xZMUIv9FRZXBgKL/VBJjAFMJwxQTFBJjAYnBEsBUEmMAr1FAUQnE0xni/0pE0ED8icFi/1QSb1FAUS+SCJbSXIIRCcLTGdyCEyMBUQijBCL/yJZixANQQGHi/9XAgCLEIEQC4EQWEmMACJbSYwdFicNTFCLAVAnDkxQSYwDSb1FAUS+SElXAAGMCkmBEVuMGkmBCVuMC0mBIVuME0kjW4wVSYEZW4wRSYEpW4wbgYgDU0mMHEEBIjIGjBiLCicPEkEAbosLixoJiwAlW0xLAQ9EiwNJTgK+RIERWwgWgRFMu4sYFosDgSFPAruLHUEAJrEiKGVEiwAlW4sdshGyEosFshSyAIEEshAisgGzixAjCIwQQv85sSIoZUSLACVbsgiLBbIHsgAjshAisgGzQv/ciwqAAQISQQBaixxBAEgyBkmLGwmLERgJixMNQQAXiwBJVwgITCVbiwsORIsDgRFPArtC/3uLC4saCYsAJVtMSwEPRIsDSU4CvkSBEVsIFoERTLtC/1oyB0mLGwmLERgJQv+1iwqAAQMSQf9EixxBADAyBowOiw6LEwmLEQqLCwuLGghJixVJTgMNTE4CTYsAJVtKD0QJFosDgRFPArtC/w8yB4wOQv/NMgeMGEL+24sCgRsjukkjU4wcJFNBAHIxACIqZUQSQABoJwgxBlC9RQFEJwgxBlAkJboXMgYORCcIMQZQgQoluhcyBg9EJwgxBlCMBCKMDyKMEIsEgRIkuheLEA1BACCLEIEgC4EUCIsETIEgujILEkEAAyOMD4sQIwiMEEL/04sPRCcIMQZQvEiLBoj9EIwGSSJTREkjUxREJFMURIscQQGgMgaMDiKMGSKMFjEWIwiMEosGjAeLEjIEDEEAC4sSiPyNQQBZI4wZixlEsSInC2VEi/tyCESAFnJla2V5aW5nIHRvIHBsdWdpbiBhcHCyBbIgSbIHsgAjshAisgGzJxExFmcnBIsHUCUjuicPEkEABCsyB2eL/ov/jAGMAImLEjgQgQYTQQANiweLEiMIjBKMB0L/gIsSSTgYiwZJTgMiWxJESTgZFERJOBsjDUQjwhoXMggSRIj8RIwGSSNTSwEkU08CgQNTTwIUREwUREEApIv+IlmLFklPAgxEi/5XAgBMJQtbixIiwhpJjAkVgQQSRCcEiwZQSYwCSYEbI7ojU0lOAowcTwKBFAtJjAyBLgiBFLpJVwAEjAhJgQRbjA2BDFuMFEEAdDIGixQJiw0MjBeLCIsJEkEAXIsNQQAFixdAAFKLDUEAE4scQQBDMgYWiwyBOgiLAkxPAruAAYAjixdUSSJTTCNTjBdBAB+LF0AAGiNEJwSLBklOAlCLDhaBHEy7ixYjCIwWQv79IkL/4zIHQv+6gAFAQv/HMgdC/4kyB4wOQv5dIihlRCcLTGdC/bMxAEL7zA==", + "clear": "C4EBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 5, + "minor": 2, + "patch": 0 + } + }, + "events": [], + "templateVariables": {} +} \ No newline at end of file diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/abstracted_account/AbstractedAccount.clear.puya.map b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/abstracted_account/AbstractedAccount.clear.puya.map new file mode 100644 index 000000000..bf29998bd --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/abstracted_account/AbstractedAccount.clear.puya.map @@ -0,0 +1,25 @@ +{ + "version": 3, + "sources": [], + "mappings": ";;;", + "op_pc_offset": 0, + "pc_events": { + "1": { + "subroutine": "@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram", + "params": {}, + "block": "main", + "stack_in": [], + "op": "pushint 1 // 1", + "defined_out": [ + "1" + ], + "stack_out": [ + "1" + ] + }, + "3": { + "op": "return", + "stack_out": [] + } + } +} \ No newline at end of file diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/abstracted_account/AbstractedAccount.clear.teal b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/abstracted_account/AbstractedAccount.clear.teal new file mode 100644 index 000000000..42f81b0f1 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/abstracted_account/AbstractedAccount.clear.teal @@ -0,0 +1,7 @@ +#pragma version 11 +#pragma typetrack false + +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: + pushint 1 // 1 + return diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/abstracted_account/AbstractedAccountClient.ts b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/abstracted_account/AbstractedAccountClient.ts new file mode 100644 index 000000000..aa1ca14f0 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/abstracted_account/AbstractedAccountClient.ts @@ -0,0 +1,3446 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^7 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, AppReturn, SendAppTransactionResult } from '@algorandfoundation/algokit-utils/types/app' +import { Arc56Contract, getArc56ReturnValue, getABIStructFromABITuple } from '@algorandfoundation/algokit-utils/types/app-arc56' +import { + AppClient as _AppClient, + AppClientMethodCallParams, + AppClientParams, + AppClientBareCallParams, + CallOnComplete, + AppClientCompilationParams, + ResolveAppClientByCreatorAndName, + ResolveAppClientByNetwork, + CloneAppClientParams, +} from '@algorandfoundation/algokit-utils/types/app-client' +import { AppFactory as _AppFactory, AppFactoryAppClientParams, AppFactoryResolveAppClientByCreatorAndNameParams, AppFactoryDeployParams, AppFactoryParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, AppCallMethodCall, AppMethodCallTransactionArgument, SimulateOptions, RawSimulateOptions, SkipSignaturesSimulateOptions } from '@algorandfoundation/algokit-utils/types/composer' +import { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { Address, encodeAddress, modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk' + +export const APP_SPEC: Arc56Contract = {"name":"AbstractedAccount","structs":{"AbstractAccountBoxMBRData":[{"name":"plugins","type":"uint64"},{"name":"namedPlugins","type":"uint64"},{"name":"escrows","type":"uint64"},{"name":"allowances","type":"uint64"},{"name":"executions","type":"uint64"},{"name":"escrowExists","type":"bool"},{"name":"newEscrowMintCost","type":"uint64"}],"AllowanceInfo":[{"name":"type","type":"uint8"},{"name":"max","type":"uint64"},{"name":"amount","type":"uint64"},{"name":"spent","type":"uint64"},{"name":"interval","type":"uint64"},{"name":"last","type":"uint64"},{"name":"start","type":"uint64"},{"name":"useRounds","type":"bool"}],"AllowanceKey":[{"name":"escrow","type":"string"},{"name":"asset","type":"uint64"}],"EscrowInfo":[{"name":"id","type":"uint64"},{"name":"locked","type":"bool"}],"ExecutionInfo":[{"name":"groups","type":"byte[32][]"},{"name":"firstValid","type":"uint64"},{"name":"lastValid","type":"uint64"}],"PluginInfo":[{"name":"escrow","type":"uint64"},{"name":"delegationType","type":"uint8"},{"name":"lastValid","type":"uint64"},{"name":"cooldown","type":"uint64"},{"name":"methods","type":"(byte[4],uint64,uint64)[]"},{"name":"admin","type":"bool"},{"name":"useRounds","type":"bool"},{"name":"useExecutionKey","type":"bool"},{"name":"lastCalled","type":"uint64"},{"name":"start","type":"uint64"}],"PluginKey":[{"name":"plugin","type":"uint64"},{"name":"caller","type":"address"},{"name":"escrow","type":"string"}]},"methods":[{"name":"createApplication","args":[{"type":"address","name":"controlledAddress","desc":"The address of the abstracted account. If zeroAddress, then the address of the contract account will be used"},{"type":"address","name":"admin","desc":"The admin for this app"},{"type":"uint64","name":"escrowFactory"}],"returns":{"type":"void"},"actions":{"create":["NoOp"],"call":[]},"readonly":false,"desc":"Create an abstracted account application.\nThis is not part of ARC58 and implementation specific.","events":[],"recommendations":{}},{"name":"register","args":[{"type":"string","name":"escrow"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Register the abstracted account with the escrow factory.\nThis allows apps to correlate the account with the app without needing\nit to be explicitly provided.","events":[],"recommendations":{}},{"name":"arc58_changeAdmin","args":[{"type":"address","name":"newAdmin","desc":"The new admin"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Attempt to change the admin for this app. Some implementations MAY not support this.","events":[],"recommendations":{}},{"name":"arc58_pluginChangeAdmin","args":[{"type":"address","name":"newAdmin","desc":"The new admin"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Attempt to change the admin via plugin.","events":[],"recommendations":{}},{"name":"arc58_getAdmin","args":[],"returns":{"type":"address"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"Get the admin of this app. This method SHOULD always be used rather than reading directly from state\nbecause different implementations may have different ways of determining the admin.","events":[],"recommendations":{}},{"name":"arc58_verifyAuthAddress","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Verify the abstracted account is rekeyed to this app","events":[],"recommendations":{}},{"name":"arc58_rekeyTo","args":[{"type":"address","name":"address","desc":"The address to rekey to"},{"type":"bool","name":"flash","desc":"Whether or not this should be a flash rekey. If true, the rekey back to the app address must done in the same txn group as this call"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Rekey the abstracted account to another address. Primarily useful for rekeying to an EOA.","events":[],"recommendations":{}},{"name":"arc58_canCall","args":[{"type":"uint64","name":"plugin","desc":"the plugin to be rekeyed to"},{"type":"bool","name":"global","desc":"whether this is callable globally"},{"type":"address","name":"address","desc":"the address that will trigger the plugin"},{"type":"string","name":"escrow"},{"type":"byte[4]","name":"method","desc":"the method being called on the plugin, if applicable"}],"returns":{"type":"bool","desc":"whether the plugin can be called with these parameters"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"desc":"check whether the plugin can be used","events":[],"recommendations":{}},{"name":"arc58_rekeyToPlugin","args":[{"type":"uint64","name":"plugin","desc":"The app to rekey to"},{"type":"bool","name":"global","desc":"Whether the plugin is callable globally"},{"type":"string","name":"escrow"},{"type":"uint64[]","name":"methodOffsets","desc":"The indices of the methods being used in the group if the plugin has method restrictions these indices are required to match the methods used on each subsequent call to the plugin within the group"},{"type":"(uint64,uint64)[]","name":"fundsRequest","desc":"If the plugin is using an escrow, this is the list of funds to transfer to the escrow for the plugin to be able to use during execution"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Temporarily rekey to an approved plugin app address","events":[],"recommendations":{}},{"name":"arc58_rekeyToNamedPlugin","args":[{"type":"string","name":"name","desc":"The name of the plugin to rekey to"},{"type":"bool","name":"global","desc":"Whether the plugin is callable globally"},{"type":"string","name":"escrow"},{"type":"uint64[]","name":"methodOffsets","desc":"The indices of the methods being used in the group if the plugin has method restrictions these indices are required to match the methods used on each subsequent call to the plugin within the group"},{"type":"(uint64,uint64)[]","name":"fundsRequest","desc":"If the plugin is using an escrow, this is the list of funds to transfer to the escrow for the plugin to be able to use during execution"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Temporarily rekey to a named plugin app address","events":[],"recommendations":{}},{"name":"arc58_addPlugin","args":[{"type":"uint64","name":"plugin"},{"type":"address","name":"caller"},{"type":"string","name":"escrow","desc":"The escrow account to use for the plugin, if any. If empty, no escrow will be used, if the named escrow does not exist, it will be created"},{"type":"bool","name":"admin","desc":"Whether the plugin has permissions to change the admin account"},{"type":"uint8","name":"delegationType","desc":"the ownership of the delegation for last_interval updates"},{"type":"uint64","name":"lastValid","desc":"The timestamp or round when the permission expires"},{"type":"uint64","name":"cooldown","desc":"The number of seconds or rounds that must pass before the plugin can be called again"},{"type":"(byte[4],uint64)[]","name":"methods","desc":"The methods that are allowed to be called for the plugin by the address"},{"type":"bool","name":"useRounds","desc":"Whether the plugin uses rounds for cooldowns and lastValid, defaults to timestamp"},{"type":"bool","name":"useExecutionKey"},{"type":"bool","name":"defaultToEscrow"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Add an app to the list of approved plugins","events":[],"recommendations":{}},{"name":"arc58_removePlugin","args":[{"type":"uint64","name":"plugin"},{"type":"address","name":"caller"},{"type":"string","name":"escrow"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Remove an app from the list of approved plugins","events":[],"recommendations":{}},{"name":"arc58_addNamedPlugin","args":[{"type":"string","name":"name","desc":"The plugin name"},{"type":"uint64","name":"plugin"},{"type":"address","name":"caller"},{"type":"string","name":"escrow","desc":"The escrow account to use for the plugin, if any. If empty, no escrow will be used, if the named escrow does not exist, it will be created"},{"type":"bool","name":"admin","desc":"Whether the plugin has permissions to change the admin account"},{"type":"uint8","name":"delegationType","desc":"the ownership of the delegation for last_interval updates"},{"type":"uint64","name":"lastValid","desc":"The timestamp or round when the permission expires"},{"type":"uint64","name":"cooldown","desc":"The number of seconds or rounds that must pass before the plugin can be called again"},{"type":"(byte[4],uint64)[]","name":"methods","desc":"The methods that are allowed to be called for the plugin by the address"},{"type":"bool","name":"useRounds","desc":"Whether the plugin uses rounds for cooldowns and lastValid, defaults to timestamp"},{"type":"bool","name":"useExecutionKey"},{"type":"bool","name":"defaultToEscrow"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Add a named plugin","events":[],"recommendations":{}},{"name":"arc58_removeNamedPlugin","args":[{"type":"string","name":"name","desc":"The plugin name"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Remove a named plugin","events":[],"recommendations":{}},{"name":"arc58_newEscrow","args":[{"type":"string","name":"escrow","desc":"The name of the escrow to create"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Create a new escrow for the controlled address","events":[],"recommendations":{}},{"name":"arc58_toggleEscrowLock","args":[{"type":"string","name":"escrow","desc":"The escrow to lock or unlock"}],"returns":{"type":"(uint64,bool)","struct":"EscrowInfo"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Lock or Unlock an escrow account","events":[],"recommendations":{}},{"name":"arc58_reclaim","args":[{"type":"string","name":"escrow","desc":"The escrow to reclaim funds from"},{"type":"(uint64,uint64,bool)[]","name":"reclaims","desc":"The list of reclaims to make from the escrow"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Transfer funds from an escrow back to the controlled address.","events":[],"recommendations":{}},{"name":"arc58_optinEscrow","args":[{"type":"string","name":"escrow","desc":"The escrow to opt-in to"},{"type":"uint64[]","name":"assets","desc":"The list of assets to opt-in to"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Opt-in an escrow account to assets","events":[],"recommendations":{}},{"name":"arc58_pluginOptinEscrow","args":[{"type":"uint64","name":"plugin"},{"type":"address","name":"caller"},{"type":"string","name":"escrow"},{"type":"uint64[]","name":"assets","desc":"The list of assets to opt-in to"},{"type":"pay","name":"mbrPayment","desc":"The payment txn that is used to pay for the asset opt-in"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Opt-in an escrow account to assets via a plugin / allowed caller","events":[],"recommendations":{}},{"name":"arc58_addAllowances","args":[{"type":"string","name":"escrow","desc":"The escrow to add the allowance for"},{"type":"(uint64,uint8,uint64,uint64,uint64,bool)[]","name":"allowances","desc":"The list of allowances to add"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Add an allowance for an escrow account","events":[],"recommendations":{}},{"name":"arc58_removeAllowances","args":[{"type":"string","name":"escrow","desc":"The escrow to remove the allowance for"},{"type":"uint64[]","name":"assets","desc":"The list of assets to remove the allowance for"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"desc":"Remove an allowances for an escrow account","events":[],"recommendations":{}},{"name":"arc58_addExecutionKey","args":[{"type":"byte[32]","name":"lease"},{"type":"byte[32][]","name":"groups"},{"type":"uint64","name":"firstValid"},{"type":"uint64","name":"lastValid"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"arc58_removeExecutionKey","args":[{"type":"byte[32]","name":"lease"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"arc58_getPlugins","args":[{"type":"(uint64,address,string)[]","name":"keys"}],"returns":{"type":"(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"events":[],"recommendations":{}},{"name":"arc58_getNamedPlugins","args":[{"type":"string[]","name":"names"}],"returns":{"type":"(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"events":[],"recommendations":{}},{"name":"arc58_getEscrows","args":[{"type":"string[]","name":"escrows"}],"returns":{"type":"(uint64,bool)[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"events":[],"recommendations":{}},{"name":"arc58_getAllowances","args":[{"type":"string","name":"escrow"},{"type":"uint64[]","name":"assets"}],"returns":{"type":"(uint8,uint64,uint64,uint64,uint64,uint64,uint64,bool)[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"events":[],"recommendations":{}},{"name":"arc58_getExecutions","args":[{"type":"byte[32][]","name":"leases"}],"returns":{"type":"(byte[32][],uint64,uint64)[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"events":[],"recommendations":{}},{"name":"mbr","args":[{"type":"string","name":"escrow"},{"type":"uint64","name":"methodCount"},{"type":"string","name":"plugin"},{"type":"uint64","name":"groups"}],"returns":{"type":"(uint64,uint64,uint64,uint64,uint64,bool,uint64)","struct":"AbstractAccountBoxMBRData"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":4,"bytes":4},"local":{"ints":0,"bytes":0}},"keys":{"global":{"admin":{"keyType":"AVMString","valueType":"address","key":"YWRtaW4=","desc":"The admin of the abstracted account. This address can add plugins and initiate rekeys"},"controlledAddress":{"keyType":"AVMString","valueType":"address","key":"Y29udHJvbGxlZF9hZGRyZXNz","desc":"The address this app controls"},"lastUserInteraction":{"keyType":"AVMString","valueType":"AVMUint64","key":"bGFzdF91c2VyX2ludGVyYWN0aW9u","desc":"The last time the contract was interacted with in unix time"},"lastChange":{"keyType":"AVMString","valueType":"AVMUint64","key":"bGFzdF9jaGFuZ2U=","desc":"The last time state has changed on the abstracted account (not including lastCalled for cooldowns) in unix time"},"escrowFactory":{"keyType":"AVMString","valueType":"AVMUint64","key":"ZXNjcm93X2ZhY3Rvcnk=","desc":"the escrow account factory to use for allowances"},"spendingAddress":{"keyType":"AVMString","valueType":"address","key":"c3BlbmRpbmdfYWRkcmVzcw==","desc":"[TEMPORARY STATE FIELD] The spending address for the currently active plugin"},"currentPlugin":{"keyType":"AVMString","valueType":"PluginKey","key":"Y3VycmVudF9wbHVnaW4=","desc":"[TEMPORARY STATE FIELD] The current plugin key being used"},"rekeyIndex":{"keyType":"AVMString","valueType":"AVMUint64","key":"cmVrZXlfaW5kZXg=","desc":"[TEMPORARY STATE FIELD] The index of the transaction that created the rekey sandwich"}},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{"plugins":{"keyType":"PluginKey","valueType":"PluginInfo","desc":"Plugins that add functionality to the controlledAddress and the account that has permission to use it.","prefix":"cA=="},"namedPlugins":{"keyType":"AVMString","valueType":"PluginKey","desc":"Plugins that have been given a name for discoverability","prefix":"bg=="},"escrows":{"keyType":"AVMString","valueType":"EscrowInfo","desc":"the escrows that this wallet has created for specific callers with allowances","prefix":"ZQ=="},"allowances":{"keyType":"AllowanceKey","valueType":"AllowanceInfo","desc":"The Allowances for plugins installed on the smart contract with useAllowance set to true","prefix":"YQ=="},"executions":{"keyType":"AVMBytes","valueType":"ExecutionInfo","desc":"execution keys","prefix":"eA=="}}}},"bareActions":{"create":[],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[4130,4248,4265,4407,4563,4730,5014,5778,5941],"errorMessage":"Box must have value"},{"pc":[5141],"errorMessage":"Bytes has valid prefix"},{"pc":[2992,3214,3442,3704],"errorMessage":"Escrow is locked"},{"pc":[2594],"errorMessage":"Escrow name is required"},{"pc":[6104],"errorMessage":"Execution key expired"},{"pc":[6077],"errorMessage":"Execution key not found"},{"pc":[6090],"errorMessage":"Execution key not ready"},{"pc":[6165],"errorMessage":"Group not found"},{"pc":[236],"errorMessage":"OnCompletion must be NoOp"},{"pc":[888],"errorMessage":"This plugin does not have admin privileges"},{"pc":[865],"errorMessage":"This plugin is not in control of the account"},{"pc":[859,940],"errorMessage":"account funded"},{"pc":[1026,1528,1859,2112,2454,2580,2629,3426,3688,3870,4031],"errorMessage":"admin only"},{"pc":[843],"errorMessage":"admin plugins cannot use escrows"},{"pc":[3579],"errorMessage":"allowance already exists"},{"pc":[3063,3341,3793,5692],"errorMessage":"allowance does not exist"},{"pc":[5771,5910,5934,6016],"errorMessage":"allowance exceeded"},{"pc":[737,850,863,2748,2987,3223,3255,5090,5628,5638,6250],"errorMessage":"application exists"},{"pc":[6359],"errorMessage":"cannot call other apps during rekey"},{"pc":[733,791,821,856,921,933,944,952,1024,1031,1526,1686,1697,1857,1903,1914,2110,2283,2294,2452,2495,2506,2578,2627,2730,2785,2804,2853,2872,2961,2997,3264,3424,3446,3457,3686,3708,3719,3868,4013,5033,5044,5074,5086,5358,5807,5845,6064,6245,6624],"errorMessage":"check GlobalState exists"},{"pc":[1545,2142],"errorMessage":"delegation type must not be self for global plugins"},{"pc":[2590],"errorMessage":"escrow already exists"},{"pc":[721,2638,2741,2973,3206,3435,3697,5620],"errorMessage":"escrow does not exist"},{"pc":[1800,2415],"errorMessage":"escrow must be set if defaultToEscrow is true"},{"pc":[4007],"errorMessage":"execution key does not exist"},{"pc":[3927],"errorMessage":"execution key update must match first valid"},{"pc":[3937],"errorMessage":"execution key update must match last valid"},{"pc":[2732,2963,3245],"errorMessage":"forbidden"},{"pc":[1628,2234,2769,3508,3767,4098,4215,4374,4529,4713,5664],"errorMessage":"index access is out of bounds"},{"pc":[6438],"errorMessage":"invalid method signature length"},{"pc":[1290,1370],"errorMessage":"invalid number of bytes for (len+(uint64,uint64)[])"},{"pc":[2720],"errorMessage":"invalid number of bytes for (len+(uint64,uint64,bool1)[])"},{"pc":[3418],"errorMessage":"invalid number of bytes for (len+(uint64,uint8,uint64,uint64,uint64,bool1)[])"},{"pc":[1487,2068],"errorMessage":"invalid number of bytes for (len+(uint8[4],uint64)[])"},{"pc":[1274,1354,2955,3152,3680,4508],"errorMessage":"invalid number of bytes for (len+uint64[])"},{"pc":[3840,4690],"errorMessage":"invalid number of bytes for (len+uint8[32][])"},{"pc":[700,1170,1256,1310,1336,1424,1845,1961,1999,2442,2569,2618,2696,2929,3129,3393,3656,4487,4825,4850],"errorMessage":"invalid number of bytes for (len+utf8[])"},{"pc":[1016,1144,1241,1321,1435,1495,1506,1517,2011,2076,2088,2100],"errorMessage":"invalid number of bytes for bool8"},{"pc":[615,1135,1232,1401,1454,1464,1822,1973,2033,2044,3103,3848,3859,4836,4861,5146],"errorMessage":"invalid number of bytes for uint64"},{"pc":[1446,2025],"errorMessage":"invalid number of bytes for uint8"},{"pc":[596,607,785,816,1008,1157,1411,1832,1986,3116,3822,3998],"errorMessage":"invalid number of bytes for uint8[32]"},{"pc":[1185],"errorMessage":"invalid number of bytes for uint8[4]"},{"pc":[6364],"errorMessage":"invalid oncomplete must be no op"},{"pc":[3283],"errorMessage":"invalid payment"},{"pc":[6378],"errorMessage":"invalid sender app id"},{"pc":[6370],"errorMessage":"invalid sender must be this app id"},{"pc":[1643,2249],"errorMessage":"invalid size"},{"pc":[6416],"errorMessage":"malformed method offsets"},{"pc":[1653,2259,3959,4413,4449,4569,4646],"errorMessage":"max array length exceeded"},{"pc":[6569],"errorMessage":"method on cooldown"},{"pc":[1112,6239],"errorMessage":"missing rekey back"},{"pc":[793],"errorMessage":"only admin can change the admin account"},{"pc":[1890,2463,2478,3197,5599,6183],"errorMessage":"plugin does not exist"},{"pc":[6188,6399],"errorMessage":"plugin expired"},{"pc":[6192,6402],"errorMessage":"plugin on cooldown"},{"pc":[852],"errorMessage":"sender must be admin plugin"},{"pc":[633],"errorMessage":"sender must be either controlledAddress or admin"},{"pc":[3164],"errorMessage":"transaction type is pay"},{"pc":[1561,2158],"errorMessage":"using execution key requires global plugin"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDIgOCA0MDAgMjE3MDAgMjc3MDAKICAgIGJ5dGVjYmxvY2sgImNvbnRyb2xsZWRfYWRkcmVzcyIgIiIgImFkbWluIiAibGFzdF91c2VyX2ludGVyYWN0aW9uIiAicCIgImUiICJsYXN0X2NoYW5nZSIgMHgxNTFmN2M3NSAieCIgMHgwMCAweDAwMDAgInNwZW5kaW5nX2FkZHJlc3MiIDB4MDAyYSAweDAwMGEgImEiIDB4MDEgIm4iICJyZWtleV9pbmRleCIgImVzY3Jvd19mYWN0b3J5IiAiY3VycmVudF9wbHVnaW4iIDB4MDAwMiAweDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAweDZjYzNmNjA2IDB4MDAyYwogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMwCiAgICAvLyByZWtleUluZGV4ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCwga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNSZWtleUluZGV4IH0pCiAgICBieXRlYyAxNyAvLyAicmVrZXlfaW5kZXgiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEzCiAgICAvLyBleHBvcnQgY2xhc3MgQWJzdHJhY3RlZEFjY291bnQgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJ6IG1haW5fY3JlYXRlX05vT3BAMzQKICAgIHB1c2hieXRlc3MgMHhiZDYwOTllNSAweGQyNGI3NTU2IDB4MTQ3YjZjZDYgMHgxM2JjNDRlNCAvLyBtZXRob2QgInJlZ2lzdGVyKHN0cmluZyl2b2lkIiwgbWV0aG9kICJhcmM1OF9jaGFuZ2VBZG1pbihhZGRyZXNzKXZvaWQiLCBtZXRob2QgImFyYzU4X3BsdWdpbkNoYW5nZUFkbWluKGFkZHJlc3Mpdm9pZCIsIG1ldGhvZCAiYXJjNThfZ2V0QWRtaW4oKWFkZHJlc3MiCiAgICBieXRlYyAyMiAvLyBtZXRob2QgImFyYzU4X3ZlcmlmeUF1dGhBZGRyZXNzKCl2b2lkIgogICAgcHVzaGJ5dGVzcyAweGM5NWE1ZDNkIDB4NDcyN2FmMjEgMHg1ODJmZjM4MiAweGRlZmQ1Y2QyIDB4YjNjODBkZjkgMHhlZWY0NDhmZCAweDM4ZjU5MWVhIDB4ZTM1MGI5ZDQgMHgwYThjYjJjMiAweDI1YjcxM2NhIDB4ZWJhZjE0YTAgMHgxZmRhM2I0ZiAweDlkM2Y4OTE4IDB4YmY0ZDdjNTcgMHhkNWRkMzgyYiAweDVjZWJlZDQzIDB4ZDU4Njg1YWYgMHg3YzM3MTU2ZSAweGFmZmFhNGU4IDB4YTI0MDNkZGYgMHgwMmZlNDUxNSAweDQxYmRjNjgwIDB4NTBmM2UzNWMgLy8gbWV0aG9kICJhcmM1OF9yZWtleVRvKGFkZHJlc3MsYm9vbCl2b2lkIiwgbWV0aG9kICJhcmM1OF9jYW5DYWxsKHVpbnQ2NCxib29sLGFkZHJlc3Msc3RyaW5nLGJ5dGVbNF0pYm9vbCIsIG1ldGhvZCAiYXJjNThfcmVrZXlUb1BsdWdpbih1aW50NjQsYm9vbCxzdHJpbmcsdWludDY0W10sKHVpbnQ2NCx1aW50NjQpW10pdm9pZCIsIG1ldGhvZCAiYXJjNThfcmVrZXlUb05hbWVkUGx1Z2luKHN0cmluZyxib29sLHN0cmluZyx1aW50NjRbXSwodWludDY0LHVpbnQ2NClbXSl2b2lkIiwgbWV0aG9kICJhcmM1OF9hZGRQbHVnaW4odWludDY0LGFkZHJlc3Msc3RyaW5nLGJvb2wsdWludDgsdWludDY0LHVpbnQ2NCwoYnl0ZVs0XSx1aW50NjQpW10sYm9vbCxib29sLGJvb2wpdm9pZCIsIG1ldGhvZCAiYXJjNThfcmVtb3ZlUGx1Z2luKHVpbnQ2NCxhZGRyZXNzLHN0cmluZyl2b2lkIiwgbWV0aG9kICJhcmM1OF9hZGROYW1lZFBsdWdpbihzdHJpbmcsdWludDY0LGFkZHJlc3Msc3RyaW5nLGJvb2wsdWludDgsdWludDY0LHVpbnQ2NCwoYnl0ZVs0XSx1aW50NjQpW10sYm9vbCxib29sLGJvb2wpdm9pZCIsIG1ldGhvZCAiYXJjNThfcmVtb3ZlTmFtZWRQbHVnaW4oc3RyaW5nKXZvaWQiLCBtZXRob2QgImFyYzU4X25ld0VzY3JvdyhzdHJpbmcpdWludDY0IiwgbWV0aG9kICJhcmM1OF90b2dnbGVFc2Nyb3dMb2NrKHN0cmluZykodWludDY0LGJvb2wpIiwgbWV0aG9kICJhcmM1OF9yZWNsYWltKHN0cmluZywodWludDY0LHVpbnQ2NCxib29sKVtdKXZvaWQiLCBtZXRob2QgImFyYzU4X29wdGluRXNjcm93KHN0cmluZyx1aW50NjRbXSl2b2lkIiwgbWV0aG9kICJhcmM1OF9wbHVnaW5PcHRpbkVzY3Jvdyh1aW50NjQsYWRkcmVzcyxzdHJpbmcsdWludDY0W10scGF5KXZvaWQiLCBtZXRob2QgImFyYzU4X2FkZEFsbG93YW5jZXMoc3RyaW5nLCh1aW50NjQsdWludDgsdWludDY0LHVpbnQ2NCx1aW50NjQsYm9vbClbXSl2b2lkIiwgbWV0aG9kICJhcmM1OF9yZW1vdmVBbGxvd2FuY2VzKHN0cmluZyx1aW50NjRbXSl2b2lkIiwgbWV0aG9kICJhcmM1OF9hZGRFeGVjdXRpb25LZXkoYnl0ZVszMl0sYnl0ZVszMl1bXSx1aW50NjQsdWludDY0KXZvaWQiLCBtZXRob2QgImFyYzU4X3JlbW92ZUV4ZWN1dGlvbktleShieXRlWzMyXSl2b2lkIiwgbWV0aG9kICJhcmM1OF9nZXRQbHVnaW5zKCh1aW50NjQsYWRkcmVzcyxzdHJpbmcpW10pKHVpbnQ2NCx1aW50OCx1aW50NjQsdWludDY0LChieXRlWzRdLHVpbnQ2NCx1aW50NjQpW10sYm9vbCxib29sLGJvb2wsdWludDY0LHVpbnQ2NClbXSIsIG1ldGhvZCAiYXJjNThfZ2V0TmFtZWRQbHVnaW5zKHN0cmluZ1tdKSh1aW50NjQsdWludDgsdWludDY0LHVpbnQ2NCwoYnl0ZVs0XSx1aW50NjQsdWludDY0KVtdLGJvb2wsYm9vbCxib29sLHVpbnQ2NCx1aW50NjQpW10iLCBtZXRob2QgImFyYzU4X2dldEVzY3Jvd3Moc3RyaW5nW10pKHVpbnQ2NCxib29sKVtdIiwgbWV0aG9kICJhcmM1OF9nZXRBbGxvd2FuY2VzKHN0cmluZyx1aW50NjRbXSkodWludDgsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsYm9vbClbXSIsIG1ldGhvZCAiYXJjNThfZ2V0RXhlY3V0aW9ucyhieXRlWzMyXVtdKShieXRlWzMyXVtdLHVpbnQ2NCx1aW50NjQpW10iLCBtZXRob2QgIm1icihzdHJpbmcsdWludDY0LHN0cmluZyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQsYm9vbCx1aW50NjQpIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggcmVnaXN0ZXIgYXJjNThfY2hhbmdlQWRtaW4gYXJjNThfcGx1Z2luQ2hhbmdlQWRtaW4gYXJjNThfZ2V0QWRtaW4gYXJjNThfdmVyaWZ5QXV0aEFkZHJlc3MgYXJjNThfcmVrZXlUbyBhcmM1OF9jYW5DYWxsIGFyYzU4X3Jla2V5VG9QbHVnaW4gYXJjNThfcmVrZXlUb05hbWVkUGx1Z2luIGFyYzU4X2FkZFBsdWdpbiBhcmM1OF9yZW1vdmVQbHVnaW4gYXJjNThfYWRkTmFtZWRQbHVnaW4gYXJjNThfcmVtb3ZlTmFtZWRQbHVnaW4gYXJjNThfbmV3RXNjcm93IGFyYzU4X3RvZ2dsZUVzY3Jvd0xvY2sgYXJjNThfcmVjbGFpbSBhcmM1OF9vcHRpbkVzY3JvdyBhcmM1OF9wbHVnaW5PcHRpbkVzY3JvdyBhcmM1OF9hZGRBbGxvd2FuY2VzIGFyYzU4X3JlbW92ZUFsbG93YW5jZXMgYXJjNThfYWRkRXhlY3V0aW9uS2V5IGFyYzU4X3JlbW92ZUV4ZWN1dGlvbktleSBhcmM1OF9nZXRQbHVnaW5zIGFyYzU4X2dldE5hbWVkUGx1Z2lucyBhcmM1OF9nZXRFc2Nyb3dzIGFyYzU4X2dldEFsbG93YW5jZXMgYXJjNThfZ2V0RXhlY3V0aW9ucyBtYnIKICAgIGVycgoKbWFpbl9jcmVhdGVfTm9PcEAzNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMwogICAgLy8gZXhwb3J0IGNsYXNzIEFic3RyYWN0ZWRBY2NvdW50IGV4dGVuZHMgQ29udHJhY3QgewogICAgcHVzaGJ5dGVzIDB4ZTE4MzYyZTIgLy8gbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbihhZGRyZXNzLGFkZHJlc3MsdWludDY0KXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBjcmVhdGVBcHBsaWNhdGlvbgogICAgZXJyCgoKLy8gX3B1eWFfbGliLmFyYzQuZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50KGFycmF5X2l0ZW1zX2NvdW50OiB1aW50NjQsIGFycmF5X2hlYWRfYW5kX3RhaWw6IGJ5dGVzLCBuZXdfaXRlbXNfY291bnQ6IHVpbnQ2NCwgbmV3X2hlYWRfYW5kX3RhaWw6IGJ5dGVzKSAtPiBieXRlczoKZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50OgogICAgcHJvdG8gNCAxCiAgICBieXRlY18xIC8vICIiCiAgICBkdXAKICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGZyYW1lX2RpZyAtNAogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGludGNfMCAvLyAwCgpkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnRfZm9yX2hlYWRlckAxOgogICAgZnJhbWVfZGlnIDQKICAgIGZyYW1lX2RpZyAzCiAgICA8CiAgICBieiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnRfYWZ0ZXJfZm9yQDQKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgY292ZXIgMgogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2RpZyAyCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgZnJhbWVfZGlnIDEKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfYnVyeSAxCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZnJhbWVfYnVyeSA0CiAgICBiIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9mb3JfaGVhZGVyQDEKCmR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9hZnRlcl9mb3JANDoKICAgIGZyYW1lX2RpZyAtMwogICAgbGVuCiAgICBmcmFtZV9idXJ5IDAKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDQKCmR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9mb3JfaGVhZGVyQDU6CiAgICBmcmFtZV9kaWcgNAogICAgZnJhbWVfZGlnIDIKICAgIDwKICAgIGJ6IGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudF9hZnRlcl9mb3JAOAogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgNAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgZnJhbWVfZGlnIDAKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgMQogICAgc3dhcAogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDEKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBmcmFtZV9idXJ5IDQKICAgIGIgZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50X2Zvcl9oZWFkZXJANQoKZHluYW1pY19hcnJheV9jb25jYXRfZHluYW1pY19lbGVtZW50X2FmdGVyX2ZvckA4OgogICAgZnJhbWVfZGlnIC00CiAgICBmcmFtZV9kaWcgLTIKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgMQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMAogICAgc3Vic3RyaW5nMwogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgMgogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBjb25jYXQKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5jcmVhdGVBcHBsaWNhdGlvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmNyZWF0ZUFwcGxpY2F0aW9uOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQwOQogICAgLy8gQGFiaW1ldGhvZCh7IG9uQ3JlYXRlOiAncmVxdWlyZScgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cG4gMgogICAgbGVuCiAgICBwdXNoaW50IDMyIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50OFszMl0KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgY292ZXIgMgogICAgbGVuCiAgICBwdXNoaW50IDMyIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50OFszMl0KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDEyCiAgICAvLyBUeG4uc2VuZGVyID09PSBjb250cm9sbGVkQWRkcmVzcy5uYXRpdmUKICAgIHR4biBTZW5kZXIKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDEyLTQxMwogICAgLy8gVHhuLnNlbmRlciA9PT0gY29udHJvbGxlZEFkZHJlc3MubmF0aXZlCiAgICAvLyB8fCBUeG4uc2VuZGVyID09PSBhZG1pbi5uYXRpdmUsCiAgICBibnogY3JlYXRlQXBwbGljYXRpb25fYm9vbF90cnVlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0MTMKICAgIC8vIHx8IFR4bi5zZW5kZXIgPT09IGFkbWluLm5hdGl2ZSwKICAgIHR4biBTZW5kZXIKICAgIGRpZyAyCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQxMi00MTMKICAgIC8vIFR4bi5zZW5kZXIgPT09IGNvbnRyb2xsZWRBZGRyZXNzLm5hdGl2ZQogICAgLy8gfHwgVHhuLnNlbmRlciA9PT0gYWRtaW4ubmF0aXZlLAogICAgYnogY3JlYXRlQXBwbGljYXRpb25fYm9vbF9mYWxzZUA0CgpjcmVhdGVBcHBsaWNhdGlvbl9ib29sX3RydWVAMzoKICAgIGludGNfMSAvLyAxCgpjcmVhdGVBcHBsaWNhdGlvbl9ib29sX21lcmdlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDExLTQxNQogICAgLy8gYXNzZXJ0KAogICAgLy8gICBUeG4uc2VuZGVyID09PSBjb250cm9sbGVkQWRkcmVzcy5uYXRpdmUKICAgIC8vICAgfHwgVHhuLnNlbmRlciA9PT0gYWRtaW4ubmF0aXZlLAogICAgLy8gICBFUlJfU0VOREVSX01VU1RfQkVfQURNSU5fT1JfQ09OVFJPTExFRF9BRERSRVNTCiAgICAvLyApOwogICAgYXNzZXJ0IC8vIHNlbmRlciBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkQWRkcmVzcyBvciBhZG1pbgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQxNgogICAgLy8gYXNzZXJ0KGFkbWluICE9PSBjb250cm9sbGVkQWRkcmVzcyk7CiAgICBkaWcgMQogICAgZHVwCiAgICBkaWcgNAogICAgZHVwCiAgICBjb3ZlciAzCiAgICAhPQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIGFkbWluID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0FkbWluIH0pCiAgICBieXRlY18yIC8vICJhZG1pbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0MTgKICAgIC8vIHRoaXMuYWRtaW4udmFsdWUgPSBhZG1pbi5uYXRpdmU7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQxOQogICAgLy8gdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSA9IGNvbnRyb2xsZWRBZGRyZXNzLm5hdGl2ZSA9PT0gR2xvYmFsLnplcm9BZGRyZXNzID8gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MgOiBjb250cm9sbGVkQWRkcmVzcy5uYXRpdmU7CiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgID09CiAgICBieiBjcmVhdGVBcHBsaWNhdGlvbl90ZXJuYXJ5X2ZhbHNlQDcKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgpjcmVhdGVBcHBsaWNhdGlvbl90ZXJuYXJ5X21lcmdlQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGNvbnRyb2xsZWRBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0NvbnRyb2xsZWRBZGRyZXNzIH0pOwogICAgYnl0ZWNfMCAvLyAiY29udHJvbGxlZF9hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQxOQogICAgLy8gdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSA9IGNvbnRyb2xsZWRBZGRyZXNzLm5hdGl2ZSA9PT0gR2xvYmFsLnplcm9BZGRyZXNzID8gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MgOiBjb250cm9sbGVkQWRkcmVzcy5uYXRpdmU7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI0CiAgICAvLyBlc2Nyb3dGYWN0b3J5ID0gR2xvYmFsU3RhdGU8QXBwbGljYXRpb24+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNFc2Nyb3dGYWN0b3J5IH0pCiAgICBieXRlYyAxOCAvLyAiZXNjcm93X2ZhY3RvcnkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDIwCiAgICAvLyB0aGlzLmVzY3Jvd0ZhY3RvcnkudmFsdWUgPSBlc2Nyb3dGYWN0b3J5OwogICAgZGlnIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjYKICAgIC8vIHNwZW5kaW5nQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNTcGVuZGluZ0FkZHJlc3MgfSkKICAgIGJ5dGVjIDExIC8vICJzcGVuZGluZ19hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQyMQogICAgLy8gdGhpcy5zcGVuZGluZ0FkZHJlc3MudmFsdWUgPSBHbG9iYWwuemVyb0FkZHJlc3M7CiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIGxhc3RVc2VySW50ZXJhY3Rpb24gPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNMYXN0VXNlckludGVyYWN0aW9uIH0pCiAgICBieXRlY18zIC8vICJsYXN0X3VzZXJfaW50ZXJhY3Rpb24iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHRoaXMubGFzdFVzZXJJbnRlcmFjdGlvbi52YWx1ZSA9IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjIKICAgIC8vIGxhc3RDaGFuZ2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNMYXN0Q2hhbmdlIH0pCiAgICBieXRlYyA2IC8vICJsYXN0X2NoYW5nZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0OAogICAgLy8gdGhpcy5sYXN0Q2hhbmdlLnZhbHVlID0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0MDkKICAgIC8vIEBhYmltZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgpjcmVhdGVBcHBsaWNhdGlvbl90ZXJuYXJ5X2ZhbHNlQDc6CiAgICBkaWcgMgogICAgYiBjcmVhdGVBcHBsaWNhdGlvbl90ZXJuYXJ5X21lcmdlQDgKCmNyZWF0ZUFwcGxpY2F0aW9uX2Jvb2xfZmFsc2VANDoKICAgIGludGNfMCAvLyAwCiAgICBiIGNyZWF0ZUFwcGxpY2F0aW9uX2Jvb2xfbWVyZ2VANQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQucmVnaXN0ZXJbcm91dGluZ10oKSAtPiB2b2lkOgpyZWdpc3RlcjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0MzEKICAgIC8vIHJlZ2lzdGVyKGVzY3Jvdzogc3RyaW5nKTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdXRmOFtdKQogICAgZXh0cmFjdCAyIDAKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQzMgogICAgLy8gbGV0IGFwcDogdWludDY0ID0gMAogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0MzMKICAgIC8vIGlmIChlc2Nyb3cgIT09ICcnKSB7CiAgICBieXRlY18xIC8vICIiCiAgICAhPQogICAgYnogcmVnaXN0ZXJfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzcKICAgIC8vIGVzY3Jvd3MgPSBCb3hNYXA8c3RyaW5nLCBFc2Nyb3dJbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4RXNjcm93cyB9KQogICAgYnl0ZWMgNSAvLyAiZSIKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0MzQKICAgIC8vIGFzc2VydCh0aGlzLmVzY3Jvd3MoZXNjcm93KS5leGlzdHMsIEVSUl9FU0NST1dfRE9FU19OT1RfRVhJU1QpCiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGVzY3JvdyBkb2VzIG5vdCBleGlzdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQzNQogICAgLy8gYXBwID0gdGhpcy5lc2Nyb3dzKGVzY3JvdykudmFsdWUuaWQKICAgIGJveF9nZXQKICAgIHBvcAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICBidXJ5IDEKCnJlZ2lzdGVyX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0MzgtNDQ3CiAgICAvLyBhYmlDYWxsPHR5cGVvZiBFc2Nyb3dGYWN0b3J5LnByb3RvdHlwZS5yZWdpc3Rlcj4oewogICAgLy8gICBhcHBJZDogdGhpcy5lc2Nyb3dGYWN0b3J5LnZhbHVlLAogICAgLy8gICBhcmdzOiBbCiAgICAvLyAgICAgaXR4bi5wYXltZW50KHsKICAgIC8vICAgICAgIHJlY2VpdmVyOiB0aGlzLmVzY3Jvd0ZhY3RvcnkudmFsdWUuYWRkcmVzcywKICAgIC8vICAgICAgIGFtb3VudDogQVJDNThXYWxsZXRJRHNCeUFjY291bnRzTWJyCiAgICAvLyAgICAgfSksCiAgICAvLyAgICAgYXBwCiAgICAvLyAgIF0KICAgIC8vIH0pCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDQyCiAgICAvLyByZWNlaXZlcjogdGhpcy5lc2Nyb3dGYWN0b3J5LnZhbHVlLmFkZHJlc3MsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI0CiAgICAvLyBlc2Nyb3dGYWN0b3J5ID0gR2xvYmFsU3RhdGU8QXBwbGljYXRpb24+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNFc2Nyb3dGYWN0b3J5IH0pCiAgICBieXRlYyAxOCAvLyAiZXNjcm93X2ZhY3RvcnkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDQyCiAgICAvLyByZWNlaXZlcjogdGhpcy5lc2Nyb3dGYWN0b3J5LnZhbHVlLmFkZHJlc3MsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZHVwCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDQzCiAgICAvLyBhbW91bnQ6IEFSQzU4V2FsbGV0SURzQnlBY2NvdW50c01icgogICAgcHVzaGludCAxMjEwMCAvLyAxMjEwMAogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NDEtNDQ0CiAgICAvLyBpdHhuLnBheW1lbnQoewogICAgLy8gICByZWNlaXZlcjogdGhpcy5lc2Nyb3dGYWN0b3J5LnZhbHVlLmFkZHJlc3MsCiAgICAvLyAgIGFtb3VudDogQVJDNThXYWxsZXRJRHNCeUFjY291bnRzTWJyCiAgICAvLyB9KSwKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0MzgtNDQ3CiAgICAvLyBhYmlDYWxsPHR5cGVvZiBFc2Nyb3dGYWN0b3J5LnByb3RvdHlwZS5yZWdpc3Rlcj4oewogICAgLy8gICBhcHBJZDogdGhpcy5lc2Nyb3dGYWN0b3J5LnZhbHVlLAogICAgLy8gICBhcmdzOiBbCiAgICAvLyAgICAgaXR4bi5wYXltZW50KHsKICAgIC8vICAgICAgIHJlY2VpdmVyOiB0aGlzLmVzY3Jvd0ZhY3RvcnkudmFsdWUuYWRkcmVzcywKICAgIC8vICAgICAgIGFtb3VudDogQVJDNThXYWxsZXRJRHNCeUFjY291bnRzTWJyCiAgICAvLyAgICAgfSksCiAgICAvLyAgICAgYXBwCiAgICAvLyAgIF0KICAgIC8vIH0pCiAgICBpdHhuX25leHQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NDUKICAgIC8vIGFwcAogICAgZGlnIDEKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0MzgtNDQ3CiAgICAvLyBhYmlDYWxsPHR5cGVvZiBFc2Nyb3dGYWN0b3J5LnByb3RvdHlwZS5yZWdpc3Rlcj4oewogICAgLy8gICBhcHBJZDogdGhpcy5lc2Nyb3dGYWN0b3J5LnZhbHVlLAogICAgLy8gICBhcmdzOiBbCiAgICAvLyAgICAgaXR4bi5wYXltZW50KHsKICAgIC8vICAgICAgIHJlY2VpdmVyOiB0aGlzLmVzY3Jvd0ZhY3RvcnkudmFsdWUuYWRkcmVzcywKICAgIC8vICAgICAgIGFtb3VudDogQVJDNThXYWxsZXRJRHNCeUFjY291bnRzTWJyCiAgICAvLyAgICAgfSksCiAgICAvLyAgICAgYXBwCiAgICAvLyAgIF0KICAgIC8vIH0pCiAgICBwdXNoYnl0ZXMgMHg2MDdlNzA0NiAvLyBtZXRob2QgInJlZ2lzdGVyKHBheSx1aW50NjQpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQzMQogICAgLy8gcmVnaXN0ZXIoZXNjcm93OiBzdHJpbmcpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X2NoYW5nZUFkbWluW3JvdXRpbmddKCkgLT4gdm9pZDoKYXJjNThfY2hhbmdlQWRtaW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDU1CiAgICAvLyBhcmM1OF9jaGFuZ2VBZG1pbihuZXdBZG1pbjogQWRkcmVzcyk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ4WzMyXQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ1NgogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuYWRtaW4udmFsdWUsIEVSUl9PTkxZX0FETUlOX0NBTl9DSEFOR0VfQURNSU4pOwogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNgogICAgLy8gYWRtaW4gPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQWRtaW4gfSkKICAgIGJ5dGVjXzIgLy8gImFkbWluIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ1NgogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuYWRtaW4udmFsdWUsIEVSUl9PTkxZX0FETUlOX0NBTl9DSEFOR0VfQURNSU4pOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gb25seSBhZG1pbiBjYW4gY2hhbmdlIHRoZSBhZG1pbiBhY2NvdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIGFkbWluID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0FkbWluIH0pCiAgICBieXRlY18yIC8vICJhZG1pbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NTcKICAgIC8vIHRoaXMuYWRtaW4udmFsdWUgPSBuZXdBZG1pbi5uYXRpdmU7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyBsYXN0VXNlckludGVyYWN0aW9uID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzTGFzdFVzZXJJbnRlcmFjdGlvbiB9KQogICAgYnl0ZWNfMyAvLyAibGFzdF91c2VyX2ludGVyYWN0aW9uIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyB0aGlzLmxhc3RVc2VySW50ZXJhY3Rpb24udmFsdWUgPSBHbG9iYWwubGF0ZXN0VGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIyCiAgICAvLyBsYXN0Q2hhbmdlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzTGFzdENoYW5nZSB9KQogICAgYnl0ZWMgNiAvLyAibGFzdF9jaGFuZ2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIHRoaXMubGFzdENoYW5nZS52YWx1ZSA9IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDU1CiAgICAvLyBhcmM1OF9jaGFuZ2VBZG1pbihuZXdBZG1pbjogQWRkcmVzcyk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcGx1Z2luQ2hhbmdlQWRtaW5bcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF9wbHVnaW5DaGFuZ2VBZG1pbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NzAKICAgIC8vIGFyYzU4X3BsdWdpbkNoYW5nZUFkbWluKG5ld0FkbWluOiBBZGRyZXNzKTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDhbMzJdCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDcxCiAgICAvLyBjb25zdCBrZXkgPSBjbG9uZSh0aGlzLmN1cnJlbnRQbHVnaW4udmFsdWUpCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI4CiAgICAvLyBjdXJyZW50UGx1Z2luID0gR2xvYmFsU3RhdGU8UGx1Z2luS2V5Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ3VycmVudFBsdWdpbiB9KQogICAgYnl0ZWMgMTkgLy8gImN1cnJlbnRfcGx1Z2luIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ3MQogICAgLy8gY29uc3Qga2V5ID0gY2xvbmUodGhpcy5jdXJyZW50UGx1Z2luLnZhbHVlKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NzIKICAgIC8vIGNvbnN0IHsgcGx1Z2luLCBlc2Nyb3cgfSA9IGtleQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIGRpZyAxCiAgICBwdXNoaW50IDQwIC8vIDQwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDIKICAgIGxlbgogICAgZGlnIDMKICAgIGNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDc0CiAgICAvLyBhc3NlcnQoZXNjcm93ID09PSAnJywgRVJSX0FETUlOX1BMVUdJTlNfQ0FOTk9UX1VTRV9FU0NST1dTKTsKICAgIGJ5dGVjXzEgLy8gIiIKICAgID09CiAgICBhc3NlcnQgLy8gYWRtaW4gcGx1Z2lucyBjYW5ub3QgdXNlIGVzY3Jvd3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NzUKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSBBcHBsaWNhdGlvbihwbHVnaW4pLmFkZHJlc3MsIEVSUl9TRU5ERVJfTVVTVF9CRV9BRE1JTl9QTFVHSU4pOwogICAgdHhuIFNlbmRlcgogICAgZGlnIDEKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gc2VuZGVyIG11c3QgYmUgYWRtaW4gcGx1Z2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDc3CiAgICAvLyB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLmF1dGhBZGRyZXNzID09PSBBcHBsaWNhdGlvbihwbHVnaW4pLmFkZHJlc3MsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBjb250cm9sbGVkQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNDb250cm9sbGVkQWRkcmVzcyB9KTsKICAgIGJ5dGVjXzAgLy8gImNvbnRyb2xsZWRfYWRkcmVzcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NzcKICAgIC8vIHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUuYXV0aEFkZHJlc3MgPT09IEFwcGxpY2F0aW9uKHBsdWdpbikuYWRkcmVzcywKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBhY2N0X3BhcmFtc19nZXQgQWNjdEF1dGhBZGRyCiAgICBhc3NlcnQgLy8gYWNjb3VudCBmdW5kZWQKICAgIHN3YXAKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDc2LTQ3OQogICAgLy8gYXNzZXJ0KAogICAgLy8gICB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLmF1dGhBZGRyZXNzID09PSBBcHBsaWNhdGlvbihwbHVnaW4pLmFkZHJlc3MsCiAgICAvLyAgICdUaGlzIHBsdWdpbiBpcyBub3QgaW4gY29udHJvbCBvZiB0aGUgYWNjb3VudCcKICAgIC8vICk7CiAgICBhc3NlcnQgLy8gVGhpcyBwbHVnaW4gaXMgbm90IGluIGNvbnRyb2wgb2YgdGhlIGFjY291bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozMwogICAgLy8gcGx1Z2lucyA9IEJveE1hcDxQbHVnaW5LZXksIFBsdWdpbkluZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhQbHVnaW5zIH0pOwogICAgYnl0ZWMgNCAvLyAicCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDgyCiAgICAvLyB0aGlzLnBsdWdpbnMoa2V5KS5leGlzdHMgJiYgdGhpcy5wbHVnaW5zKGtleSkudmFsdWUuYWRtaW4sCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJ6IGFyYzU4X3BsdWdpbkNoYW5nZUFkbWluX2Jvb2xfZmFsc2VANAogICAgZHVwCiAgICBwdXNoaW50IDI3IC8vIDI3CiAgICBpbnRjXzEgLy8gMQogICAgYm94X2V4dHJhY3QKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIGJ6IGFyYzU4X3BsdWdpbkNoYW5nZUFkbWluX2Jvb2xfZmFsc2VANAogICAgaW50Y18xIC8vIDEKCmFyYzU4X3BsdWdpbkNoYW5nZUFkbWluX2Jvb2xfbWVyZ2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0ODEtNDg0CiAgICAvLyBhc3NlcnQoCiAgICAvLyAgIHRoaXMucGx1Z2lucyhrZXkpLmV4aXN0cyAmJiB0aGlzLnBsdWdpbnMoa2V5KS52YWx1ZS5hZG1pbiwKICAgIC8vICAgJ1RoaXMgcGx1Z2luIGRvZXMgbm90IGhhdmUgYWRtaW4gcHJpdmlsZWdlcycKICAgIC8vICk7CiAgICBhc3NlcnQgLy8gVGhpcyBwbHVnaW4gZG9lcyBub3QgaGF2ZSBhZG1pbiBwcml2aWxlZ2VzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIGFkbWluID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0FkbWluIH0pCiAgICBieXRlY18yIC8vICJhZG1pbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0ODYKICAgIC8vIHRoaXMuYWRtaW4udmFsdWUgPSBuZXdBZG1pbi5uYXRpdmU7CiAgICBkaWcgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0ODcKICAgIC8vIGlmICh0aGlzLnBsdWdpbnMoa2V5KS52YWx1ZS5kZWxlZ2F0aW9uVHlwZSA9PT0gRGVsZWdhdGlvblR5cGVTZWxmKSB7CiAgICBkdXAKICAgIGludGNfMyAvLyA4CiAgICBpbnRjXzEgLy8gMQogICAgYm94X2V4dHJhY3QKICAgIGJ5dGVjIDE1IC8vIDB4MDEKICAgID09CiAgICBieiBhcmM1OF9wbHVnaW5DaGFuZ2VBZG1pbl9hZnRlcl9pZl9lbHNlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gbGFzdFVzZXJJbnRlcmFjdGlvbiA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0xhc3RVc2VySW50ZXJhY3Rpb24gfSkKICAgIGJ5dGVjXzMgLy8gImxhc3RfdXNlcl9pbnRlcmFjdGlvbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NAogICAgLy8gdGhpcy5sYXN0VXNlckludGVyYWN0aW9uLnZhbHVlID0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgYXBwX2dsb2JhbF9wdXQKCmFyYzU4X3BsdWdpbkNoYW5nZUFkbWluX2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMgogICAgLy8gbGFzdENoYW5nZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0xhc3RDaGFuZ2UgfSkKICAgIGJ5dGVjIDYgLy8gImxhc3RfY2hhbmdlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyB0aGlzLmxhc3RDaGFuZ2UudmFsdWUgPSBHbG9iYWwubGF0ZXN0VGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ3MAogICAgLy8gYXJjNThfcGx1Z2luQ2hhbmdlQWRtaW4obmV3QWRtaW46IEFkZHJlc3MpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmFyYzU4X3BsdWdpbkNoYW5nZUFkbWluX2Jvb2xfZmFsc2VANDoKICAgIGludGNfMCAvLyAwCiAgICBiIGFyYzU4X3BsdWdpbkNoYW5nZUFkbWluX2Jvb2xfbWVyZ2VANQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfZ2V0QWRtaW5bcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF9nZXRBZG1pbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0OTkKICAgIC8vIHJldHVybiBuZXcgQWRkcmVzcyh0aGlzLmFkbWluLnZhbHVlKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIGFkbWluID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0FkbWluIH0pCiAgICBieXRlY18yIC8vICJhZG1pbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0OTkKICAgIC8vIHJldHVybiBuZXcgQWRkcmVzcyh0aGlzLmFkbWluLnZhbHVlKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDk3CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGJ5dGVjIDcgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3ZlcmlmeUF1dGhBZGRyZXNzW3JvdXRpbmddKCkgLT4gdm9pZDoKYXJjNThfdmVyaWZ5QXV0aEFkZHJlc3M6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTA2CiAgICAvLyBhc3NlcnQodGhpcy5zcGVuZGluZ0FkZHJlc3MudmFsdWUuYXV0aEFkZHJlc3MgPT09IHRoaXMuZ2V0QXV0aEFkZHJlc3MoKSk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI2CiAgICAvLyBzcGVuZGluZ0FkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzU3BlbmRpbmdBZGRyZXNzIH0pCiAgICBieXRlYyAxMSAvLyAic3BlbmRpbmdfYWRkcmVzcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1MDYKICAgIC8vIGFzc2VydCh0aGlzLnNwZW5kaW5nQWRkcmVzcy52YWx1ZS5hdXRoQWRkcmVzcyA9PT0gdGhpcy5nZXRBdXRoQWRkcmVzcygpKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBkdXAKICAgIGFjY3RfcGFyYW1zX2dldCBBY2N0QXV0aEFkZHIKICAgIHN3YXAKICAgIGNvdmVyIDIKICAgIGFzc2VydCAvLyBhY2NvdW50IGZ1bmRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM5NwogICAgLy8gdGhpcy5zcGVuZGluZ0FkZHJlc3MudmFsdWUgPT09IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGNvbnRyb2xsZWRBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0NvbnRyb2xsZWRBZGRyZXNzIH0pOwogICAgYnl0ZWNfMCAvLyAiY29udHJvbGxlZF9hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM5NwogICAgLy8gdGhpcy5zcGVuZGluZ0FkZHJlc3MudmFsdWUgPT09IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM5Ny0zOTgKICAgIC8vIHRoaXMuc3BlbmRpbmdBZGRyZXNzLnZhbHVlID09PSB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlCiAgICAvLyAmJiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgYnogYXJjNThfdmVyaWZ5QXV0aEFkZHJlc3NfdGVybmFyeV9mYWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Mzk4CiAgICAvLyAmJiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29udHJvbGxlZEFkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ29udHJvbGxlZEFkZHJlc3MgfSk7CiAgICBieXRlY18wIC8vICJjb250cm9sbGVkX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Mzk4CiAgICAvLyAmJiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM5Ny0zOTgKICAgIC8vIHRoaXMuc3BlbmRpbmdBZGRyZXNzLnZhbHVlID09PSB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlCiAgICAvLyAmJiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgYnogYXJjNThfdmVyaWZ5QXV0aEFkZHJlc3NfdGVybmFyeV9mYWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Mzk5CiAgICAvLyApID8gR2xvYmFsLnplcm9BZGRyZXNzIDogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwoKYXJjNThfdmVyaWZ5QXV0aEFkZHJlc3NfdGVybmFyeV9tZXJnZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjUwNgogICAgLy8gYXNzZXJ0KHRoaXMuc3BlbmRpbmdBZGRyZXNzLnZhbHVlLmF1dGhBZGRyZXNzID09PSB0aGlzLmdldEF1dGhBZGRyZXNzKCkpOwogICAgZGlnIDEKICAgID09CiAgICBhc3NlcnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNgogICAgLy8gc3BlbmRpbmdBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c1NwZW5kaW5nQWRkcmVzcyB9KQogICAgYnl0ZWMgMTEgLy8gInNwZW5kaW5nX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTA3CiAgICAvLyB0aGlzLnNwZW5kaW5nQWRkcmVzcy52YWx1ZSA9IEdsb2JhbC56ZXJvQWRkcmVzcwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjUwOAogICAgLy8gdGhpcy5jdXJyZW50UGx1Z2luLnZhbHVlID0geyBwbHVnaW46IDAsIGNhbGxlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsIGVzY3JvdzogJycgfQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGludGNfMCAvLyAwCiAgICBpdG9iCiAgICBzd2FwCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDAwMmEwMDAwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyOAogICAgLy8gY3VycmVudFBsdWdpbiA9IEdsb2JhbFN0YXRlPFBsdWdpbktleT4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0N1cnJlbnRQbHVnaW4gfSkKICAgIGJ5dGVjIDE5IC8vICJjdXJyZW50X3BsdWdpbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1MDgKICAgIC8vIHRoaXMuY3VycmVudFBsdWdpbi52YWx1ZSA9IHsgcGx1Z2luOiAwLCBjYWxsZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLCBlc2Nyb3c6ICcnIH0KICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzAKICAgIC8vIHJla2V5SW5kZXggPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwLCBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c1Jla2V5SW5kZXggfSkKICAgIGJ5dGVjIDE3IC8vICJyZWtleV9pbmRleCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1MDkKICAgIC8vIHRoaXMucmVrZXlJbmRleC52YWx1ZSA9IDAKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjUwNQogICAgLy8gYXJjNThfdmVyaWZ5QXV0aEFkZHJlc3MoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgphcmM1OF92ZXJpZnlBdXRoQWRkcmVzc190ZXJuYXJ5X2ZhbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Mzk5CiAgICAvLyApID8gR2xvYmFsLnplcm9BZGRyZXNzIDogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBiIGFyYzU4X3ZlcmlmeUF1dGhBZGRyZXNzX3Rlcm5hcnlfbWVyZ2VANQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmFyYzU4X3Jla2V5VG86CiAgICBieXRlY18xIC8vICIiCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1MTgKICAgIC8vIGFyYzU4X3Jla2V5VG8oYWRkcmVzczogQWRkcmVzcywgZmxhc2g6IGJvb2xlYW4pOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDMyIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50OFszMl0KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYm9vbDgKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1MTkKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSB0aGlzLmFkbWluLnZhbHVlLCBFUlJfQURNSU5fT05MWSk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE2CiAgICAvLyBhZG1pbiA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNBZG1pbiB9KQogICAgYnl0ZWNfMiAvLyAiYWRtaW4iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTE5CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSwgRVJSX0FETUlOX09OTFkpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gYWRtaW4gb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjUyMS01MjgKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcjogYWRkcmVzcy5uYXRpdmUsCiAgICAvLyAgICAgcmVrZXlUbzogYWRkcmVzcy5uYXRpdmUsCiAgICAvLyAgICAgbm90ZTogJ3Jla2V5aW5nIGFic3RyYWN0ZWQgYWNjb3VudCcKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjUyMwogICAgLy8gc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29udHJvbGxlZEFkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ29udHJvbGxlZEFkZHJlc3MgfSk7CiAgICBieXRlY18wIC8vICJjb250cm9sbGVkX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTIzCiAgICAvLyBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjUyNgogICAgLy8gbm90ZTogJ3Jla2V5aW5nIGFic3RyYWN0ZWQgYWNjb3VudCcKICAgIHB1c2hieXRlcyAicmVrZXlpbmcgYWJzdHJhY3RlZCBhY2NvdW50IgogICAgaXR4bl9maWVsZCBOb3RlCiAgICBkaWcgMgogICAgaXR4bl9maWVsZCBSZWtleVRvCiAgICB1bmNvdmVyIDIKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTIxLTUyNwogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIHJlY2VpdmVyOiBhZGRyZXNzLm5hdGl2ZSwKICAgIC8vICAgICByZWtleVRvOiBhZGRyZXNzLm5hdGl2ZSwKICAgIC8vICAgICBub3RlOiAncmVrZXlpbmcgYWJzdHJhY3RlZCBhY2NvdW50JwogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjUyMS01MjgKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcjogYWRkcmVzcy5uYXRpdmUsCiAgICAvLyAgICAgcmVrZXlUbzogYWRkcmVzcy5uYXRpdmUsCiAgICAvLyAgICAgbm90ZTogJ3Jla2V5aW5nIGFic3RyYWN0ZWQgYWNjb3VudCcKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1MzAKICAgIC8vIGlmIChmbGFzaCkgdGhpcy5hc3NlcnRSZWtleXNCYWNrKCk7CiAgICBieiBhcmM1OF9yZWtleVRvX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE2MAogICAgLy8gbGV0IHJla2V5c0JhY2sgPSBmYWxzZTsKICAgIGludGNfMCAvLyAwCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNjEKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IChUeG4uZ3JvdXBJbmRleCArIDEpOyBpIDwgR2xvYmFsLmdyb3VwU2l6ZTsgaSArPSAxKSB7CiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgMgoKYXJjNThfcmVrZXlUb193aGlsZV90b3BANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNjEKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IChUeG4uZ3JvdXBJbmRleCArIDEpOyBpIDwgR2xvYmFsLmdyb3VwU2l6ZTsgaSArPSAxKSB7CiAgICBkaWcgMQogICAgZ2xvYmFsIEdyb3VwU2l6ZQogICAgPAogICAgYnogYXJjNThfcmVrZXlUb19ibG9ja0AxMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE2NAogICAgLy8gaWYgKHRoaXMudHhuUmVrZXlzQmFjayh0eG4pKSB7CiAgICBkaWcgMQogICAgY2FsbHN1YiB0eG5SZWtleXNCYWNrCiAgICBieiBhcmM1OF9yZWtleVRvX2FmdGVyX2lmX2Vsc2VAOQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE2NQogICAgLy8gcmVrZXlzQmFjayA9IHRydWU7CiAgICBpbnRjXzEgLy8gMQogICAgYnVyeSAxCgphcmM1OF9yZWtleVRvX2Jsb2NrQDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE3MAogICAgLy8gYXNzZXJ0KHJla2V5c0JhY2ssIEVSUl9NSVNTSU5HX1JFS0VZX0JBQ0spOwogICAgZHVwCiAgICBhc3NlcnQgLy8gbWlzc2luZyByZWtleSBiYWNrCgphcmM1OF9yZWtleVRvX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gbGFzdFVzZXJJbnRlcmFjdGlvbiA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0xhc3RVc2VySW50ZXJhY3Rpb24gfSkKICAgIGJ5dGVjXzMgLy8gImxhc3RfdXNlcl9pbnRlcmFjdGlvbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NAogICAgLy8gdGhpcy5sYXN0VXNlckludGVyYWN0aW9uLnZhbHVlID0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1MTgKICAgIC8vIGFyYzU4X3Jla2V5VG8oYWRkcmVzczogQWRkcmVzcywgZmxhc2g6IGJvb2xlYW4pOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmFyYzU4X3Jla2V5VG9fYWZ0ZXJfaWZfZWxzZUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE2MQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gKFR4bi5ncm91cEluZGV4ICsgMSk7IGkgPCBHbG9iYWwuZ3JvdXBTaXplOyBpICs9IDEpIHsKICAgIGRpZyAxCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAyCiAgICBiIGFyYzU4X3Jla2V5VG9fd2hpbGVfdG9wQDYKCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X2NhbkNhbGxbcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF9jYW5DYWxsOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU0NAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBib29sOAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBjb3ZlciAyCiAgICBsZW4KICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ4WzMyXQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICBzd2FwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGxlbgogICAgcHVzaGludCA0IC8vIDQKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ4WzRdCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTUyCiAgICAvLyBpZiAoZ2xvYmFsKSB7CiAgICBieiBhcmM1OF9jYW5DYWxsX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU1MwogICAgLy8gdGhpcy5wbHVnaW5DYWxsQWxsb3dlZChwbHVnaW4sIEdsb2JhbC56ZXJvQWRkcmVzcywgZXNjcm93LCBtZXRob2QpOwogICAgZGlnIDMKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgZGlnIDMKICAgIGRpZyAzCiAgICBjYWxsc3ViIHBsdWdpbkNhbGxBbGxvd2VkCiAgICBwb3AKCmFyYzU4X2NhbkNhbGxfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU1NQogICAgLy8gcmV0dXJuIHRoaXMucGx1Z2luQ2FsbEFsbG93ZWQocGx1Z2luLCBhZGRyZXNzLm5hdGl2ZSwgZXNjcm93LCBtZXRob2QpOwogICAgZGlnIDMKICAgIGRpZyAzCiAgICBkaWcgMwogICAgZGlnIDMKICAgIGNhbGxzdWIgcGx1Z2luQ2FsbEFsbG93ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1NDQKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgYnl0ZWMgOSAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjIDcgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5bcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF9yZWtleVRvUGx1Z2luOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU2Ny01NzMKICAgIC8vIGFyYzU4X3Jla2V5VG9QbHVnaW4oCiAgICAvLyAgIHBsdWdpbjogdWludDY0LAogICAgLy8gICBnbG9iYWw6IGJvb2xlYW4sCiAgICAvLyAgIGVzY3Jvdzogc3RyaW5nLAogICAgLy8gICBtZXRob2RPZmZzZXRzOiB1aW50NjRbXSwKICAgIC8vICAgZnVuZHNSZXF1ZXN0OiBGdW5kc1JlcXVlc3RbXQogICAgLy8gKTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBib29sOAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3VpbnQ2NFtdKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIHB1c2hpbnQgMTYgLy8gMTYKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuKyh1aW50NjQsdWludDY0KVtdKQogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW4KICAgIHBvcG4gMgogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb05hbWVkUGx1Z2luW3JvdXRpbmddKCkgLT4gdm9pZDoKYXJjNThfcmVrZXlUb05hbWVkUGx1Z2luOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjYxOS02MjQKICAgIC8vIGFyYzU4X3Jla2V5VG9OYW1lZFBsdWdpbigKICAgIC8vICAgbmFtZTogc3RyaW5nLAogICAgLy8gICBnbG9iYWw6IGJvb2xlYW4sCiAgICAvLyAgIGVzY3Jvdzogc3RyaW5nLAogICAgLy8gICBtZXRob2RPZmZzZXRzOiB1aW50NjRbXSwKICAgIC8vICAgZnVuZHNSZXF1ZXN0OiBGdW5kc1JlcXVlc3RbXSk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGJvb2w4CiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdXRmOFtdKQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzMgLy8gOAogICAgKgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdWludDY0W10pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgcHVzaGludCAxNiAvLyAxNgogICAgKgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rKHVpbnQ2NCx1aW50NjQpW10pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzUKICAgIC8vIG5hbWVkUGx1Z2lucyA9IEJveE1hcDxzdHJpbmcsIFBsdWdpbktleT4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeE5hbWVkUGx1Z2lucyB9KTsKICAgIGJ5dGVjIDE2IC8vICJuIgogICAgdW5jb3ZlciA1CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2MjYKICAgIC8vIHRoaXMubmFtZWRQbHVnaW5zKG5hbWUpLnZhbHVlLnBsdWdpbiwKICAgIGludGNfMCAvLyAwCiAgICBpbnRjXzMgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2MjUtNjMxCiAgICAvLyB0aGlzLmFyYzU4X3Jla2V5VG9QbHVnaW4oCiAgICAvLyAgIHRoaXMubmFtZWRQbHVnaW5zKG5hbWUpLnZhbHVlLnBsdWdpbiwKICAgIC8vICAgZ2xvYmFsLAogICAgLy8gICBlc2Nyb3csCiAgICAvLyAgIG1ldGhvZE9mZnNldHMsCiAgICAvLyAgIGZ1bmRzUmVxdWVzdAogICAgLy8gKTsKICAgIGNvdmVyIDQKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luCiAgICBwb3BuIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2MTktNjI0CiAgICAvLyBhcmM1OF9yZWtleVRvTmFtZWRQbHVnaW4oCiAgICAvLyAgIG5hbWU6IHN0cmluZywKICAgIC8vICAgZ2xvYmFsOiBib29sZWFuLAogICAgLy8gICBlc2Nyb3c6IHN0cmluZywKICAgIC8vICAgbWV0aG9kT2Zmc2V0czogdWludDY0W10sCiAgICAvLyAgIGZ1bmRzUmVxdWVzdDogRnVuZHNSZXF1ZXN0W10pOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X2FkZFBsdWdpbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmFyYzU4X2FkZFBsdWdpbjoKICAgIGludGNfMCAvLyAwCiAgICBkdXBuIDMKICAgIGJ5dGVjXzEgLy8gIiIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY0OC02NjAKICAgIC8vIGFyYzU4X2FkZFBsdWdpbigKICAgIC8vICAgcGx1Z2luOiB1aW50NjQsCiAgICAvLyAgIGNhbGxlcjogQWRkcmVzcywKICAgIC8vICAgZXNjcm93OiBzdHJpbmcsCiAgICAvLyAgIGFkbWluOiBib29sZWFuLAogICAgLy8gICBkZWxlZ2F0aW9uVHlwZTogVWludDgsCiAgICAvLyAgIGxhc3RWYWxpZDogdWludDY0LAogICAgLy8gICBjb29sZG93bjogdWludDY0LAogICAgLy8gICBtZXRob2RzOiBNZXRob2RSZXN0cmljdGlvbltdLAogICAgLy8gICB1c2VSb3VuZHM6IGJvb2xlYW4sCiAgICAvLyAgIHVzZUV4ZWN1dGlvbktleTogYm9vbGVhbiwKICAgIC8vICAgZGVmYXVsdFRvRXNjcm93OiBib29sZWFuCiAgICAvLyApOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDhbMzJdCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdXRmOFtdKQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYm9vbDgKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDUKICAgIGR1cG4gMgogICAgbGVuCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICBzd2FwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA3CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgc3dhcAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgOAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwCiAgICBjb3ZlciAzCiAgICBwdXNoaW50IDEyIC8vIDEyCiAgICAqCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgc3dhcAogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuKyh1aW50OFs0XSx1aW50NjQpW10pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA5CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGJvb2w4CiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBzd2FwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxMAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBib29sOAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgc3dhcAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYm9vbDgKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2NjEKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSB0aGlzLmFkbWluLnZhbHVlLCBFUlJfQURNSU5fT05MWSk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE2CiAgICAvLyBhZG1pbiA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNBZG1pbiB9KQogICAgYnl0ZWNfMiAvLyAiYWRtaW4iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NjYxCiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSwgRVJSX0FETUlOX09OTFkpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gYWRtaW4gb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY2NAogICAgLy8gZGVsZWdhdGlvblR5cGUgPT09IERlbGVnYXRpb25UeXBlU2VsZiAmJgogICAgYnl0ZWMgMTUgLy8gMHgwMQogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2NjQtNjY1CiAgICAvLyBkZWxlZ2F0aW9uVHlwZSA9PT0gRGVsZWdhdGlvblR5cGVTZWxmICYmCiAgICAvLyBjYWxsZXIubmF0aXZlID09PSBHbG9iYWwuemVyb0FkZHJlc3MKICAgIGJ6IGFyYzU4X2FkZFBsdWdpbl9ib29sX2ZhbHNlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2NjUKICAgIC8vIGNhbGxlci5uYXRpdmUgPT09IEdsb2JhbC56ZXJvQWRkcmVzcwogICAgZGlnIDEwCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NjY0LTY2NQogICAgLy8gZGVsZWdhdGlvblR5cGUgPT09IERlbGVnYXRpb25UeXBlU2VsZiAmJgogICAgLy8gY2FsbGVyLm5hdGl2ZSA9PT0gR2xvYmFsLnplcm9BZGRyZXNzCiAgICBieiBhcmM1OF9hZGRQbHVnaW5fYm9vbF9mYWxzZUA0CiAgICBpbnRjXzEgLy8gMQoKYXJjNThfYWRkUGx1Z2luX2Jvb2xfbWVyZ2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2NjMtNjY2CiAgICAvLyAhKAogICAgLy8gICBkZWxlZ2F0aW9uVHlwZSA9PT0gRGVsZWdhdGlvblR5cGVTZWxmICYmCiAgICAvLyAgIGNhbGxlci5uYXRpdmUgPT09IEdsb2JhbC56ZXJvQWRkcmVzcwogICAgLy8gKSwKICAgICEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2NjItNjY4CiAgICAvLyBhc3NlcnQoCiAgICAvLyAgICEoCiAgICAvLyAgICAgZGVsZWdhdGlvblR5cGUgPT09IERlbGVnYXRpb25UeXBlU2VsZiAmJgogICAgLy8gICAgIGNhbGxlci5uYXRpdmUgPT09IEdsb2JhbC56ZXJvQWRkcmVzcwogICAgLy8gICApLAogICAgLy8gICBFUlJfWkVST19BRERSRVNTX0RFTEVHQVRJT05fVFlQRQogICAgLy8gKQogICAgYXNzZXJ0IC8vIGRlbGVnYXRpb24gdHlwZSBtdXN0IG5vdCBiZSBzZWxmIGZvciBnbG9iYWwgcGx1Z2lucwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY3MS02NzIKICAgIC8vIHVzZUV4ZWN1dGlvbktleSAmJgogICAgLy8gY2FsbGVyLm5hdGl2ZSAhPT0gR2xvYmFsLnplcm9BZGRyZXNzCiAgICBkaWcgMQogICAgYnogYXJjNThfYWRkUGx1Z2luX2Jvb2xfZmFsc2VAOAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY3MgogICAgLy8gY2FsbGVyLm5hdGl2ZSAhPT0gR2xvYmFsLnplcm9BZGRyZXNzCiAgICBkaWcgMTAKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgIT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2NzEtNjcyCiAgICAvLyB1c2VFeGVjdXRpb25LZXkgJiYKICAgIC8vIGNhbGxlci5uYXRpdmUgIT09IEdsb2JhbC56ZXJvQWRkcmVzcwogICAgYnogYXJjNThfYWRkUGx1Z2luX2Jvb2xfZmFsc2VAOAogICAgaW50Y18xIC8vIDEKCmFyYzU4X2FkZFBsdWdpbl9ib29sX21lcmdlQDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NjcwLTY3MwogICAgLy8gISgKICAgIC8vICAgdXNlRXhlY3V0aW9uS2V5ICYmCiAgICAvLyAgIGNhbGxlci5uYXRpdmUgIT09IEdsb2JhbC56ZXJvQWRkcmVzcwogICAgLy8gKSwKICAgICEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2NjktNjc1CiAgICAvLyBhc3NlcnQoCiAgICAvLyAgICEoCiAgICAvLyAgICAgdXNlRXhlY3V0aW9uS2V5ICYmCiAgICAvLyAgICAgY2FsbGVyLm5hdGl2ZSAhPT0gR2xvYmFsLnplcm9BZGRyZXNzCiAgICAvLyAgICksCiAgICAvLyAgIEVSUl9VU0lOR19FWEVDVVRJT05fS0VZX1JFUVVJUkVTX0dMT0JBTAogICAgLy8gKQogICAgYXNzZXJ0IC8vIHVzaW5nIGV4ZWN1dGlvbiBrZXkgcmVxdWlyZXMgZ2xvYmFsIHBsdWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY3OAogICAgLy8gaWYgKGRlZmF1bHRUb0VzY3JvdykgewogICAgZHVwCiAgICBibnogYXJjNThfYWRkUGx1Z2luX2lmX2JvZHlAMTAKICAgIGRpZyA5CiAgICBidXJ5IDE3CgphcmM1OF9hZGRQbHVnaW5fYWZ0ZXJfaWZfZWxzZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2ODMKICAgIC8vIGNvbnN0IGtleTogUGx1Z2luS2V5ID0geyBwbHVnaW4sIGNhbGxlcjogY2FsbGVyLm5hdGl2ZSwgZXNjcm93OiBlc2Nyb3dLZXkgfQogICAgZGlnIDExCiAgICBpdG9iCiAgICBkaWcgMTEKICAgIGNvbmNhdAogICAgZGlnIDE3CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgYnl0ZWMgMTIgLy8gMHgwMDJhCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnVyeSAxNgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY4NQogICAgLy8gbGV0IG1ldGhvZEluZm9zOiBNZXRob2RJbmZvW10gPSBbXQogICAgaW50Y18wIC8vIDAKICAgIGl0b2IKICAgIGJ1cnkgMTgKICAgIGJ5dGVjIDEwIC8vIDB4MDAwMAogICAgYnVyeSAxNQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY4NgogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IG1ldGhvZHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMCAvLyAwCiAgICBidXJ5IDEzCgphcmM1OF9hZGRQbHVnaW5fd2hpbGVfdG9wQDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY4NgogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IG1ldGhvZHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGRpZyAxMgogICAgZGlnIDQKICAgIDwKICAgIGJ6IGFyYzU4X2FkZFBsdWdpbl9hZnRlcl93aGlsZUAxNAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY4NwogICAgLy8gbWV0aG9kSW5mb3MucHVzaCh7IC4uLm1ldGhvZHNbaV0sIGxhc3RDYWxsZWQ6IDAgfSkKICAgIGRpZyA0CiAgICBleHRyYWN0IDIgMAogICAgZGlnIDEzCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIHB1c2hpbnQgMTIgLy8gMTIKICAgICoKICAgIHB1c2hpbnQgMTIgLy8gMTIKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZHVwCiAgICBleHRyYWN0IDAgNAogICAgc3dhcAogICAgZXh0cmFjdCA0IDgKICAgIGRpZyAxCiAgICBsZW4KICAgIHB1c2hpbnQgNCAvLyA0CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgc2l6ZQogICAgY29uY2F0CiAgICBkaWcgMTkKICAgIGNvbmNhdAogICAgZGlnIDE2CiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgY29uY2F0IC8vIG9uIGVycm9yOiBtYXggYXJyYXkgbGVuZ3RoIGV4Y2VlZGVkCiAgICBzd2FwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgcmVwbGFjZTIgMAogICAgYnVyeSAxNgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY4NgogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IG1ldGhvZHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDEzCiAgICBiIGFyYzU4X2FkZFBsdWdpbl93aGlsZV90b3BAMTIKCmFyYzU4X2FkZFBsdWdpbl9hZnRlcl93aGlsZUAxNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2OTAKICAgIC8vIGNvbnN0IGVwb2NoUmVmID0gdXNlUm91bmRzID8gR2xvYmFsLnJvdW5kIDogR2xvYmFsLmxhdGVzdFRpbWVzdGFtcDsKICAgIGRpZyAyCiAgICBieiBhcmM1OF9hZGRQbHVnaW5fdGVybmFyeV9mYWxzZUAxNgogICAgZ2xvYmFsIFJvdW5kCiAgICBidXJ5IDE0CgphcmM1OF9hZGRQbHVnaW5fdGVybmFyeV9tZXJnZUAxNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2OTIKICAgIC8vIGlmICh0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlICE9PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcykgewogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29udHJvbGxlZEFkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ29udHJvbGxlZEFkZHJlc3MgfSk7CiAgICBieXRlY18wIC8vICJjb250cm9sbGVkX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NjkyCiAgICAvLyBpZiAodGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSAhPT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MpIHsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgIT0KICAgIGJ6IGFyYzU4X2FkZFBsdWdpbl9hZnRlcl9pZl9lbHNlQDIwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NjkzLTY5OQogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IHRoaXMucGx1Z2luc01icihlc2Nyb3dLZXksIG1ldGhvZEluZm9zLmxlbmd0aCkKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Njk1CiAgICAvLyBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBjb250cm9sbGVkQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNDb250cm9sbGVkQWRkcmVzcyB9KTsKICAgIGJ5dGVjXzAgLy8gImNvbnRyb2xsZWRfYWRkcmVzcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2OTUKICAgIC8vIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Njk2CiAgICAvLyByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY5NwogICAgLy8gYW1vdW50OiB0aGlzLnBsdWdpbnNNYnIoZXNjcm93S2V5LCBtZXRob2RJbmZvcy5sZW5ndGgpCiAgICBkaWcgMTYKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDE5CiAgICBzd2FwCiAgICBjYWxsc3ViIHBsdWdpbnNNYnIKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY5My02OTgKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiB0aGlzLnBsdWdpbnNNYnIoZXNjcm93S2V5LCBtZXRob2RJbmZvcy5sZW5ndGgpCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NjkzLTY5OQogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IHRoaXMucGx1Z2luc01icihlc2Nyb3dLZXksIG1ldGhvZEluZm9zLmxlbmd0aCkKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAoKYXJjNThfYWRkUGx1Z2luX2FmdGVyX2lmX2Vsc2VAMjA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzAyCiAgICAvLyBjb25zdCBlc2Nyb3dJRCA9IHRoaXMubWF5YmVOZXdFc2Nyb3coZXNjcm93KTsKICAgIGRpZyA5CiAgICBjYWxsc3ViIG1heWJlTmV3RXNjcm93CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzA0LTcxNQogICAgLy8gdGhpcy5wbHVnaW5zKGtleSkudmFsdWUgPSB7CiAgICAvLyAgIGVzY3JvdzogZXNjcm93SUQsCiAgICAvLyAgIGFkbWluLAogICAgLy8gICBkZWxlZ2F0aW9uVHlwZSwKICAgIC8vICAgbGFzdFZhbGlkLAogICAgLy8gICBjb29sZG93biwKICAgIC8vICAgbWV0aG9kczogY2xvbmUobWV0aG9kSW5mb3MpLAogICAgLy8gICB1c2VSb3VuZHMsCiAgICAvLyAgIHVzZUV4ZWN1dGlvbktleSwKICAgIC8vICAgbGFzdENhbGxlZDogMCwKICAgIC8vICAgc3RhcnQ6IGVwb2NoUmVmLAogICAgLy8gfQogICAgaXRvYgogICAgZGlnIDgKICAgIGNvbmNhdAogICAgZGlnIDcKICAgIGl0b2IKICAgIGNvbmNhdAogICAgZGlnIDYKICAgIGl0b2IKICAgIGNvbmNhdAogICAgYnl0ZWMgMjMgLy8gMHgwMDJjCiAgICBjb25jYXQKICAgIGJ5dGVjIDkgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIGRpZyAxMQogICAgc2V0Yml0CiAgICBpbnRjXzEgLy8gMQogICAgZGlnIDUKICAgIHNldGJpdAogICAgaW50Y18yIC8vIDIKICAgIGRpZyA0CiAgICBzZXRiaXQKICAgIGNvbmNhdAogICAgZGlnIDE4CiAgICBjb25jYXQKICAgIGRpZyAxNAogICAgaXRvYgogICAgY29uY2F0CiAgICBkaWcgMTUKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBwbHVnaW5zID0gQm94TWFwPFBsdWdpbktleSwgUGx1Z2luSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeFBsdWdpbnMgfSk7CiAgICBieXRlYyA0IC8vICJwIgogICAgZGlnIDE3CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo3MDQtNzE1CiAgICAvLyB0aGlzLnBsdWdpbnMoa2V5KS52YWx1ZSA9IHsKICAgIC8vICAgZXNjcm93OiBlc2Nyb3dJRCwKICAgIC8vICAgYWRtaW4sCiAgICAvLyAgIGRlbGVnYXRpb25UeXBlLAogICAgLy8gICBsYXN0VmFsaWQsCiAgICAvLyAgIGNvb2xkb3duLAogICAgLy8gICBtZXRob2RzOiBjbG9uZShtZXRob2RJbmZvcyksCiAgICAvLyAgIHVzZVJvdW5kcywKICAgIC8vICAgdXNlRXhlY3V0aW9uS2V5LAogICAgLy8gICBsYXN0Q2FsbGVkOiAwLAogICAgLy8gICBzdGFydDogZXBvY2hSZWYsCiAgICAvLyB9CiAgICBkdXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyBsYXN0VXNlckludGVyYWN0aW9uID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzTGFzdFVzZXJJbnRlcmFjdGlvbiB9KQogICAgYnl0ZWNfMyAvLyAibGFzdF91c2VyX2ludGVyYWN0aW9uIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyB0aGlzLmxhc3RVc2VySW50ZXJhY3Rpb24udmFsdWUgPSBHbG9iYWwubGF0ZXN0VGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIyCiAgICAvLyBsYXN0Q2hhbmdlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzTGFzdENoYW5nZSB9KQogICAgYnl0ZWMgNiAvLyAibGFzdF9jaGFuZ2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIHRoaXMubGFzdENoYW5nZS52YWx1ZSA9IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NjQ4LTY2MAogICAgLy8gYXJjNThfYWRkUGx1Z2luKAogICAgLy8gICBwbHVnaW46IHVpbnQ2NCwKICAgIC8vICAgY2FsbGVyOiBBZGRyZXNzLAogICAgLy8gICBlc2Nyb3c6IHN0cmluZywKICAgIC8vICAgYWRtaW46IGJvb2xlYW4sCiAgICAvLyAgIGRlbGVnYXRpb25UeXBlOiBVaW50OCwKICAgIC8vICAgbGFzdFZhbGlkOiB1aW50NjQsCiAgICAvLyAgIGNvb2xkb3duOiB1aW50NjQsCiAgICAvLyAgIG1ldGhvZHM6IE1ldGhvZFJlc3RyaWN0aW9uW10sCiAgICAvLyAgIHVzZVJvdW5kczogYm9vbGVhbiwKICAgIC8vICAgdXNlRXhlY3V0aW9uS2V5OiBib29sZWFuLAogICAgLy8gICBkZWZhdWx0VG9Fc2Nyb3c6IGJvb2xlYW4KICAgIC8vICk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKYXJjNThfYWRkUGx1Z2luX3Rlcm5hcnlfZmFsc2VAMTY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NjkwCiAgICAvLyBjb25zdCBlcG9jaFJlZiA9IHVzZVJvdW5kcyA/IEdsb2JhbC5yb3VuZCA6IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXA7CiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBidXJ5IDE0CiAgICBiIGFyYzU4X2FkZFBsdWdpbl90ZXJuYXJ5X21lcmdlQDE3CgphcmM1OF9hZGRQbHVnaW5faWZfYm9keUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2NzkKICAgIC8vIGFzc2VydChlc2Nyb3cgIT09ICcnLCBFUlJfRVNDUk9XX1JFUVVJUkVEX1RPX0JFX1NFVF9BU19ERUZBVUxUKQogICAgZGlnIDkKICAgIGJ5dGVjXzEgLy8gIiIKICAgICE9CiAgICBhc3NlcnQgLy8gZXNjcm93IG11c3QgYmUgc2V0IGlmIGRlZmF1bHRUb0VzY3JvdyBpcyB0cnVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NjgwCiAgICAvLyBlc2Nyb3dLZXkgPSAnJwogICAgYnl0ZWNfMSAvLyAiIgogICAgYnVyeSAxNwogICAgYiBhcmM1OF9hZGRQbHVnaW5fYWZ0ZXJfaWZfZWxzZUAxMQoKYXJjNThfYWRkUGx1Z2luX2Jvb2xfZmFsc2VAODoKICAgIGludGNfMCAvLyAwCiAgICBiIGFyYzU4X2FkZFBsdWdpbl9ib29sX21lcmdlQDkKCmFyYzU4X2FkZFBsdWdpbl9ib29sX2ZhbHNlQDQ6CiAgICBpbnRjXzAgLy8gMAogICAgYiBhcmM1OF9hZGRQbHVnaW5fYm9vbF9tZXJnZUA1CgoKLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZW1vdmVQbHVnaW5bcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF9yZW1vdmVQbHVnaW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzI3CiAgICAvLyBhcmM1OF9yZW1vdmVQbHVnaW4ocGx1Z2luOiB1aW50NjQsIGNhbGxlcjogQWRkcmVzcywgZXNjcm93OiBzdHJpbmcpOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDhbMzJdCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdXRmOFtdKQogICAgZXh0cmFjdCAyIDAKICAgIGR1cAogICAgY292ZXIgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjcyOAogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuYWRtaW4udmFsdWUsIEVSUl9BRE1JTl9PTkxZKTsKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIGFkbWluID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0FkbWluIH0pCiAgICBieXRlY18yIC8vICJhZG1pbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo3MjgKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSB0aGlzLmFkbWluLnZhbHVlLCBFUlJfQURNSU5fT05MWSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBhZG1pbiBvbmx5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzMwCiAgICAvLyBjb25zdCBrZXk6IFBsdWdpbktleSA9IHsgcGx1Z2luLCBjYWxsZXI6IGNhbGxlci5uYXRpdmUsIGVzY3JvdyB9CiAgICB1bmNvdmVyIDIKICAgIGl0b2IKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBkaWcgMQogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGJ5dGVjIDEyIC8vIDB4MDAyYQogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozMwogICAgLy8gcGx1Z2lucyA9IEJveE1hcDxQbHVnaW5LZXksIFBsdWdpbkluZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhQbHVnaW5zIH0pOwogICAgYnl0ZWMgNCAvLyAicCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjczMQogICAgLy8gYXNzZXJ0KHRoaXMucGx1Z2lucyhrZXkpLmV4aXN0cywgRVJSX1BMVUdJTl9ET0VTX05PVF9FWElTVCkKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gcGx1Z2luIGRvZXMgbm90IGV4aXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzMzCiAgICAvLyBjb25zdCBtZXRob2RzTGVuZ3RoOiB1aW50NjQgPSB0aGlzLnBsdWdpbnMoa2V5KS52YWx1ZS5tZXRob2RzLmxlbmd0aAogICAgZHVwCiAgICBwdXNoaW50IDQ0IC8vIDQ0CiAgICBpbnRjXzIgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo3MzUKICAgIC8vIHRoaXMucGx1Z2lucyhrZXkpLmRlbGV0ZSgpOwogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzM3CiAgICAvLyBpZiAodGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSAhPT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MpIHsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGNvbnRyb2xsZWRBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0NvbnRyb2xsZWRBZGRyZXNzIH0pOwogICAgYnl0ZWNfMCAvLyAiY29udHJvbGxlZF9hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjczNwogICAgLy8gaWYgKHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUgIT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzKSB7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgICE9CiAgICBieiBhcmM1OF9yZW1vdmVQbHVnaW5fYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzM4LTc0MwogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgcmVjZWl2ZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgYW1vdW50OiB0aGlzLnBsdWdpbnNNYnIoZXNjcm93LCBtZXRob2RzTGVuZ3RoKQogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo3NDAKICAgIC8vIHJlY2VpdmVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29udHJvbGxlZEFkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ29udHJvbGxlZEFkZHJlc3MgfSk7CiAgICBieXRlY18wIC8vICJjb250cm9sbGVkX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzQwCiAgICAvLyByZWNlaXZlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzQxCiAgICAvLyBhbW91bnQ6IHRoaXMucGx1Z2luc01icihlc2Nyb3csIG1ldGhvZHNMZW5ndGgpCiAgICBkaWcgMgogICAgZGlnIDIKICAgIGNhbGxzdWIgcGx1Z2luc01icgogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo3MzgtNzQyCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICBhbW91bnQ6IHRoaXMucGx1Z2luc01icihlc2Nyb3csIG1ldGhvZHNMZW5ndGgpCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzM4LTc0MwogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgcmVjZWl2ZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgYW1vdW50OiB0aGlzLnBsdWdpbnNNYnIoZXNjcm93LCBtZXRob2RzTGVuZ3RoKQogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CgphcmM1OF9yZW1vdmVQbHVnaW5fYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyBsYXN0VXNlckludGVyYWN0aW9uID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzTGFzdFVzZXJJbnRlcmFjdGlvbiB9KQogICAgYnl0ZWNfMyAvLyAibGFzdF91c2VyX2ludGVyYWN0aW9uIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyB0aGlzLmxhc3RVc2VySW50ZXJhY3Rpb24udmFsdWUgPSBHbG9iYWwubGF0ZXN0VGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIyCiAgICAvLyBsYXN0Q2hhbmdlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzTGFzdENoYW5nZSB9KQogICAgYnl0ZWMgNiAvLyAibGFzdF9jaGFuZ2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIHRoaXMubGFzdENoYW5nZS52YWx1ZSA9IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzI3CiAgICAvLyBhcmM1OF9yZW1vdmVQbHVnaW4ocGx1Z2luOiB1aW50NjQsIGNhbGxlcjogQWRkcmVzcywgZXNjcm93OiBzdHJpbmcpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X2FkZE5hbWVkUGx1Z2luW3JvdXRpbmddKCkgLT4gdm9pZDoKYXJjNThfYWRkTmFtZWRQbHVnaW46CiAgICBpbnRjXzAgLy8gMAogICAgZHVwbiAzCiAgICBieXRlY18xIC8vICIiCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo3NjUtNzc4CiAgICAvLyBhcmM1OF9hZGROYW1lZFBsdWdpbigKICAgIC8vICAgbmFtZTogc3RyaW5nLAogICAgLy8gICBwbHVnaW46IHVpbnQ2NCwKICAgIC8vICAgY2FsbGVyOiBBZGRyZXNzLAogICAgLy8gICBlc2Nyb3c6IHN0cmluZywKICAgIC8vICAgYWRtaW46IGJvb2xlYW4sCiAgICAvLyAgIGRlbGVnYXRpb25UeXBlOiBVaW50OCwKICAgIC8vICAgbGFzdFZhbGlkOiB1aW50NjQsCiAgICAvLyAgIGNvb2xkb3duOiB1aW50NjQsCiAgICAvLyAgIG1ldGhvZHM6IE1ldGhvZFJlc3RyaWN0aW9uW10sCiAgICAvLyAgIHVzZVJvdW5kczogYm9vbGVhbiwKICAgIC8vICAgdXNlRXhlY3V0aW9uS2V5OiBib29sZWFuLAogICAgLy8gICBkZWZhdWx0VG9Fc2Nyb3c6IGJvb2xlYW4KICAgIC8vICk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICBkdXAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICBzd2FwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGxlbgogICAgcHVzaGludCAzMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDhbMzJdCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdXRmOFtdKQogICAgZXh0cmFjdCAyIDAKICAgIHN3YXAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDUKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYm9vbDgKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHN3YXAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIGR1cAogICAgY292ZXIgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50NjQKICAgIGJ0b2kKICAgIGNvdmVyIDIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDgKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICBjb3ZlciAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA5CiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAKICAgIGNvdmVyIDQKICAgIHB1c2hpbnQgMTIgLy8gMTIKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rKHVpbnQ4WzRdLHVpbnQ2NClbXSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEwCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGJvb2w4CiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBjb3ZlciAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBib29sOAogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgY292ZXIgMgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYm9vbDgKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIGNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo3NzkKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSB0aGlzLmFkbWluLnZhbHVlLCBFUlJfQURNSU5fT05MWSk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE2CiAgICAvLyBhZG1pbiA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNBZG1pbiB9KQogICAgYnl0ZWNfMiAvLyAiYWRtaW4iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Nzc5CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSwgRVJSX0FETUlOX09OTFkpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gYWRtaW4gb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM1CiAgICAvLyBuYW1lZFBsdWdpbnMgPSBCb3hNYXA8c3RyaW5nLCBQbHVnaW5LZXk+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhOYW1lZFBsdWdpbnMgfSk7CiAgICBieXRlYyAxNiAvLyAibiIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo3ODAKICAgIC8vIGFzc2VydCghdGhpcy5uYW1lZFBsdWdpbnMobmFtZSkuZXhpc3RzKTsKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzgzCiAgICAvLyBkZWxlZ2F0aW9uVHlwZSA9PT0gRGVsZWdhdGlvblR5cGVTZWxmICYmCiAgICBieXRlYyAxNSAvLyAweDAxCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjc4My03ODQKICAgIC8vIGRlbGVnYXRpb25UeXBlID09PSBEZWxlZ2F0aW9uVHlwZVNlbGYgJiYKICAgIC8vIGNhbGxlci5uYXRpdmUgPT09IEdsb2JhbC56ZXJvQWRkcmVzcwogICAgYnogYXJjNThfYWRkTmFtZWRQbHVnaW5fYm9vbF9mYWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Nzg0CiAgICAvLyBjYWxsZXIubmF0aXZlID09PSBHbG9iYWwuemVyb0FkZHJlc3MKICAgIGRpZyAxMQogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjc4My03ODQKICAgIC8vIGRlbGVnYXRpb25UeXBlID09PSBEZWxlZ2F0aW9uVHlwZVNlbGYgJiYKICAgIC8vIGNhbGxlci5uYXRpdmUgPT09IEdsb2JhbC56ZXJvQWRkcmVzcwogICAgYnogYXJjNThfYWRkTmFtZWRQbHVnaW5fYm9vbF9mYWxzZUA0CiAgICBpbnRjXzEgLy8gMQoKYXJjNThfYWRkTmFtZWRQbHVnaW5fYm9vbF9tZXJnZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjc4Mi03ODUKICAgIC8vICEoCiAgICAvLyAgIGRlbGVnYXRpb25UeXBlID09PSBEZWxlZ2F0aW9uVHlwZVNlbGYgJiYKICAgIC8vICAgY2FsbGVyLm5hdGl2ZSA9PT0gR2xvYmFsLnplcm9BZGRyZXNzCiAgICAvLyApLAogICAgIQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjc4MS03ODcKICAgIC8vIGFzc2VydCgKICAgIC8vICAgISgKICAgIC8vICAgICBkZWxlZ2F0aW9uVHlwZSA9PT0gRGVsZWdhdGlvblR5cGVTZWxmICYmCiAgICAvLyAgICAgY2FsbGVyLm5hdGl2ZSA9PT0gR2xvYmFsLnplcm9BZGRyZXNzCiAgICAvLyAgICksCiAgICAvLyAgIEVSUl9aRVJPX0FERFJFU1NfREVMRUdBVElPTl9UWVBFCiAgICAvLyApCiAgICBhc3NlcnQgLy8gZGVsZWdhdGlvbiB0eXBlIG11c3Qgbm90IGJlIHNlbGYgZm9yIGdsb2JhbCBwbHVnaW5zCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzkwLTc5MQogICAgLy8gdXNlRXhlY3V0aW9uS2V5ICYmCiAgICAvLyBjYWxsZXIubmF0aXZlICE9PSBHbG9iYWwuemVyb0FkZHJlc3MKICAgIGRpZyAyCiAgICBieiBhcmM1OF9hZGROYW1lZFBsdWdpbl9ib29sX2ZhbHNlQDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo3OTEKICAgIC8vIGNhbGxlci5uYXRpdmUgIT09IEdsb2JhbC56ZXJvQWRkcmVzcwogICAgZGlnIDExCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgICE9CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzkwLTc5MQogICAgLy8gdXNlRXhlY3V0aW9uS2V5ICYmCiAgICAvLyBjYWxsZXIubmF0aXZlICE9PSBHbG9iYWwuemVyb0FkZHJlc3MKICAgIGJ6IGFyYzU4X2FkZE5hbWVkUGx1Z2luX2Jvb2xfZmFsc2VAOAogICAgaW50Y18xIC8vIDEKCmFyYzU4X2FkZE5hbWVkUGx1Z2luX2Jvb2xfbWVyZ2VAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo3ODktNzkyCiAgICAvLyAhKAogICAgLy8gICB1c2VFeGVjdXRpb25LZXkgJiYKICAgIC8vICAgY2FsbGVyLm5hdGl2ZSAhPT0gR2xvYmFsLnplcm9BZGRyZXNzCiAgICAvLyApLAogICAgIQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjc4OC03OTQKICAgIC8vIGFzc2VydCgKICAgIC8vICAgISgKICAgIC8vICAgICB1c2VFeGVjdXRpb25LZXkgJiYKICAgIC8vICAgICBjYWxsZXIubmF0aXZlICE9PSBHbG9iYWwuemVyb0FkZHJlc3MKICAgIC8vICAgKSwKICAgIC8vICAgRVJSX1VTSU5HX0VYRUNVVElPTl9LRVlfUkVRVUlSRVNfR0xPQkFMCiAgICAvLyApCiAgICBhc3NlcnQgLy8gdXNpbmcgZXhlY3V0aW9uIGtleSByZXF1aXJlcyBnbG9iYWwgcGx1Z2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Nzk3CiAgICAvLyBpZiAoZGVmYXVsdFRvRXNjcm93KSB7CiAgICBkaWcgMQogICAgYm56IGFyYzU4X2FkZE5hbWVkUGx1Z2luX2lmX2JvZHlAMTAKICAgIGRpZyAxMAogICAgYnVyeSAxOQoKYXJjNThfYWRkTmFtZWRQbHVnaW5fYWZ0ZXJfaWZfZWxzZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4MDIKICAgIC8vIGNvbnN0IGtleTogUGx1Z2luS2V5ID0geyBwbHVnaW4sIGNhbGxlcjogY2FsbGVyLm5hdGl2ZSwgZXNjcm93OiBlc2Nyb3dLZXkgfQogICAgZGlnIDEyCiAgICBpdG9iCiAgICBkaWcgMTIKICAgIGNvbmNhdAogICAgZGlnIDE5CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgYnl0ZWMgMTIgLy8gMHgwMDJhCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBidXJ5IDE5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODAzCiAgICAvLyB0aGlzLm5hbWVkUGx1Z2lucyhuYW1lKS52YWx1ZSA9IGNsb25lKGtleSkKICAgIGRpZyAxCiAgICBkdXAKICAgIGJveF9kZWwKICAgIHBvcAogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjgwNQogICAgLy8gbGV0IG1ldGhvZEluZm9zOiBNZXRob2RJbmZvW10gPSBbXQogICAgaW50Y18wIC8vIDAKICAgIGl0b2IKICAgIGJ1cnkgMjAKICAgIGJ5dGVjIDEwIC8vIDB4MDAwMAogICAgYnVyeSAxNwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjgwNgogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IG1ldGhvZHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMCAvLyAwCiAgICBidXJ5IDE1CgphcmM1OF9hZGROYW1lZFBsdWdpbl93aGlsZV90b3BAMTI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODA2CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7IGkgKz0gMSkgewogICAgZGlnIDE0CiAgICBkaWcgNQogICAgPAogICAgYnogYXJjNThfYWRkTmFtZWRQbHVnaW5fYWZ0ZXJfd2hpbGVAMTQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4MDcKICAgIC8vIG1ldGhvZEluZm9zLnB1c2goeyAuLi5tZXRob2RzW2ldLCBsYXN0Q2FsbGVkOiAwIH0pCiAgICBkaWcgNQogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAxNQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBwdXNoaW50IDEyIC8vIDEyCiAgICAqCiAgICBwdXNoaW50IDEyIC8vIDEyCiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGR1cAogICAgZXh0cmFjdCAwIDQKICAgIHN3YXAKICAgIGV4dHJhY3QgNCA4CiAgICBkaWcgMQogICAgbGVuCiAgICBwdXNoaW50IDQgLy8gNAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHNpemUKICAgIGNvbmNhdAogICAgZGlnIDIxCiAgICBjb25jYXQKICAgIGRpZyAxOAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdCAvLyBvbiBlcnJvcjogbWF4IGFycmF5IGxlbmd0aCBleGNlZWRlZAogICAgc3dhcAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHJlcGxhY2UyIDAKICAgIGJ1cnkgMTgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4MDYKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBtZXRob2RzLmxlbmd0aDsgaSArPSAxKSB7CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAxNQogICAgYiBhcmM1OF9hZGROYW1lZFBsdWdpbl93aGlsZV90b3BAMTIKCmFyYzU4X2FkZE5hbWVkUGx1Z2luX2FmdGVyX3doaWxlQDE0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjgxMAogICAgLy8gaWYgKHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUgIT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzKSB7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBjb250cm9sbGVkQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNDb250cm9sbGVkQWRkcmVzcyB9KTsKICAgIGJ5dGVjXzAgLy8gImNvbnRyb2xsZWRfYWRkcmVzcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4MTAKICAgIC8vIGlmICh0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlICE9PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcykgewogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAhPQogICAgYnogYXJjNThfYWRkTmFtZWRQbHVnaW5fYWZ0ZXJfaWZfZWxzZUAxNwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjgxMS04MTcKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiB0aGlzLnBsdWdpbnNNYnIoZXNjcm93S2V5LCBtZXRob2RJbmZvcy5sZW5ndGgpICsgdGhpcy5uYW1lZFBsdWdpbnNNYnIobmFtZSkKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODEzCiAgICAvLyBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBjb250cm9sbGVkQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNDb250cm9sbGVkQWRkcmVzcyB9KTsKICAgIGJ5dGVjXzAgLy8gImNvbnRyb2xsZWRfYWRkcmVzcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4MTMKICAgIC8vIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODE0CiAgICAvLyByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjgxNQogICAgLy8gYW1vdW50OiB0aGlzLnBsdWdpbnNNYnIoZXNjcm93S2V5LCBtZXRob2RJbmZvcy5sZW5ndGgpICsgdGhpcy5uYW1lZFBsdWdpbnNNYnIobmFtZSkKICAgIGRpZyAxOAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMjEKICAgIHN3YXAKICAgIGNhbGxzdWIgcGx1Z2luc01icgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyByZXR1cm4gTWluTmFtZWRQbHVnaW5NQlIgKyAoQm94Q29zdFBlckJ5dGUgKiBCeXRlcyhuYW1lKS5sZW5ndGgpOwogICAgZGlnIDE2CiAgICBsZW4KICAgIGludGMgNCAvLyA0MDAKICAgICoKICAgIGludGMgNSAvLyAyMTcwMAogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjgxNQogICAgLy8gYW1vdW50OiB0aGlzLnBsdWdpbnNNYnIoZXNjcm93S2V5LCBtZXRob2RJbmZvcy5sZW5ndGgpICsgdGhpcy5uYW1lZFBsdWdpbnNNYnIobmFtZSkKICAgICsKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjgxMS04MTYKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiB0aGlzLnBsdWdpbnNNYnIoZXNjcm93S2V5LCBtZXRob2RJbmZvcy5sZW5ndGgpICsgdGhpcy5uYW1lZFBsdWdpbnNNYnIobmFtZSkKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4MTEtODE3CiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogdGhpcy5wbHVnaW5zTWJyKGVzY3Jvd0tleSwgbWV0aG9kSW5mb3MubGVuZ3RoKSArIHRoaXMubmFtZWRQbHVnaW5zTWJyKG5hbWUpCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKCmFyYzU4X2FkZE5hbWVkUGx1Z2luX2FmdGVyX2lmX2Vsc2VAMTc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODIwCiAgICAvLyBjb25zdCBlc2Nyb3dJRCA9IHRoaXMubWF5YmVOZXdFc2Nyb3coZXNjcm93KTsKICAgIGRpZyAxMAogICAgY2FsbHN1YiBtYXliZU5ld0VzY3JvdwogICAgYnVyeSAxNgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjgyMgogICAgLy8gY29uc3QgZXBvY2hSZWYgPSB1c2VSb3VuZHMgPyBHbG9iYWwucm91bmQgOiBHbG9iYWwubGF0ZXN0VGltZXN0YW1wOwogICAgZGlnIDMKICAgIGJ6IGFyYzU4X2FkZE5hbWVkUGx1Z2luX3Rlcm5hcnlfZmFsc2VAMTkKICAgIGdsb2JhbCBSb3VuZAoKYXJjNThfYWRkTmFtZWRQbHVnaW5fdGVybmFyeV9tZXJnZUAyMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4MjQtODM1CiAgICAvLyB0aGlzLnBsdWdpbnMoa2V5KS52YWx1ZSA9IHsKICAgIC8vICAgZXNjcm93OiBlc2Nyb3dJRCwKICAgIC8vICAgYWRtaW4sCiAgICAvLyAgIGRlbGVnYXRpb25UeXBlLAogICAgLy8gICBsYXN0VmFsaWQsCiAgICAvLyAgIGNvb2xkb3duLAogICAgLy8gICBtZXRob2RzOiBjbG9uZShtZXRob2RJbmZvcyksCiAgICAvLyAgIHVzZVJvdW5kcywKICAgIC8vICAgdXNlRXhlY3V0aW9uS2V5LAogICAgLy8gICBsYXN0Q2FsbGVkOiAwLAogICAgLy8gICBzdGFydDogZXBvY2hSZWYKICAgIC8vIH0KICAgIGRpZyAxNgogICAgaXRvYgogICAgZGlnIDEwCiAgICBjb25jYXQKICAgIGRpZyA5CiAgICBpdG9iCiAgICBjb25jYXQKICAgIGRpZyA4CiAgICBpdG9iCiAgICBjb25jYXQKICAgIGJ5dGVjIDIzIC8vIDB4MDAyYwogICAgY29uY2F0CiAgICBieXRlYyA5IC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICBkaWcgMTMKICAgIHNldGJpdAogICAgaW50Y18xIC8vIDEKICAgIGRpZyA3CiAgICBzZXRiaXQKICAgIGludGNfMiAvLyAyCiAgICBkaWcgNgogICAgc2V0Yml0CiAgICBjb25jYXQKICAgIGRpZyAyMQogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIGRpZyAxNwogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIHBsdWdpbnMgPSBCb3hNYXA8UGx1Z2luS2V5LCBQbHVnaW5JbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4UGx1Z2lucyB9KTsKICAgIGJ5dGVjIDQgLy8gInAiCiAgICBkaWcgMTkKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjgyNC04MzUKICAgIC8vIHRoaXMucGx1Z2lucyhrZXkpLnZhbHVlID0gewogICAgLy8gICBlc2Nyb3c6IGVzY3Jvd0lELAogICAgLy8gICBhZG1pbiwKICAgIC8vICAgZGVsZWdhdGlvblR5cGUsCiAgICAvLyAgIGxhc3RWYWxpZCwKICAgIC8vICAgY29vbGRvd24sCiAgICAvLyAgIG1ldGhvZHM6IGNsb25lKG1ldGhvZEluZm9zKSwKICAgIC8vICAgdXNlUm91bmRzLAogICAgLy8gICB1c2VFeGVjdXRpb25LZXksCiAgICAvLyAgIGxhc3RDYWxsZWQ6IDAsCiAgICAvLyAgIHN0YXJ0OiBlcG9jaFJlZgogICAgLy8gfQogICAgZHVwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gbGFzdFVzZXJJbnRlcmFjdGlvbiA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0xhc3RVc2VySW50ZXJhY3Rpb24gfSkKICAgIGJ5dGVjXzMgLy8gImxhc3RfdXNlcl9pbnRlcmFjdGlvbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NAogICAgLy8gdGhpcy5sYXN0VXNlckludGVyYWN0aW9uLnZhbHVlID0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMgogICAgLy8gbGFzdENoYW5nZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0xhc3RDaGFuZ2UgfSkKICAgIGJ5dGVjIDYgLy8gImxhc3RfY2hhbmdlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyB0aGlzLmxhc3RDaGFuZ2UudmFsdWUgPSBHbG9iYWwubGF0ZXN0VGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjc2NS03NzgKICAgIC8vIGFyYzU4X2FkZE5hbWVkUGx1Z2luKAogICAgLy8gICBuYW1lOiBzdHJpbmcsCiAgICAvLyAgIHBsdWdpbjogdWludDY0LAogICAgLy8gICBjYWxsZXI6IEFkZHJlc3MsCiAgICAvLyAgIGVzY3Jvdzogc3RyaW5nLAogICAgLy8gICBhZG1pbjogYm9vbGVhbiwKICAgIC8vICAgZGVsZWdhdGlvblR5cGU6IFVpbnQ4LAogICAgLy8gICBsYXN0VmFsaWQ6IHVpbnQ2NCwKICAgIC8vICAgY29vbGRvd246IHVpbnQ2NCwKICAgIC8vICAgbWV0aG9kczogTWV0aG9kUmVzdHJpY3Rpb25bXSwKICAgIC8vICAgdXNlUm91bmRzOiBib29sZWFuLAogICAgLy8gICB1c2VFeGVjdXRpb25LZXk6IGJvb2xlYW4sCiAgICAvLyAgIGRlZmF1bHRUb0VzY3JvdzogYm9vbGVhbgogICAgLy8gKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgphcmM1OF9hZGROYW1lZFBsdWdpbl90ZXJuYXJ5X2ZhbHNlQDE5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjgyMgogICAgLy8gY29uc3QgZXBvY2hSZWYgPSB1c2VSb3VuZHMgPyBHbG9iYWwucm91bmQgOiBHbG9iYWwubGF0ZXN0VGltZXN0YW1wOwogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgYiBhcmM1OF9hZGROYW1lZFBsdWdpbl90ZXJuYXJ5X21lcmdlQDIwCgphcmM1OF9hZGROYW1lZFBsdWdpbl9pZl9ib2R5QDEwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjc5OAogICAgLy8gYXNzZXJ0KGVzY3JvdyAhPT0gJycsIEVSUl9FU0NST1dfUkVRVUlSRURfVE9fQkVfU0VUX0FTX0RFRkFVTFQpCiAgICBkaWcgMTAKICAgIGJ5dGVjXzEgLy8gIiIKICAgICE9CiAgICBhc3NlcnQgLy8gZXNjcm93IG11c3QgYmUgc2V0IGlmIGRlZmF1bHRUb0VzY3JvdyBpcyB0cnVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Nzk5CiAgICAvLyBlc2Nyb3dLZXkgPSAnJwogICAgYnl0ZWNfMSAvLyAiIgogICAgYnVyeSAxOQogICAgYiBhcmM1OF9hZGROYW1lZFBsdWdpbl9hZnRlcl9pZl9lbHNlQDExCgphcmM1OF9hZGROYW1lZFBsdWdpbl9ib29sX2ZhbHNlQDg6CiAgICBpbnRjXzAgLy8gMAogICAgYiBhcmM1OF9hZGROYW1lZFBsdWdpbl9ib29sX21lcmdlQDkKCmFyYzU4X2FkZE5hbWVkUGx1Z2luX2Jvb2xfZmFsc2VANDoKICAgIGludGNfMCAvLyAwCiAgICBiIGFyYzU4X2FkZE5hbWVkUGx1Z2luX2Jvb2xfbWVyZ2VANQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVtb3ZlTmFtZWRQbHVnaW5bcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF9yZW1vdmVOYW1lZFBsdWdpbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4NDYKICAgIC8vIGFyYzU4X3JlbW92ZU5hbWVkUGx1Z2luKG5hbWU6IHN0cmluZyk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4NDcKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSB0aGlzLmFkbWluLnZhbHVlLCBFUlJfQURNSU5fT05MWSk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE2CiAgICAvLyBhZG1pbiA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNBZG1pbiB9KQogICAgYnl0ZWNfMiAvLyAiYWRtaW4iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODQ3CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSwgRVJSX0FETUlOX09OTFkpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gYWRtaW4gb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM1CiAgICAvLyBuYW1lZFBsdWdpbnMgPSBCb3hNYXA8c3RyaW5nLCBQbHVnaW5LZXk+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhOYW1lZFBsdWdpbnMgfSk7CiAgICBieXRlYyAxNiAvLyAibiIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg0OAogICAgLy8gYXNzZXJ0KHRoaXMubmFtZWRQbHVnaW5zKG5hbWUpLmV4aXN0cywgRVJSX1BMVUdJTl9ET0VTX05PVF9FWElTVCk7CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIHBsdWdpbiBkb2VzIG5vdCBleGlzdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg0OQogICAgLy8gY29uc3QgYXBwID0gY2xvbmUodGhpcy5uYW1lZFBsdWdpbnMobmFtZSkudmFsdWUpCiAgICBkdXAKICAgIGJveF9nZXQKICAgIHBvcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIHBsdWdpbnMgPSBCb3hNYXA8UGx1Z2luS2V5LCBQbHVnaW5JbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4UGx1Z2lucyB9KTsKICAgIGJ5dGVjIDQgLy8gInAiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4NTAKICAgIC8vIGFzc2VydCh0aGlzLnBsdWdpbnMoYXBwKS5leGlzdHMsIEVSUl9QTFVHSU5fRE9FU19OT1RfRVhJU1QpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBwbHVnaW4gZG9lcyBub3QgZXhpc3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4NTIKICAgIC8vIGNvbnN0IG1ldGhvZHNMZW5ndGg6IHVpbnQ2NCA9IHRoaXMucGx1Z2lucyhhcHApLnZhbHVlLm1ldGhvZHMubGVuZ3RoCiAgICBkdXAKICAgIHB1c2hpbnQgNDQgLy8gNDQKICAgIGludGNfMiAvLyAyCiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgY292ZXIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg1NAogICAgLy8gdGhpcy5uYW1lZFBsdWdpbnMobmFtZSkuZGVsZXRlKCk7CiAgICBzd2FwCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4NTUKICAgIC8vIHRoaXMucGx1Z2lucyhhcHApLmRlbGV0ZSgpOwogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODU3CiAgICAvLyBpZiAodGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSAhPT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MpIHsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGNvbnRyb2xsZWRBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0NvbnRyb2xsZWRBZGRyZXNzIH0pOwogICAgYnl0ZWNfMCAvLyAiY29udHJvbGxlZF9hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg1NwogICAgLy8gaWYgKHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUgIT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzKSB7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgICE9CiAgICBieiBhcmM1OF9yZW1vdmVOYW1lZFBsdWdpbl9hZnRlcl9pZl9lbHNlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4NTgtODYzCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICBhbW91bnQ6IHRoaXMubmFtZWRQbHVnaW5zTWJyKG5hbWUpICsgdGhpcy5wbHVnaW5zTWJyKGFwcC5lc2Nyb3csIG1ldGhvZHNMZW5ndGgpCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg2MAogICAgLy8gcmVjZWl2ZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBjb250cm9sbGVkQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNDb250cm9sbGVkQWRkcmVzcyB9KTsKICAgIGJ5dGVjXzAgLy8gImNvbnRyb2xsZWRfYWRkcmVzcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4NjAKICAgIC8vIHJlY2VpdmVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1OAogICAgLy8gcmV0dXJuIE1pbk5hbWVkUGx1Z2luTUJSICsgKEJveENvc3RQZXJCeXRlICogQnl0ZXMobmFtZSkubGVuZ3RoKTsKICAgIGRpZyAzCiAgICBsZW4KICAgIGludGMgNCAvLyA0MDAKICAgICoKICAgIGludGMgNSAvLyAyMTcwMAogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg2MQogICAgLy8gYW1vdW50OiB0aGlzLm5hbWVkUGx1Z2luc01icihuYW1lKSArIHRoaXMucGx1Z2luc01icihhcHAuZXNjcm93LCBtZXRob2RzTGVuZ3RoKQogICAgZGlnIDMKICAgIGR1cAogICAgcHVzaGludCA0MCAvLyA0MAogICAgZXh0cmFjdF91aW50MTYKICAgIGRpZyAxCiAgICBsZW4KICAgIHN1YnN0cmluZzMKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMwogICAgY2FsbHN1YiBwbHVnaW5zTWJyCiAgICArCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg1OC04NjIKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHJlY2VpdmVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIGFtb3VudDogdGhpcy5uYW1lZFBsdWdpbnNNYnIobmFtZSkgKyB0aGlzLnBsdWdpbnNNYnIoYXBwLmVzY3JvdywgbWV0aG9kc0xlbmd0aCkKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4NTgtODYzCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICBhbW91bnQ6IHRoaXMubmFtZWRQbHVnaW5zTWJyKG5hbWUpICsgdGhpcy5wbHVnaW5zTWJyKGFwcC5lc2Nyb3csIG1ldGhvZHNMZW5ndGgpCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKCmFyYzU4X3JlbW92ZU5hbWVkUGx1Z2luX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gbGFzdFVzZXJJbnRlcmFjdGlvbiA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0xhc3RVc2VySW50ZXJhY3Rpb24gfSkKICAgIGJ5dGVjXzMgLy8gImxhc3RfdXNlcl9pbnRlcmFjdGlvbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NAogICAgLy8gdGhpcy5sYXN0VXNlckludGVyYWN0aW9uLnZhbHVlID0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMgogICAgLy8gbGFzdENoYW5nZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0xhc3RDaGFuZ2UgfSkKICAgIGJ5dGVjIDYgLy8gImxhc3RfY2hhbmdlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyB0aGlzLmxhc3RDaGFuZ2UudmFsdWUgPSBHbG9iYWwubGF0ZXN0VGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg0NgogICAgLy8gYXJjNThfcmVtb3ZlTmFtZWRQbHVnaW4obmFtZTogc3RyaW5nKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9uZXdFc2Nyb3dbcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF9uZXdFc2Nyb3c6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODc1CiAgICAvLyBhcmM1OF9uZXdFc2Nyb3coZXNjcm93OiBzdHJpbmcpOiB1aW50NjQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODc2CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSwgRVJSX0FETUlOX09OTFkpOwogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNgogICAgLy8gYWRtaW4gPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQWRtaW4gfSkKICAgIGJ5dGVjXzIgLy8gImFkbWluIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg3NgogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuYWRtaW4udmFsdWUsIEVSUl9BRE1JTl9PTkxZKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIGFkbWluIG9ubHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNwogICAgLy8gZXNjcm93cyA9IEJveE1hcDxzdHJpbmcsIEVzY3Jvd0luZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhFc2Nyb3dzIH0pCiAgICBieXRlYyA1IC8vICJlIgogICAgZGlnIDEKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg3NwogICAgLy8gYXNzZXJ0KCF0aGlzLmVzY3Jvd3MoZXNjcm93KS5leGlzdHMsIEVSUl9FU0NST1dfQUxSRUFEWV9FWElTVFMpOwogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gZXNjcm93IGFscmVhZHkgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODc4CiAgICAvLyBhc3NlcnQoZXNjcm93ICE9PSAnJywgRVJSX0VTQ1JPV19OQU1FX1JFUVVJUkVEKTsKICAgIGR1cAogICAgYnl0ZWNfMSAvLyAiIgogICAgIT0KICAgIGFzc2VydCAvLyBFc2Nyb3cgbmFtZSBpcyByZXF1aXJlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg3OQogICAgLy8gcmV0dXJuIHRoaXMubmV3RXNjcm93KGVzY3Jvdyk7CiAgICBjYWxsc3ViIG5ld0VzY3JvdwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg3NQogICAgLy8gYXJjNThfbmV3RXNjcm93KGVzY3Jvdzogc3RyaW5nKTogdWludDY0IHsKICAgIGl0b2IKICAgIGJ5dGVjIDcgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3RvZ2dsZUVzY3Jvd0xvY2tbcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF90b2dnbGVFc2Nyb3dMb2NrOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg4NwogICAgLy8gYXJjNThfdG9nZ2xlRXNjcm93TG9jayhlc2Nyb3c6IHN0cmluZyk6IEVzY3Jvd0luZm8gewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODg4CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSwgRVJSX0FETUlOX09OTFkpOwogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNgogICAgLy8gYWRtaW4gPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQWRtaW4gfSkKICAgIGJ5dGVjXzIgLy8gImFkbWluIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg4OAogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuYWRtaW4udmFsdWUsIEVSUl9BRE1JTl9PTkxZKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIGFkbWluIG9ubHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNwogICAgLy8gZXNjcm93cyA9IEJveE1hcDxzdHJpbmcsIEVzY3Jvd0luZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhFc2Nyb3dzIH0pCiAgICBieXRlYyA1IC8vICJlIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODg5CiAgICAvLyBhc3NlcnQodGhpcy5lc2Nyb3dzKGVzY3JvdykuZXhpc3RzLCBFUlJfRVNDUk9XX0RPRVNfTk9UX0VYSVNUKTsKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gZXNjcm93IGRvZXMgbm90IGV4aXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODkxCiAgICAvLyB0aGlzLmVzY3Jvd3MoZXNjcm93KS52YWx1ZS5sb2NrZWQgPSAhdGhpcy5lc2Nyb3dzKGVzY3JvdykudmFsdWUubG9ja2VkOwogICAgZHVwCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIHB1c2hpbnQgNjQgLy8gNjQKICAgIGdldGJpdAogICAgIQogICAgZGlnIDEKICAgIGludGNfMyAvLyA4CiAgICBpbnRjXzEgLy8gMQogICAgYm94X2V4dHJhY3QKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgZGlnIDEKICAgIGludGNfMyAvLyA4CiAgICB1bmNvdmVyIDIKICAgIGJveF9yZXBsYWNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIGxhc3RVc2VySW50ZXJhY3Rpb24gPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNMYXN0VXNlckludGVyYWN0aW9uIH0pCiAgICBieXRlY18zIC8vICJsYXN0X3VzZXJfaW50ZXJhY3Rpb24iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHRoaXMubGFzdFVzZXJJbnRlcmFjdGlvbi52YWx1ZSA9IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjIKICAgIC8vIGxhc3RDaGFuZ2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNMYXN0Q2hhbmdlIH0pCiAgICBieXRlYyA2IC8vICJsYXN0X2NoYW5nZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0OAogICAgLy8gdGhpcy5sYXN0Q2hhbmdlLnZhbHVlID0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4OTYKICAgIC8vIHJldHVybiB0aGlzLmVzY3Jvd3MoZXNjcm93KS52YWx1ZTsKICAgIGJveF9nZXQKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg4NwogICAgLy8gYXJjNThfdG9nZ2xlRXNjcm93TG9jayhlc2Nyb3c6IHN0cmluZyk6IEVzY3Jvd0luZm8gewogICAgYnl0ZWMgNyAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVjbGFpbVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmFyYzU4X3JlY2xhaW06CiAgICBpbnRjXzAgLy8gMAogICAgZHVwCiAgICBieXRlY18xIC8vICIiCiAgICBkdXBuIDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MDUKICAgIC8vIGFyYzU4X3JlY2xhaW0oZXNjcm93OiBzdHJpbmcsIHJlY2xhaW1zOiBFc2Nyb3dSZWNsYWltW10pOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbit1dGY4W10pCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwCiAgICBjb3ZlciAzCiAgICBwdXNoaW50IDE3IC8vIDE3CiAgICAqCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgc3dhcAogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuKyh1aW50NjQsdWludDY0LGJvb2wxKVtdKQogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTA2CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSwgRVJSX0ZPUkJJRERFTik7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE2CiAgICAvLyBhZG1pbiA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNBZG1pbiB9KQogICAgYnl0ZWNfMiAvLyAiYWRtaW4iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTA2CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSwgRVJSX0ZPUkJJRERFTik7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBmb3JiaWRkZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNwogICAgLy8gZXNjcm93cyA9IEJveE1hcDxzdHJpbmcsIEVzY3Jvd0luZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhFc2Nyb3dzIH0pCiAgICBieXRlYyA1IC8vICJlIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTA3CiAgICAvLyBhc3NlcnQodGhpcy5lc2Nyb3dzKGVzY3JvdykuZXhpc3RzLCBFUlJfRVNDUk9XX0RPRVNfTk9UX0VYSVNUKTsKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gZXNjcm93IGRvZXMgbm90IGV4aXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTA4CiAgICAvLyBjb25zdCBzZW5kZXIgPSBBcHBsaWNhdGlvbih0aGlzLmVzY3Jvd3MoZXNjcm93KS52YWx1ZS5pZCkuYWRkcmVzcwogICAgYm94X2dldAogICAgcG9wCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MTAKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCByZWNsYWltcy5sZW5ndGg7IGkgKz0gMSkgewogICAgaW50Y18wIC8vIDAKCmFyYzU4X3JlY2xhaW1fd2hpbGVfdG9wQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTEwCiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgcmVjbGFpbXMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGR1cAogICAgZGlnIDUKICAgIDwKICAgIGJ6IGFyYzU4X3JlY2xhaW1fYWZ0ZXJfd2hpbGVAMTcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MTEKICAgIC8vIGlmIChyZWNsYWltc1tpXS5hc3NldCA9PT0gMCkgewogICAgZGlnIDUKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMQogICAgcHVzaGludCAxNyAvLyAxNwogICAgKgogICAgcHVzaGludCAxNyAvLyAxNwogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZHVwCiAgICBidXJ5IDEyCiAgICBibnogYXJjNThfcmVjbGFpbV9lbHNlX2JvZHlAMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MTQKICAgIC8vIHJlY2VpdmVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29udHJvbGxlZEFkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ29udHJvbGxlZEFkZHJlc3MgfSk7CiAgICBieXRlY18wIC8vICJjb250cm9sbGVkX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTE0CiAgICAvLyByZWNlaXZlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBidXJ5IDE1CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTE1CiAgICAvLyBhbW91bnQ6IHJlY2xhaW1zW2ldLmFtb3VudAogICAgZHVwCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIGJ1cnkgMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MTIKICAgIC8vIGNvbnN0IHBtdCA9IGl0eG4ucGF5bWVudCh7CiAgICBpbnRjXzAgLy8gMAogICAgYnVyeSAxMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjkxOAogICAgLy8gaWYgKHJlY2xhaW1zW2ldLmNsb3NlT3V0KSB7CiAgICBwdXNoaW50IDEyOCAvLyAxMjgKICAgIGdldGJpdAogICAgYnogYXJjNThfcmVjbGFpbV9hZnRlcl9pZl9lbHNlQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MTkKICAgIC8vIHBtdC5zZXQoeyBjbG9zZVJlbWFpbmRlclRvOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlIH0pOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29udHJvbGxlZEFkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ29udHJvbGxlZEFkZHJlc3MgfSk7CiAgICBieXRlY18wIC8vICJjb250cm9sbGVkX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTE5CiAgICAvLyBwbXQuc2V0KHsgY2xvc2VSZW1haW5kZXJUbzogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSB9KTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpbnRjXzEgLy8gMQogICAgYnVyeSAxMgogICAgYnVyeSAzCgphcmM1OF9yZWNsYWltX2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MjIKICAgIC8vIHBtdC5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIGRpZyAxMAogICAgYnogYXJjNThfcmVjbGFpbV9uZXh0X2ZpZWxkQDgKICAgIGRpZyAyCiAgICBpdHhuX2ZpZWxkIENsb3NlUmVtYWluZGVyVG8KCmFyYzU4X3JlY2xhaW1fbmV4dF9maWVsZEA4OgogICAgZGlnIDgKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBkaWcgMTIKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjkxMi05MTYKICAgIC8vIGNvbnN0IHBtdCA9IGl0eG4ucGF5bWVudCh7CiAgICAvLyAgIHNlbmRlciwKICAgIC8vICAgcmVjZWl2ZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgIGFtb3VudDogcmVjbGFpbXNbaV0uYW1vdW50CiAgICAvLyB9KQogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjkyMgogICAgLy8gcG10LnN1Ym1pdCgpOwogICAgaXR4bl9zdWJtaXQKCmFyYzU4X3JlY2xhaW1fYWZ0ZXJfaWZfZWxzZUAxNjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MTAKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCByZWNsYWltcy5sZW5ndGg7IGkgKz0gMSkgewogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIGFyYzU4X3JlY2xhaW1fd2hpbGVfdG9wQDIKCmFyYzU4X3JlY2xhaW1fZWxzZV9ib2R5QDEwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjkyNgogICAgLy8gYXNzZXRSZWNlaXZlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGNvbnRyb2xsZWRBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0NvbnRyb2xsZWRBZGRyZXNzIH0pOwogICAgYnl0ZWNfMCAvLyAiY29udHJvbGxlZF9hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjkyNgogICAgLy8gYXNzZXRSZWNlaXZlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBidXJ5IDE0CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTI3CiAgICAvLyBhc3NldEFtb3VudDogcmVjbGFpbXNbaV0uYW1vdW50LAogICAgZHVwCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIGJ1cnkgOQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjkyNAogICAgLy8gY29uc3QgeGZlciA9IGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICBpbnRjXzAgLy8gMAogICAgYnVyeSA4CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTMxCiAgICAvLyBpZiAocmVjbGFpbXNbaV0uY2xvc2VPdXQpIHsKICAgIHB1c2hpbnQgMTI4IC8vIDEyOAogICAgZ2V0Yml0CiAgICBieiBhcmM1OF9yZWNsYWltX2FmdGVyX2lmX2Vsc2VAMTIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MzIKICAgIC8vIHhmZXIuc2V0KHsgYXNzZXRDbG9zZVRvOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlIH0pOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29udHJvbGxlZEFkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ29udHJvbGxlZEFkZHJlc3MgfSk7CiAgICBieXRlY18wIC8vICJjb250cm9sbGVkX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTMyCiAgICAvLyB4ZmVyLnNldCh7IGFzc2V0Q2xvc2VUbzogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSB9KTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpbnRjXzEgLy8gMQogICAgYnVyeSA4CiAgICBidXJ5IDQKCmFyYzU4X3JlY2xhaW1fYWZ0ZXJfaWZfZWxzZUAxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MzUKICAgIC8vIHhmZXIuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICBkaWcgNgogICAgYnogYXJjNThfcmVjbGFpbV9uZXh0X2ZpZWxkQDE0CiAgICBkaWcgMwogICAgaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCmFyYzU4X3JlY2xhaW1fbmV4dF9maWVsZEAxNDoKICAgIGRpZyA5CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgZGlnIDcKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGRpZyAxMQogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBkaWcgMQogICAgaXR4bl9maWVsZCBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MjQtOTI5CiAgICAvLyBjb25zdCB4ZmVyID0gaXR4bi5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgc2VuZGVyLAogICAgLy8gICBhc3NldFJlY2VpdmVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICBhc3NldEFtb3VudDogcmVjbGFpbXNbaV0uYW1vdW50LAogICAgLy8gICB4ZmVyQXNzZXQ6IHJlY2xhaW1zW2ldLmFzc2V0CiAgICAvLyB9KQogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjkzNQogICAgLy8geGZlci5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0CiAgICBiIGFyYzU4X3JlY2xhaW1fYWZ0ZXJfaWZfZWxzZUAxNgoKYXJjNThfcmVjbGFpbV9hZnRlcl93aGlsZUAxNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5MDUKICAgIC8vIGFyYzU4X3JlY2xhaW0oZXNjcm93OiBzdHJpbmcsIHJlY2xhaW1zOiBFc2Nyb3dSZWNsYWltW10pOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X29wdGluRXNjcm93W3JvdXRpbmddKCkgLT4gdm9pZDoKYXJjNThfb3B0aW5Fc2Nyb3c6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTQ2CiAgICAvLyBhcmM1OF9vcHRpbkVzY3Jvdyhlc2Nyb3c6IHN0cmluZywgYXNzZXRzOiB1aW50NjRbXSk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBkaWcgMQogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3V0ZjhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICBkdXAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgY292ZXIgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cAogICAgY292ZXIgMwogICAgZHVwCiAgICBpbnRjXzMgLy8gOAogICAgKgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIHVuY292ZXIgMgogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3VpbnQ2NFtdKQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjk0NwogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuYWRtaW4udmFsdWUsIEVSUl9GT1JCSURERU4pOwogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNgogICAgLy8gYWRtaW4gPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQWRtaW4gfSkKICAgIGJ5dGVjXzIgLy8gImFkbWluIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjk0NwogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuYWRtaW4udmFsdWUsIEVSUl9GT1JCSURERU4pOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gZm9yYmlkZGVuCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzcKICAgIC8vIGVzY3Jvd3MgPSBCb3hNYXA8c3RyaW5nLCBFc2Nyb3dJbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4RXNjcm93cyB9KQogICAgYnl0ZWMgNSAvLyAiZSIKICAgIHVuY292ZXIgMgogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTQ4CiAgICAvLyBhc3NlcnQodGhpcy5lc2Nyb3dzKGVzY3JvdykuZXhpc3RzLCBFUlJfRVNDUk9XX0RPRVNfTk9UX0VYSVNUKQogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBlc2Nyb3cgZG9lcyBub3QgZXhpc3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5NDkKICAgIC8vIGNvbnN0IGVzY3Jvd0lEID0gdGhpcy5lc2Nyb3dzKGVzY3JvdykudmFsdWUuaWQKICAgIGJveF9nZXQKICAgIHBvcAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5NTAKICAgIC8vIGNvbnN0IGVzY3Jvd0FkZHJlc3MgPSBBcHBsaWNhdGlvbihlc2Nyb3dJRCkuYWRkcmVzcwogICAgYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAzCiAgICBjb3ZlciA0CiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTUxCiAgICAvLyBhc3NlcnQoIXRoaXMuZXNjcm93cyhlc2Nyb3cpLnZhbHVlLmxvY2tlZCwgRVJSX0VTQ1JPV19MT0NLRUQpCiAgICBwdXNoaW50IDY0IC8vIDY0CiAgICBnZXRiaXQKICAgICEKICAgIGFzc2VydCAvLyBFc2Nyb3cgaXMgbG9ja2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTUzLTk1OQogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIHJlY2VpdmVyOiBlc2Nyb3dBZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogR2xvYmFsLmFzc2V0T3B0SW5NaW5CYWxhbmNlICogYXNzZXRzLmxlbmd0aAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTU1CiAgICAvLyBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBjb250cm9sbGVkQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNDb250cm9sbGVkQWRkcmVzcyB9KTsKICAgIGJ5dGVjXzAgLy8gImNvbnRyb2xsZWRfYWRkcmVzcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5NTUKICAgIC8vIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTU3CiAgICAvLyBhbW91bnQ6IEdsb2JhbC5hc3NldE9wdEluTWluQmFsYW5jZSAqIGFzc2V0cy5sZW5ndGgKICAgIGdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQogICAgdW5jb3ZlciAzCiAgICAqCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaXR4bl9maWVsZCBTZW5kZXIKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5NTMtOTU4CiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgcmVjZWl2ZXI6IGVzY3Jvd0FkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiBHbG9iYWwuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKiBhc3NldHMubGVuZ3RoCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTUzLTk1OQogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIHJlY2VpdmVyOiBlc2Nyb3dBZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogR2xvYmFsLmFzc2V0T3B0SW5NaW5CYWxhbmNlICogYXNzZXRzLmxlbmd0aAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjk2MQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGFzc2V0cy5sZW5ndGg7IGkgKz0gMSkgewogICAgaW50Y18wIC8vIDAKCmFyYzU4X29wdGluRXNjcm93X3doaWxlX3RvcEAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjk2MQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGFzc2V0cy5sZW5ndGg7IGkgKz0gMSkgewogICAgZHVwCiAgICBkaWcgMwogICAgPAogICAgYnogYXJjNThfb3B0aW5Fc2Nyb3dfYWZ0ZXJfd2hpbGVANgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjk2MwogICAgLy8gdGhpcy5hbGxvd2FuY2VzKHsgZXNjcm93LCBhc3NldDogYXNzZXRzW2ldIH0pLmV4aXN0cywKICAgIGRpZyAzCiAgICBleHRyYWN0IDIgMAogICAgZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGV4dHJhY3RfdWludDY0CiAgICBkaWcgNgogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBpdG9iCiAgICBieXRlYyAxMyAvLyAweDAwMGEKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGFsbG93YW5jZXMgPSBCb3hNYXA8QWxsb3dhbmNlS2V5LCBBbGxvd2FuY2VJbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4QWxsb3dhbmNlcyB9KSAvLyAzOF81MDAKICAgIGJ5dGVjIDE0IC8vICJhIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTYzCiAgICAvLyB0aGlzLmFsbG93YW5jZXMoeyBlc2Nyb3csIGFzc2V0OiBhc3NldHNbaV0gfSkuZXhpc3RzLAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTYyLTk2NQogICAgLy8gYXNzZXJ0KAogICAgLy8gICB0aGlzLmFsbG93YW5jZXMoeyBlc2Nyb3csIGFzc2V0OiBhc3NldHNbaV0gfSkuZXhpc3RzLAogICAgLy8gICBFUlJfQUxMT1dBTkNFX0RPRVNfTk9UX0VYSVNUCiAgICAvLyApOwogICAgYXNzZXJ0IC8vIGFsbG93YW5jZSBkb2VzIG5vdCBleGlzdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjk2Ny05NzQKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIHNlbmRlcjogZXNjcm93QWRkcmVzcywKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBlc2Nyb3dBZGRyZXNzLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIHhmZXJBc3NldDogYXNzZXRzW2ldCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTcxCiAgICAvLyBhc3NldEFtb3VudDogMCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBkaWcgMgogICAgZHVwCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTY3LTk3MwogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgc2VuZGVyOiBlc2Nyb3dBZGRyZXNzLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IGVzY3Jvd0FkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDAsCiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldHNbaV0KICAgIC8vICAgfSkKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5NjctOTc0CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBzZW5kZXI6IGVzY3Jvd0FkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogZXNjcm93QWRkcmVzcywKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0c1tpXQogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjk2MQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGFzc2V0cy5sZW5ndGg7IGkgKz0gMSkgewogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiBhcmM1OF9vcHRpbkVzY3Jvd193aGlsZV90b3BAMwoKYXJjNThfb3B0aW5Fc2Nyb3dfYWZ0ZXJfd2hpbGVANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5NDYKICAgIC8vIGFyYzU4X29wdGluRXNjcm93KGVzY3Jvdzogc3RyaW5nLCBhc3NldHM6IHVpbnQ2NFtdKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9wbHVnaW5PcHRpbkVzY3Jvd1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmFyYzU4X3BsdWdpbk9wdGluRXNjcm93OgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gIiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5ODYtOTkyCiAgICAvLyBhcmM1OF9wbHVnaW5PcHRpbkVzY3JvdygKICAgIC8vICAgcGx1Z2luOiB1aW50NjQsCiAgICAvLyAgIGNhbGxlcjogQWRkcmVzcywKICAgIC8vICAgZXNjcm93OiBzdHJpbmcsCiAgICAvLyAgIGFzc2V0czogdWludDY0W10sCiAgICAvLyAgIG1iclBheW1lbnQ6IGd0eG4uUGF5bWVudFR4bgogICAgLy8gKTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDhbMzJdCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdXRmOFtdKQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgY292ZXIgNAogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cAogICAgY292ZXIgNQogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdWludDY0W10pCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgY292ZXIgNAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMSAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5OTMKICAgIC8vIGNvbnN0IGtleTogUGx1Z2luS2V5ID0geyBwbHVnaW4sIGNhbGxlcjogY2FsbGVyLm5hdGl2ZSwgZXNjcm93IH0KICAgIGRpZyAyCiAgICBpdG9iCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIGR1cAogICAgY292ZXIgNAogICAgc3dhcAogICAgYnl0ZWMgMTIgLy8gMHgwMDJhCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBwbHVnaW5zID0gQm94TWFwPFBsdWdpbktleSwgUGx1Z2luSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeFBsdWdpbnMgfSk7CiAgICBieXRlYyA0IC8vICJwIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTk1CiAgICAvLyBhc3NlcnQodGhpcy5wbHVnaW5zKGtleSkuZXhpc3RzLCBFUlJfUExVR0lOX0RPRVNfTk9UX0VYSVNUKQogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gcGx1Z2luIGRvZXMgbm90IGV4aXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzcKICAgIC8vIGVzY3Jvd3MgPSBCb3hNYXA8c3RyaW5nLCBFc2Nyb3dJbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4RXNjcm93cyB9KQogICAgYnl0ZWMgNSAvLyAiZSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjk5NgogICAgLy8gYXNzZXJ0KHRoaXMuZXNjcm93cyhlc2Nyb3cpLmV4aXN0cywgRVJSX0VTQ1JPV19ET0VTX05PVF9FWElTVCkKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gZXNjcm93IGRvZXMgbm90IGV4aXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTk3CiAgICAvLyBhc3NlcnQoIXRoaXMuZXNjcm93cyhlc2Nyb3cpLnZhbHVlLmxvY2tlZCwgRVJSX0VTQ1JPV19MT0NLRUQpCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIGR1cAogICAgcHVzaGludCA2NCAvLyA2NAogICAgZ2V0Yml0CiAgICAhCiAgICBhc3NlcnQgLy8gRXNjcm93IGlzIGxvY2tlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjk5OQogICAgLy8gY29uc3QgZXNjcm93SUQgPSB0aGlzLmVzY3Jvd3MoZXNjcm93KS52YWx1ZS5pZAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTAwMgogICAgLy8gVHhuLnNlbmRlciA9PT0gQXBwbGljYXRpb24ocGx1Z2luKS5hZGRyZXNzIHx8CiAgICB0eG4gU2VuZGVyCiAgICBzd2FwCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwMDItMTAwMwogICAgLy8gVHhuLnNlbmRlciA9PT0gQXBwbGljYXRpb24ocGx1Z2luKS5hZGRyZXNzIHx8CiAgICAvLyBUeG4uc2VuZGVyID09PSBjYWxsZXIubmF0aXZlIHx8CiAgICBibnogYXJjNThfcGx1Z2luT3B0aW5Fc2Nyb3dfYm9vbF90cnVlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDAzCiAgICAvLyBUeG4uc2VuZGVyID09PSBjYWxsZXIubmF0aXZlIHx8CiAgICB0eG4gU2VuZGVyCiAgICBkaWcgNgogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDAyLTEwMDMKICAgIC8vIFR4bi5zZW5kZXIgPT09IEFwcGxpY2F0aW9uKHBsdWdpbikuYWRkcmVzcyB8fAogICAgLy8gVHhuLnNlbmRlciA9PT0gY2FsbGVyLm5hdGl2ZSB8fAogICAgYm56IGFyYzU4X3BsdWdpbk9wdGluRXNjcm93X2Jvb2xfdHJ1ZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTAwNAogICAgLy8gY2FsbGVyLm5hdGl2ZSA9PT0gR2xvYmFsLnplcm9BZGRyZXNzLAogICAgZGlnIDUKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgPT0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDAyLTEwMDQKICAgIC8vIFR4bi5zZW5kZXIgPT09IEFwcGxpY2F0aW9uKHBsdWdpbikuYWRkcmVzcyB8fAogICAgLy8gVHhuLnNlbmRlciA9PT0gY2FsbGVyLm5hdGl2ZSB8fAogICAgLy8gY2FsbGVyLm5hdGl2ZSA9PT0gR2xvYmFsLnplcm9BZGRyZXNzLAogICAgYnogYXJjNThfcGx1Z2luT3B0aW5Fc2Nyb3dfYm9vbF9mYWxzZUA1CgphcmM1OF9wbHVnaW5PcHRpbkVzY3Jvd19ib29sX3RydWVANDoKICAgIGludGNfMSAvLyAxCgphcmM1OF9wbHVnaW5PcHRpbkVzY3Jvd19ib29sX21lcmdlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTAwMS0xMDA2CiAgICAvLyBhc3NlcnQoCiAgICAvLyAgIFR4bi5zZW5kZXIgPT09IEFwcGxpY2F0aW9uKHBsdWdpbikuYWRkcmVzcyB8fAogICAgLy8gICBUeG4uc2VuZGVyID09PSBjYWxsZXIubmF0aXZlIHx8CiAgICAvLyAgIGNhbGxlci5uYXRpdmUgPT09IEdsb2JhbC56ZXJvQWRkcmVzcywKICAgIC8vICAgRVJSX0ZPUkJJRERFTgogICAgLy8gKQogICAgYXNzZXJ0IC8vIGZvcmJpZGRlbgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwMDgKICAgIC8vIGNvbnN0IGVzY3Jvd0FkZHJlc3MgPSBBcHBsaWNhdGlvbihlc2Nyb3dJRCkuYWRkcmVzcwogICAgZHVwCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGJ1cnkgMTAKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDEwLTEwMTcKICAgIC8vIGFzc2VydE1hdGNoKAogICAgLy8gICBtYnJQYXltZW50LAogICAgLy8gICB7CiAgICAvLyAgICAgcmVjZWl2ZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgYW1vdW50OiBHbG9iYWwuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKiBhc3NldHMubGVuZ3RoCiAgICAvLyAgIH0sCiAgICAvLyAgIEVSUl9JTlZBTElEX1BBWU1FTlQKICAgIC8vICkKICAgIGRpZyAzCiAgICBkdXAKICAgIGd0eG5zIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTAxMwogICAgLy8gcmVjZWl2ZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBjb250cm9sbGVkQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNDb250cm9sbGVkQWRkcmVzcyB9KTsKICAgIGJ5dGVjXzAgLy8gImNvbnRyb2xsZWRfYWRkcmVzcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDEzCiAgICAvLyByZWNlaXZlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTAxMC0xMDE3CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgbWJyUGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIGFtb3VudDogR2xvYmFsLmFzc2V0T3B0SW5NaW5CYWxhbmNlICogYXNzZXRzLmxlbmd0aAogICAgLy8gICB9LAogICAgLy8gICBFUlJfSU5WQUxJRF9QQVlNRU5UCiAgICAvLyApCiAgICBzd2FwCiAgICBkaWcgMQogICAgPT0KICAgIHVuY292ZXIgMgogICAgZ3R4bnMgQW1vdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTAxNAogICAgLy8gYW1vdW50OiBHbG9iYWwuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKiBhc3NldHMubGVuZ3RoCiAgICBnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKICAgIGRpZyA4CiAgICBkdXAKICAgIGNvdmVyIDQKICAgICoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDEwLTEwMTcKICAgIC8vIGFzc2VydE1hdGNoKAogICAgLy8gICBtYnJQYXltZW50LAogICAgLy8gICB7CiAgICAvLyAgICAgcmVjZWl2ZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgYW1vdW50OiBHbG9iYWwuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKiBhc3NldHMubGVuZ3RoCiAgICAvLyAgIH0sCiAgICAvLyAgIEVSUl9JTlZBTElEX1BBWU1FTlQKICAgIC8vICkKICAgID09CiAgICAmJgogICAgYXNzZXJ0IC8vIGludmFsaWQgcGF5bWVudAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwMTktMTAyNQogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIHJlY2VpdmVyOiBlc2Nyb3dBZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogR2xvYmFsLmFzc2V0T3B0SW5NaW5CYWxhbmNlICogYXNzZXRzLmxlbmd0aAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTAyMwogICAgLy8gYW1vdW50OiBHbG9iYWwuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKiBhc3NldHMubGVuZ3RoCiAgICBnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKICAgICoKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpdHhuX2ZpZWxkIFNlbmRlcgogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwMTktMTAyNAogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIHJlY2VpdmVyOiBlc2Nyb3dBZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogR2xvYmFsLmFzc2V0T3B0SW5NaW5CYWxhbmNlICogYXNzZXRzLmxlbmd0aAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwMTktMTAyNQogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIHJlY2VpdmVyOiBlc2Nyb3dBZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogR2xvYmFsLmFzc2V0T3B0SW5NaW5CYWxhbmNlICogYXNzZXRzLmxlbmd0aAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwMjcKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhc3NldHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMCAvLyAwCiAgICBidXJ5IDcKCmFyYzU4X3BsdWdpbk9wdGluRXNjcm93X3doaWxlX3RvcEA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwMjcKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhc3NldHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGRpZyA2CiAgICBkaWcgNAogICAgPAogICAgYnogYXJjNThfcGx1Z2luT3B0aW5Fc2Nyb3dfYWZ0ZXJfd2hpbGVAMTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDI5CiAgICAvLyB0aGlzLmFsbG93YW5jZXMoeyBlc2Nyb3csIGFzc2V0OiBhc3NldHNbaV0gfSkuZXhpc3RzLAogICAgZGlnIDQKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgNwogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzMgLy8gOAogICAgKgogICAgZXh0cmFjdF91aW50NjQKICAgIGR1cAogICAgaXRvYgogICAgYnl0ZWMgMTMgLy8gMHgwMDBhCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGRpZyA0CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozOQogICAgLy8gYWxsb3dhbmNlcyA9IEJveE1hcDxBbGxvd2FuY2VLZXksIEFsbG93YW5jZUluZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhBbGxvd2FuY2VzIH0pIC8vIDM4XzUwMAogICAgYnl0ZWMgMTQgLy8gImEiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDI5CiAgICAvLyB0aGlzLmFsbG93YW5jZXMoeyBlc2Nyb3csIGFzc2V0OiBhc3NldHNbaV0gfSkuZXhpc3RzLAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTAyOC0xMDMxCiAgICAvLyBhc3NlcnQoCiAgICAvLyAgIHRoaXMuYWxsb3dhbmNlcyh7IGVzY3JvdywgYXNzZXQ6IGFzc2V0c1tpXSB9KS5leGlzdHMsCiAgICAvLyAgIEVSUl9BTExPV0FOQ0VfRE9FU19OT1RfRVhJU1QKICAgIC8vICk7CiAgICBhc3NlcnQgLy8gYWxsb3dhbmNlIGRvZXMgbm90IGV4aXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTAzMy0xMDQwCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBzZW5kZXI6IGVzY3Jvd0FkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogZXNjcm93QWRkcmVzcywKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0c1tpXQogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwMzcKICAgIC8vIGFzc2V0QW1vdW50OiAwLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGRpZyA4CiAgICBkdXAKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDMzLTEwMzkKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIHNlbmRlcjogZXNjcm93QWRkcmVzcywKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBlc2Nyb3dBZGRyZXNzLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIHhmZXJBc3NldDogYXNzZXRzW2ldCiAgICAvLyAgIH0pCiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTAzMy0xMDQwCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBzZW5kZXI6IGVzY3Jvd0FkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogZXNjcm93QWRkcmVzcywKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0c1tpXQogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwMjcKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhc3NldHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDcKICAgIGIgYXJjNThfcGx1Z2luT3B0aW5Fc2Nyb3dfd2hpbGVfdG9wQDgKCmFyYzU4X3BsdWdpbk9wdGluRXNjcm93X2FmdGVyX3doaWxlQDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjk4Ni05OTIKICAgIC8vIGFyYzU4X3BsdWdpbk9wdGluRXNjcm93KAogICAgLy8gICBwbHVnaW46IHVpbnQ2NCwKICAgIC8vICAgY2FsbGVyOiBBZGRyZXNzLAogICAgLy8gICBlc2Nyb3c6IHN0cmluZywKICAgIC8vICAgYXNzZXRzOiB1aW50NjRbXSwKICAgIC8vICAgbWJyUGF5bWVudDogZ3R4bi5QYXltZW50VHhuCiAgICAvLyApOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmFyYzU4X3BsdWdpbk9wdGluRXNjcm93X2Jvb2xfZmFsc2VANToKICAgIGludGNfMCAvLyAwCiAgICBiIGFyYzU4X3BsdWdpbk9wdGluRXNjcm93X2Jvb2xfbWVyZ2VANgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfYWRkQWxsb3dhbmNlc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CmFyYzU4X2FkZEFsbG93YW5jZXM6CiAgICBpbnRjXzAgLy8gMAogICAgZHVwbiA0CiAgICBieXRlY18xIC8vICIiCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDUwCiAgICAvLyBhcmM1OF9hZGRBbGxvd2FuY2VzKGVzY3Jvdzogc3RyaW5nLCBhbGxvd2FuY2VzOiBBZGRBbGxvd2FuY2VJbmZvW10pOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbit1dGY4W10pCiAgICBleHRyYWN0IDIgMAogICAgZHVwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAKICAgIGNvdmVyIDMKICAgIHB1c2hpbnQgMzQgLy8gMzQKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rKHVpbnQ2NCx1aW50OCx1aW50NjQsdWludDY0LHVpbnQ2NCxib29sMSlbXSkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDUxCiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSwgRVJSX0FETUlOX09OTFkpOwogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNgogICAgLy8gYWRtaW4gPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQWRtaW4gfSkKICAgIGJ5dGVjXzIgLy8gImFkbWluIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwNTEKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSB0aGlzLmFkbWluLnZhbHVlLCBFUlJfQURNSU5fT05MWSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBhZG1pbiBvbmx5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzcKICAgIC8vIGVzY3Jvd3MgPSBCb3hNYXA8c3RyaW5nLCBFc2Nyb3dJbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4RXNjcm93cyB9KQogICAgYnl0ZWMgNSAvLyAiZSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwNTIKICAgIC8vIGFzc2VydCh0aGlzLmVzY3Jvd3MoZXNjcm93KS5leGlzdHMsIEVSUl9FU0NST1dfRE9FU19OT1RfRVhJU1QpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBlc2Nyb3cgZG9lcyBub3QgZXhpc3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDUzCiAgICAvLyBhc3NlcnQoIXRoaXMuZXNjcm93cyhlc2Nyb3cpLnZhbHVlLmxvY2tlZCwgRVJSX0VTQ1JPV19MT0NLRUQpOwogICAgYm94X2dldAogICAgcG9wCiAgICBwdXNoaW50IDY0IC8vIDY0CiAgICBnZXRiaXQKICAgICEKICAgIGFzc2VydCAvLyBFc2Nyb3cgaXMgbG9ja2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTA1NQogICAgLy8gaWYgKHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUgIT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzKSB7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBjb250cm9sbGVkQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNDb250cm9sbGVkQWRkcmVzcyB9KTsKICAgIGJ5dGVjXzAgLy8gImNvbnRyb2xsZWRfYWRkcmVzcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDU1CiAgICAvLyBpZiAodGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSAhPT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MpIHsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgIT0KICAgIGJ6IGFyYzU4X2FkZEFsbG93YW5jZXNfYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTA1Ni0xMDYyCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogdGhpcy5hbGxvd2FuY2VzTWJyKGVzY3JvdykgKiBhbGxvd2FuY2VzLmxlbmd0aAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDU4CiAgICAvLyBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4CiAgICAvLyBjb250cm9sbGVkQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNDb250cm9sbGVkQWRkcmVzcyB9KTsKICAgIGJ5dGVjXzAgLy8gImNvbnRyb2xsZWRfYWRkcmVzcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDU4CiAgICAvLyBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwNTkKICAgIC8vIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NjYKICAgIC8vIHJldHVybiBNaW5BbGxvd2FuY2VNQlIgKyAoQm94Q29zdFBlckJ5dGUgKiBCeXRlcyhlc2Nyb3cpLmxlbmd0aCk7CiAgICBkaWcgNAogICAgbGVuCiAgICBpbnRjIDQgLy8gNDAwCiAgICAqCiAgICBpbnRjIDYgLy8gMjc3MDAKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDYwCiAgICAvLyBhbW91bnQ6IHRoaXMuYWxsb3dhbmNlc01icihlc2Nyb3cpICogYWxsb3dhbmNlcy5sZW5ndGgKICAgIGRpZyAzCiAgICAqCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgaXR4bl9maWVsZCBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDU2LTEwNjEKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiB0aGlzLmFsbG93YW5jZXNNYnIoZXNjcm93KSAqIGFsbG93YW5jZXMubGVuZ3RoCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTA1Ni0xMDYyCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogdGhpcy5hbGxvd2FuY2VzTWJyKGVzY3JvdykgKiBhbGxvd2FuY2VzLmxlbmd0aAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CgphcmM1OF9hZGRBbGxvd2FuY2VzX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDY1CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgYWxsb3dhbmNlcy5sZW5ndGg7IGkgKz0gMSkgewogICAgaW50Y18wIC8vIDAKICAgIGJ1cnkgNQoKYXJjNThfYWRkQWxsb3dhbmNlc193aGlsZV90b3BANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDY1CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgYWxsb3dhbmNlcy5sZW5ndGg7IGkgKz0gMSkgewogICAgZGlnIDQKICAgIGRpZyAxCiAgICA8CiAgICBieiBhcmM1OF9hZGRBbGxvd2FuY2VzX2FmdGVyX3doaWxlQDEwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTA2NgogICAgLy8gY29uc3QgeyBhc3NldCwgdHlwZSwgYW1vdW50LCBtYXgsIGludGVydmFsLCB1c2VSb3VuZHMgfSA9IGFsbG93YW5jZXNbaV07CiAgICBkaWcgMQogICAgZXh0cmFjdCAyIDAKICAgIGRpZyA1CiAgICBwdXNoaW50IDM0IC8vIDM0CiAgICAqCiAgICBwdXNoaW50IDM0IC8vIDM0CiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGR1cAogICAgZXh0cmFjdCAwIDgKICAgIGRpZyAxCiAgICBleHRyYWN0IDggMQogICAgYnVyeSA4CiAgICBkaWcgMQogICAgZXh0cmFjdCA5IDgKICAgIGJ1cnkgMTIKICAgIGRpZyAxCiAgICBleHRyYWN0IDE3IDgKICAgIGJ1cnkgMTEKICAgIGRpZyAxCiAgICBleHRyYWN0IDI1IDgKICAgIGJ1cnkgMTAKICAgIHN3YXAKICAgIHB1c2hpbnQgMjY0IC8vIDI2NAogICAgZ2V0Yml0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGJ1cnkgNgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwNjcKICAgIC8vIGNvbnN0IGtleTogQWxsb3dhbmNlS2V5ID0geyBlc2Nyb3csIGFzc2V0IH0KICAgIGRpZyA0CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWMgMTMgLy8gMHgwMDBhCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGFsbG93YW5jZXMgPSBCb3hNYXA8QWxsb3dhbmNlS2V5LCBBbGxvd2FuY2VJbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4QWxsb3dhbmNlcyB9KSAvLyAzOF81MDAKICAgIGJ5dGVjIDE0IC8vICJhIgogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGJ1cnkgOQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwNjgKICAgIC8vIGFzc2VydCghdGhpcy5hbGxvd2FuY2VzKGtleSkuZXhpc3RzLCBFUlJfQUxMT1dBTkNFX0FMUkVBRFlfRVhJU1RTKTsKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIGFsbG93YW5jZSBhbHJlYWR5IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwNjkKICAgIC8vIGNvbnN0IHN0YXJ0ID0gdXNlUm91bmRzID8gR2xvYmFsLnJvdW5kIDogR2xvYmFsLmxhdGVzdFRpbWVzdGFtcDsKICAgIGJ6IGFyYzU4X2FkZEFsbG93YW5jZXNfdGVybmFyeV9mYWxzZUA4CiAgICBnbG9iYWwgUm91bmQKCmFyYzU4X2FkZEFsbG93YW5jZXNfdGVybmFyeV9tZXJnZUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwNzEtMTA4MAogICAgLy8gdGhpcy5hbGxvd2FuY2VzKGtleSkudmFsdWUgPSB7CiAgICAvLyAgIHR5cGUsCiAgICAvLyAgIHNwZW50OiAwLAogICAgLy8gICBhbW91bnQsCiAgICAvLyAgIGxhc3Q6IDAsCiAgICAvLyAgIG1heCwKICAgIC8vICAgaW50ZXJ2YWwsCiAgICAvLyAgIHN0YXJ0LAogICAgLy8gICB1c2VSb3VuZHMKICAgIC8vIH0KICAgIGRpZyA2CiAgICBkaWcgMTAKICAgIGNvbmNhdAogICAgZGlnIDExCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDczCiAgICAvLyBzcGVudDogMCwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTA3MS0xMDgwCiAgICAvLyB0aGlzLmFsbG93YW5jZXMoa2V5KS52YWx1ZSA9IHsKICAgIC8vICAgdHlwZSwKICAgIC8vICAgc3BlbnQ6IDAsCiAgICAvLyAgIGFtb3VudCwKICAgIC8vICAgbGFzdDogMCwKICAgIC8vICAgbWF4LAogICAgLy8gICBpbnRlcnZhbCwKICAgIC8vICAgc3RhcnQsCiAgICAvLyAgIHVzZVJvdW5kcwogICAgLy8gfQogICAgaXRvYgogICAgc3dhcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZGlnIDEwCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgc3dhcAogICAgaXRvYgogICAgY29uY2F0CiAgICBieXRlYyA5IC8vIDB4MDAKICAgIGludGNfMCAvLyAwCiAgICBkaWcgNgogICAgc2V0Yml0CiAgICBjb25jYXQKICAgIGRpZyA3CiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTA2NQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGFsbG93YW5jZXMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGRpZyA0CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSA1CiAgICBiIGFyYzU4X2FkZEFsbG93YW5jZXNfd2hpbGVfdG9wQDUKCmFyYzU4X2FkZEFsbG93YW5jZXNfdGVybmFyeV9mYWxzZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwNjkKICAgIC8vIGNvbnN0IHN0YXJ0ID0gdXNlUm91bmRzID8gR2xvYmFsLnJvdW5kIDogR2xvYmFsLmxhdGVzdFRpbWVzdGFtcDsKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGIgYXJjNThfYWRkQWxsb3dhbmNlc190ZXJuYXJ5X21lcmdlQDkKCmFyYzU4X2FkZEFsbG93YW5jZXNfYWZ0ZXJfd2hpbGVAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIGxhc3RVc2VySW50ZXJhY3Rpb24gPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNMYXN0VXNlckludGVyYWN0aW9uIH0pCiAgICBieXRlY18zIC8vICJsYXN0X3VzZXJfaW50ZXJhY3Rpb24iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHRoaXMubGFzdFVzZXJJbnRlcmFjdGlvbi52YWx1ZSA9IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjIKICAgIC8vIGxhc3RDaGFuZ2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNMYXN0Q2hhbmdlIH0pCiAgICBieXRlYyA2IC8vICJsYXN0X2NoYW5nZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0OAogICAgLy8gdGhpcy5sYXN0Q2hhbmdlLnZhbHVlID0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDUwCiAgICAvLyBhcmM1OF9hZGRBbGxvd2FuY2VzKGVzY3Jvdzogc3RyaW5nLCBhbGxvd2FuY2VzOiBBZGRBbGxvd2FuY2VJbmZvW10pOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3JlbW92ZUFsbG93YW5jZXNbcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF9yZW1vdmVBbGxvd2FuY2VzOgogICAgYnl0ZWNfMSAvLyAiIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwOTMKICAgIC8vIGFyYzU4X3JlbW92ZUFsbG93YW5jZXMoZXNjcm93OiBzdHJpbmcsIGFzc2V0czogdWludDY0W10pOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbit1dGY4W10pCiAgICBleHRyYWN0IDIgMAogICAgZHVwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgc3dhcAogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3VpbnQ2NFtdKQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwOTQKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSB0aGlzLmFkbWluLnZhbHVlLCBFUlJfQURNSU5fT05MWSk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE2CiAgICAvLyBhZG1pbiA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNBZG1pbiB9KQogICAgYnl0ZWNfMiAvLyAiYWRtaW4iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTA5NAogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuYWRtaW4udmFsdWUsIEVSUl9BRE1JTl9PTkxZKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIGFkbWluIG9ubHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNwogICAgLy8gZXNjcm93cyA9IEJveE1hcDxzdHJpbmcsIEVzY3Jvd0luZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhFc2Nyb3dzIH0pCiAgICBieXRlYyA1IC8vICJlIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTA5NQogICAgLy8gYXNzZXJ0KHRoaXMuZXNjcm93cyhlc2Nyb3cpLmV4aXN0cywgRVJSX0VTQ1JPV19ET0VTX05PVF9FWElTVCk7CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGVzY3JvdyBkb2VzIG5vdCBleGlzdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwOTYKICAgIC8vIGFzc2VydCghdGhpcy5lc2Nyb3dzKGVzY3JvdykudmFsdWUubG9ja2VkLCBFUlJfRVNDUk9XX0xPQ0tFRCk7CiAgICBib3hfZ2V0CiAgICBwb3AKICAgIHB1c2hpbnQgNjQgLy8gNjQKICAgIGdldGJpdAogICAgIQogICAgYXNzZXJ0IC8vIEVzY3JvdyBpcyBsb2NrZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDk4CiAgICAvLyBpZiAodGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSAhPT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MpIHsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGNvbnRyb2xsZWRBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0NvbnRyb2xsZWRBZGRyZXNzIH0pOwogICAgYnl0ZWNfMCAvLyAiY29udHJvbGxlZF9hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwOTgKICAgIC8vIGlmICh0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlICE9PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcykgewogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAhPQogICAgYnogYXJjNThfcmVtb3ZlQWxsb3dhbmNlc19hZnRlcl9pZl9lbHNlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDk5LTExMDQKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHJlY2VpdmVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIGFtb3VudDogdGhpcy5hbGxvd2FuY2VzTWJyKGVzY3JvdykgKiBhc3NldHMubGVuZ3RoCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExMDEKICAgIC8vIHJlY2VpdmVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29udHJvbGxlZEFkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ29udHJvbGxlZEFkZHJlc3MgfSk7CiAgICBieXRlY18wIC8vICJjb250cm9sbGVkX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTEwMQogICAgLy8gcmVjZWl2ZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjY2CiAgICAvLyByZXR1cm4gTWluQWxsb3dhbmNlTUJSICsgKEJveENvc3RQZXJCeXRlICogQnl0ZXMoZXNjcm93KS5sZW5ndGgpOwogICAgZGlnIDMKICAgIGxlbgogICAgaW50YyA0IC8vIDQwMAogICAgKgogICAgaW50YyA2IC8vIDI3NzAwCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTEwMgogICAgLy8gYW1vdW50OiB0aGlzLmFsbG93YW5jZXNNYnIoZXNjcm93KSAqIGFzc2V0cy5sZW5ndGgKICAgIGRpZyAyCiAgICAqCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwOTktMTEwMwogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgcmVjZWl2ZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgYW1vdW50OiB0aGlzLmFsbG93YW5jZXNNYnIoZXNjcm93KSAqIGFzc2V0cy5sZW5ndGgKICAgIC8vICAgfSkKICAgIGludGNfMSAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDk5LTExMDQKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHJlY2VpdmVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIGFtb3VudDogdGhpcy5hbGxvd2FuY2VzTWJyKGVzY3JvdykgKiBhc3NldHMubGVuZ3RoCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKCmFyYzU4X3JlbW92ZUFsbG93YW5jZXNfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExMDcKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhc3NldHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMCAvLyAwCiAgICBidXJ5IDQKCmFyYzU4X3JlbW92ZUFsbG93YW5jZXNfd2hpbGVfdG9wQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTEwNwogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGFzc2V0cy5sZW5ndGg7IGkgKz0gMSkgewogICAgZGlnIDMKICAgIGRpZyAxCiAgICA8CiAgICBieiBhcmM1OF9yZW1vdmVBbGxvd2FuY2VzX2FmdGVyX3doaWxlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTEwCiAgICAvLyBhc3NldDogYXNzZXRzW2ldCiAgICBkaWcgMQogICAgZXh0cmFjdCAyIDAKICAgIGRpZyA0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTEwOC0xMTExCiAgICAvLyBjb25zdCBrZXk6IEFsbG93YW5jZUtleSA9IHsKICAgIC8vICAgZXNjcm93LAogICAgLy8gICBhc3NldDogYXNzZXRzW2ldCiAgICAvLyB9CiAgICBkaWcgNAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjIDEzIC8vIDB4MDAwYQogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBhbGxvd2FuY2VzID0gQm94TWFwPEFsbG93YW5jZUtleSwgQWxsb3dhbmNlSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeEFsbG93YW5jZXMgfSkgLy8gMzhfNTAwCiAgICBieXRlYyAxNCAvLyAiYSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExMTIKICAgIC8vIGFzc2VydCh0aGlzLmFsbG93YW5jZXMoa2V5KS5leGlzdHMsIEVSUl9BTExPV0FOQ0VfRE9FU19OT1RfRVhJU1QpCiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGFsbG93YW5jZSBkb2VzIG5vdCBleGlzdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExMTMKICAgIC8vIHRoaXMuYWxsb3dhbmNlcyhrZXkpLmRlbGV0ZSgpCiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTA3CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgYXNzZXRzLmxlbmd0aDsgaSArPSAxKSB7CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSA0CiAgICBiIGFyYzU4X3JlbW92ZUFsbG93YW5jZXNfd2hpbGVfdG9wQDUKCmFyYzU4X3JlbW92ZUFsbG93YW5jZXNfYWZ0ZXJfd2hpbGVANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gbGFzdFVzZXJJbnRlcmFjdGlvbiA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0xhc3RVc2VySW50ZXJhY3Rpb24gfSkKICAgIGJ5dGVjXzMgLy8gImxhc3RfdXNlcl9pbnRlcmFjdGlvbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NAogICAgLy8gdGhpcy5sYXN0VXNlckludGVyYWN0aW9uLnZhbHVlID0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMgogICAgLy8gbGFzdENoYW5nZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0xhc3RDaGFuZ2UgfSkKICAgIGJ5dGVjIDYgLy8gImxhc3RfY2hhbmdlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyB0aGlzLmxhc3RDaGFuZ2UudmFsdWUgPSBHbG9iYWwubGF0ZXN0VGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwOTMKICAgIC8vIGFyYzU4X3JlbW92ZUFsbG93YW5jZXMoZXNjcm93OiBzdHJpbmcsIGFzc2V0czogdWludDY0W10pOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X2FkZEV4ZWN1dGlvbktleVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmFyYzU4X2FkZEV4ZWN1dGlvbktleToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTIwCiAgICAvLyBhcmM1OF9hZGRFeGVjdXRpb25LZXkobGVhc2U6IGJ5dGVzPDMyPiwgZ3JvdXBzOiBieXRlczwzMj5bXSwgZmlyc3RWYWxpZDogdWludDY0LCBsYXN0VmFsaWQ6IHVpbnQ2NCk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ4WzMyXQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgcHVzaGludCAzMiAvLyAzMgogICAgKgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbit1aW50OFszMl1bXSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICBjb3ZlciAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgY292ZXIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExMjEKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSB0aGlzLmFkbWluLnZhbHVlLCBFUlJfQURNSU5fT05MWSkKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIGFkbWluID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0FkbWluIH0pCiAgICBieXRlY18yIC8vICJhZG1pbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTIxCiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSwgRVJSX0FETUlOX09OTFkpCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBhZG1pbiBvbmx5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIGV4ZWN1dGlvbnMgPSBCb3hNYXA8Ynl0ZXM8MzI+LCBFeGVjdXRpb25JbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4RXhlY3V0aW9ucyB9KQogICAgYnl0ZWMgOCAvLyAieCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBjb3ZlciAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTEyMgogICAgLy8gaWYgKCF0aGlzLmV4ZWN1dGlvbnMobGVhc2UpLmV4aXN0cykgewogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBibnogYXJjNThfYWRkRXhlY3V0aW9uS2V5X2Vsc2VfYm9keUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTEyMy0xMTI3CiAgICAvLyB0aGlzLmV4ZWN1dGlvbnMobGVhc2UpLnZhbHVlID0gewogICAgLy8gICBncm91cHM6IGNsb25lKGdyb3VwcyksCiAgICAvLyAgIGZpcnN0VmFsaWQsCiAgICAvLyAgIGxhc3RWYWxpZAogICAgLy8gfQogICAgZGlnIDMKICAgIGl0b2IKICAgIHB1c2hieXRlcyAweDAwMTIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZGlnIDEKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICBzd2FwCiAgICBib3hfcHV0CgphcmM1OF9hZGRFeGVjdXRpb25LZXlfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyBsYXN0VXNlckludGVyYWN0aW9uID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzTGFzdFVzZXJJbnRlcmFjdGlvbiB9KQogICAgYnl0ZWNfMyAvLyAibGFzdF91c2VyX2ludGVyYWN0aW9uIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyB0aGlzLmxhc3RVc2VySW50ZXJhY3Rpb24udmFsdWUgPSBHbG9iYWwubGF0ZXN0VGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIyCiAgICAvLyBsYXN0Q2hhbmdlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzTGFzdENoYW5nZSB9KQogICAgYnl0ZWMgNiAvLyAibGFzdF9jaGFuZ2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIHRoaXMubGFzdENoYW5nZS52YWx1ZSA9IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTEyMAogICAgLy8gYXJjNThfYWRkRXhlY3V0aW9uS2V5KGxlYXNlOiBieXRlczwzMj4sIGdyb3VwczogYnl0ZXM8MzI+W10sIGZpcnN0VmFsaWQ6IHVpbnQ2NCwgbGFzdFZhbGlkOiB1aW50NjQpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCmFyYzU4X2FkZEV4ZWN1dGlvbktleV9lbHNlX2JvZHlAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTI5CiAgICAvLyBhc3NlcnQodGhpcy5leGVjdXRpb25zKGxlYXNlKS52YWx1ZS5maXJzdFZhbGlkID09PSBmaXJzdFZhbGlkLCBFUlJfRVhFQ1VUSU9OX0tFWV9VUERBVEVfTVVTVF9NQVRDSF9GSVJTVF9WQUxJRCkKICAgIGRpZyAyCiAgICBkdXAKICAgIGludGNfMiAvLyAyCiAgICBpbnRjXzMgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGRpZyA1CiAgICA9PQogICAgYXNzZXJ0IC8vIGV4ZWN1dGlvbiBrZXkgdXBkYXRlIG11c3QgbWF0Y2ggZmlyc3QgdmFsaWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTMwCiAgICAvLyBhc3NlcnQodGhpcy5leGVjdXRpb25zKGxlYXNlKS52YWx1ZS5sYXN0VmFsaWQgPT09IGxhc3RWYWxpZCwgRVJSX0VYRUNVVElPTl9LRVlfVVBEQVRFX01VU1RfTUFUQ0hfTEFTVF9WQUxJRCkKICAgIGR1cAogICAgcHVzaGludCAxMCAvLyAxMAogICAgaW50Y18zIC8vIDgKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICB1bmNvdmVyIDMKICAgID09CiAgICBhc3NlcnQgLy8gZXhlY3V0aW9uIGtleSB1cGRhdGUgbXVzdCBtYXRjaCBsYXN0IHZhbGlkCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTEzMgogICAgLy8gdGhpcy5leGVjdXRpb25zKGxlYXNlKS52YWx1ZS5ncm91cHMgPSBbLi4uY2xvbmUodGhpcy5leGVjdXRpb25zKGxlYXNlKS52YWx1ZS5ncm91cHMpLCAuLi5jbG9uZShncm91cHMpXQogICAgZHVwCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMQogICAgbGVuCiAgICBkaWcgMgogICAgZGlnIDIKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgdW5jb3ZlciA0CiAgICBleHRyYWN0IDIgMAogICAgY29uY2F0IC8vIG9uIGVycm9yOiBtYXggYXJyYXkgbGVuZ3RoIGV4Y2VlZGVkCiAgICBkdXAKICAgIGV4dHJhY3QgMiAwCiAgICBsZW4KICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgIC8KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICByZXBsYWNlMiAwCiAgICB1bmNvdmVyIDIKICAgIGludGNfMCAvLyAwCiAgICB1bmNvdmVyIDMKICAgIGV4dHJhY3QzCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBib3hfZGVsCiAgICBwb3AKICAgIGJveF9wdXQKICAgIGIgYXJjNThfYWRkRXhlY3V0aW9uS2V5X2FmdGVyX2lmX2Vsc2VANAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVtb3ZlRXhlY3V0aW9uS2V5W3JvdXRpbmddKCkgLT4gdm9pZDoKYXJjNThfcmVtb3ZlRXhlY3V0aW9uS2V5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExMzkKICAgIC8vIGFyYzU4X3JlbW92ZUV4ZWN1dGlvbktleShsZWFzZTogYnl0ZXM8MzI+KTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCAzMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDhbMzJdCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIGV4ZWN1dGlvbnMgPSBCb3hNYXA8Ynl0ZXM8MzI+LCBFeGVjdXRpb25JbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4RXhlY3V0aW9ucyB9KQogICAgYnl0ZWMgOCAvLyAieCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE0MAogICAgLy8gYXNzZXJ0KHRoaXMuZXhlY3V0aW9ucyhsZWFzZSkuZXhpc3RzLCBFUlJfRVhFQ1VUSU9OX0tFWV9ET0VTX05PVF9FWElTVCkKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGV4ZWN1dGlvbiBrZXkgZG9lcyBub3QgZXhpc3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTQxCiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSB8fCB0aGlzLmV4ZWN1dGlvbnMobGVhc2UpLnZhbHVlLmxhc3RWYWxpZCA8IEdsb2JhbC5yb3VuZCwgRVJSX0FETUlOX09OTFkpCiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE2CiAgICAvLyBhZG1pbiA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNBZG1pbiB9KQogICAgYnl0ZWNfMiAvLyAiYWRtaW4iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE0MQogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IHRoaXMuYWRtaW4udmFsdWUgfHwgdGhpcy5leGVjdXRpb25zKGxlYXNlKS52YWx1ZS5sYXN0VmFsaWQgPCBHbG9iYWwucm91bmQsIEVSUl9BRE1JTl9PTkxZKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBibnogYXJjNThfcmVtb3ZlRXhlY3V0aW9uS2V5X2Jvb2xfdHJ1ZUAzCiAgICBkdXAKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIGludGNfMyAvLyA4CiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgZ2xvYmFsIFJvdW5kCiAgICA8CiAgICBieiBhcmM1OF9yZW1vdmVFeGVjdXRpb25LZXlfYm9vbF9mYWxzZUA0CgphcmM1OF9yZW1vdmVFeGVjdXRpb25LZXlfYm9vbF90cnVlQDM6CiAgICBpbnRjXzEgLy8gMQoKYXJjNThfcmVtb3ZlRXhlY3V0aW9uS2V5X2Jvb2xfbWVyZ2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTQxCiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gdGhpcy5hZG1pbi52YWx1ZSB8fCB0aGlzLmV4ZWN1dGlvbnMobGVhc2UpLnZhbHVlLmxhc3RWYWxpZCA8IEdsb2JhbC5yb3VuZCwgRVJSX0FETUlOX09OTFkpCiAgICBhc3NlcnQgLy8gYWRtaW4gb25seQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNDMKICAgIC8vIHRoaXMuZXhlY3V0aW9ucyhsZWFzZSkuZGVsZXRlKCkKICAgIGR1cAogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIGxhc3RVc2VySW50ZXJhY3Rpb24gPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNMYXN0VXNlckludGVyYWN0aW9uIH0pCiAgICBieXRlY18zIC8vICJsYXN0X3VzZXJfaW50ZXJhY3Rpb24iCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHRoaXMubGFzdFVzZXJJbnRlcmFjdGlvbi52YWx1ZSA9IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXAKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjIKICAgIC8vIGxhc3RDaGFuZ2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNMYXN0Q2hhbmdlIH0pCiAgICBieXRlYyA2IC8vICJsYXN0X2NoYW5nZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0OAogICAgLy8gdGhpcy5sYXN0Q2hhbmdlLnZhbHVlID0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTM5CiAgICAvLyBhcmM1OF9yZW1vdmVFeGVjdXRpb25LZXkobGVhc2U6IGJ5dGVzPDMyPik6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKYXJjNThfcmVtb3ZlRXhlY3V0aW9uS2V5X2Jvb2xfZmFsc2VANDoKICAgIGludGNfMCAvLyAwCiAgICBiIGFyYzU4X3JlbW92ZUV4ZWN1dGlvbktleV9ib29sX21lcmdlQDUKCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X2dldFBsdWdpbnNbcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF9nZXRQbHVnaW5zOgogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gIiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTQ5CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTUxCiAgICAvLyBsZXQgcGx1Z2luczogUGx1Z2luSW5mb1tdID0gW10KICAgIGJ5dGVjIDEwIC8vIDB4MDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNTIKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSArPSAxKSB7CiAgICBpbnRjXzAgLy8gMAoKYXJjNThfZ2V0UGx1Z2luc193aGlsZV90b3BAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTUyCiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkgKz0gMSkgewogICAgZGlnIDIKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwCiAgICBidXJ5IDUKICAgIGRpZyAxCiAgICA+CiAgICBieiBhcmM1OF9nZXRQbHVnaW5zX2FmdGVyX3doaWxlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTUzCiAgICAvLyBpZiAodGhpcy5wbHVnaW5zKGtleXNbaV0pLmV4aXN0cykgewogICAgZGlnIDIKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgZGlnIDEKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICB1bmNvdmVyIDIKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBkdXAKICAgIGJ1cnkgNAogICAgZGlnIDYKICAgIGRpZyAxCiAgICAtIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgZGlnIDMKICAgIGxlbgogICAgdW5jb3ZlciAyCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgZGlnIDQKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgc3Vic3RyaW5nMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBwbHVnaW5zID0gQm94TWFwPFBsdWdpbktleSwgUGx1Z2luSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeFBsdWdpbnMgfSk7CiAgICBieXRlYyA0IC8vICJwIgogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGJ1cnkgNgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNTMKICAgIC8vIGlmICh0aGlzLnBsdWdpbnMoa2V5c1tpXSkuZXhpc3RzKSB7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJ6IGFyYzU4X2dldFBsdWdpbnNfYWZ0ZXJfaWZfZWxzZUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE1NAogICAgLy8gcGx1Z2lucy5wdXNoKHRoaXMucGx1Z2lucyhrZXlzW2ldKS52YWx1ZSkKICAgIGRpZyA0CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgZGlnIDIKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBleHRyYWN0IDIgMAogICAgYnl0ZWMgMjAgLy8gMHgwMDAyCiAgICB1bmNvdmVyIDMKICAgIGNvbmNhdAogICAgY292ZXIgMgogICAgaW50Y18xIC8vIDEKICAgIHVuY292ZXIgMwogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnQKICAgIGJ1cnkgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNTUKICAgIC8vIGNvbnRpbnVlCiAgICBiIGFyYzU4X2dldFBsdWdpbnNfd2hpbGVfdG9wQDIKCmFyYzU4X2dldFBsdWdpbnNfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNTcKICAgIC8vIHBsdWdpbnMucHVzaChlbXB0eVBsdWdpbkluZm8oKSkKICAgIGRpZyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgc3dhcAogICAgZXh0cmFjdCAyIDAKICAgIGludGNfMSAvLyAxCiAgICBieXRlYyAyMSAvLyAweDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAogICAgY2FsbHN1YiBkeW5hbWljX2FycmF5X2NvbmNhdF9keW5hbWljX2VsZW1lbnQKICAgIGJ1cnkgMgogICAgYiBhcmM1OF9nZXRQbHVnaW5zX3doaWxlX3RvcEAyCgphcmM1OF9nZXRQbHVnaW5zX2FmdGVyX3doaWxlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE0OQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBieXRlYyA3IC8vIDB4MTUxZjdjNzUKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfZ2V0TmFtZWRQbHVnaW5zW3JvdXRpbmddKCkgLT4gdm9pZDoKYXJjNThfZ2V0TmFtZWRQbHVnaW5zOgogICAgaW50Y18wIC8vIDAKICAgIGR1cAogICAgYnl0ZWNfMSAvLyAiIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNjIKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNjQKICAgIC8vIGxldCBwbHVnaW5zOiBQbHVnaW5JbmZvW10gPSBbXQogICAgYnl0ZWMgMTAgLy8gMHgwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE2NQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSArPSAxKSB7CiAgICBpbnRjXzAgLy8gMAoKYXJjNThfZ2V0TmFtZWRQbHVnaW5zX3doaWxlX3RvcEAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNjUKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkgKz0gMSkgewogICAgZGlnIDIKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDEKICAgID4KICAgIGR1cAogICAgYnVyeSA1CiAgICBieiBhcmM1OF9nZXROYW1lZFBsdWdpbnNfYWZ0ZXJfd2hpbGVAOQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNjYKICAgIC8vIGlmICh0aGlzLm5hbWVkUGx1Z2lucyhuYW1lc1tpXSkuZXhpc3RzKSB7CiAgICBkaWcgMgogICAgZXh0cmFjdCAyIDAKICAgIGRpZyA0CiAgICBhc3NlcnQgLy8gaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGRpZyAxCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgZGlnIDEKICAgIHN3YXAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAyCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGV4dHJhY3QzCiAgICBleHRyYWN0IDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM1CiAgICAvLyBuYW1lZFBsdWdpbnMgPSBCb3hNYXA8c3RyaW5nLCBQbHVnaW5LZXk+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhOYW1lZFBsdWdpbnMgfSk7CiAgICBieXRlYyAxNiAvLyAibiIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICBidXJ5IDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTY2CiAgICAvLyBpZiAodGhpcy5uYW1lZFBsdWdpbnMobmFtZXNbaV0pLmV4aXN0cykgewogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBhcmM1OF9nZXROYW1lZFBsdWdpbnNfYWZ0ZXJfaWZfZWxzZUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE2NwogICAgLy8gY29uc3QgbmFtZUtleSA9IGNsb25lKHRoaXMubmFtZWRQbHVnaW5zKG5hbWVzW2ldKS52YWx1ZSkKICAgIGRpZyA1CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBwbHVnaW5zID0gQm94TWFwPFBsdWdpbktleSwgUGx1Z2luSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeFBsdWdpbnMgfSk7CiAgICBieXRlYyA0IC8vICJwIgogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGJ1cnkgNgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNjgKICAgIC8vIGlmICh0aGlzLnBsdWdpbnMobmFtZUtleSkuZXhpc3RzKSB7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJ6IGFyYzU4X2dldE5hbWVkUGx1Z2luc19hZnRlcl9pZl9lbHNlQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTY5CiAgICAvLyBwbHVnaW5zLnB1c2godGhpcy5wbHVnaW5zKG5hbWVLZXkpLnZhbHVlKQogICAgZGlnIDQKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBkaWcgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIHN3YXAKICAgIGV4dHJhY3QgMiAwCiAgICBieXRlYyAyMCAvLyAweDAwMDIKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICBjb3ZlciAyCiAgICBpbnRjXzEgLy8gMQogICAgdW5jb3ZlciAzCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudAogICAgYnVyeSAyCgphcmM1OF9nZXROYW1lZFBsdWdpbnNfYmxvY2tAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTY1CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGR1cAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGJ1cnkgMQogICAgYiBhcmM1OF9nZXROYW1lZFBsdWdpbnNfd2hpbGVfdG9wQDIKCmFyYzU4X2dldE5hbWVkUGx1Z2luc19hZnRlcl9pZl9lbHNlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE3MgogICAgLy8gcGx1Z2lucy5wdXNoKGVtcHR5UGx1Z2luSW5mbygpKQogICAgZGlnIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBleHRyYWN0IDIgMAogICAgaW50Y18xIC8vIDEKICAgIGJ5dGVjIDIxIC8vIDB4MDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudAogICAgYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE3MwogICAgLy8gY29udGludWUKICAgIGIgYXJjNThfZ2V0TmFtZWRQbHVnaW5zX2Jsb2NrQDgKCmFyYzU4X2dldE5hbWVkUGx1Z2luc19hZnRlcl9pZl9lbHNlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE3NQogICAgLy8gcGx1Z2lucy5wdXNoKGVtcHR5UGx1Z2luSW5mbygpKQogICAgZGlnIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBleHRyYWN0IDIgMAogICAgaW50Y18xIC8vIDEKICAgIGJ5dGVjIDIxIC8vIDB4MDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudAogICAgYnVyeSAyCiAgICBiIGFyYzU4X2dldE5hbWVkUGx1Z2luc19ibG9ja0A4CgphcmM1OF9nZXROYW1lZFBsdWdpbnNfYWZ0ZXJfd2hpbGVAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTYyCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGJ5dGVjIDcgLy8gMHgxNTFmN2M3NQogICAgZGlnIDIKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9nZXRFc2Nyb3dzW3JvdXRpbmddKCkgLT4gdm9pZDoKYXJjNThfZ2V0RXNjcm93czoKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE4MAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE4MgogICAgLy8gbGV0IHJlc3VsdDogRXNjcm93SW5mb1tdID0gW10KICAgIGJ5dGVjIDEwIC8vIDB4MDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExODMKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBlc2Nyb3dzLmxlbmd0aDsgaSArPSAxKSB7CiAgICBpbnRjXzAgLy8gMAoKYXJjNThfZ2V0RXNjcm93c193aGlsZV90b3BAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTgzCiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgZXNjcm93cy5sZW5ndGg7IGkgKz0gMSkgewogICAgZGlnIDIKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZGlnIDEKICAgID4KICAgIGR1cAogICAgYnVyeSA1CiAgICBieiBhcmM1OF9nZXRFc2Nyb3dzX2FmdGVyX3doaWxlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTg0CiAgICAvLyBpZiAodGhpcy5lc2Nyb3dzKGVzY3Jvd3NbaV0pLmV4aXN0cykgewogICAgZGlnIDIKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgNAogICAgYXNzZXJ0IC8vIGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkaWcgMQogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGRpZyAxCiAgICBzd2FwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwMgogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBleHRyYWN0MwogICAgZXh0cmFjdCAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNwogICAgLy8gZXNjcm93cyA9IEJveE1hcDxzdHJpbmcsIEVzY3Jvd0luZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhFc2Nyb3dzIH0pCiAgICBieXRlYyA1IC8vICJlIgogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGJ1cnkgNgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExODQKICAgIC8vIGlmICh0aGlzLmVzY3Jvd3MoZXNjcm93c1tpXSkuZXhpc3RzKSB7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJ6IGFyYzU4X2dldEVzY3Jvd3NfYWZ0ZXJfaWZfZWxzZUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE4NQogICAgLy8gcmVzdWx0LnB1c2godGhpcy5lc2Nyb3dzKGVzY3Jvd3NbaV0pLnZhbHVlKQogICAgZGlnIDQKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBkaWcgMgogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdCAvLyBvbiBlcnJvcjogbWF4IGFycmF5IGxlbmd0aCBleGNlZWRlZAogICAgc3dhcAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHJlcGxhY2UyIDAKICAgIGJ1cnkgMgoKYXJjNThfZ2V0RXNjcm93c19ibG9ja0A2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExODMKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBlc2Nyb3dzLmxlbmd0aDsgaSArPSAxKSB7CiAgICBkdXAKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgYXJjNThfZ2V0RXNjcm93c193aGlsZV90b3BAMgoKYXJjNThfZ2V0RXNjcm93c19hZnRlcl9pZl9lbHNlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE4OAogICAgLy8gcmVzdWx0LnB1c2goZW1wdHlFc2Nyb3dJbmZvKCkpCiAgICBkaWcgMQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L3V0aWxzLnRzOjIwLTIzCiAgICAvLyByZXR1cm4gewogICAgLy8gICBpZDogMCwKICAgIC8vICAgbG9ja2VkOiBmYWxzZQogICAgLy8gfTsKICAgIHB1c2hieXRlcyAweDAwMDAwMDAwMDAwMDAwMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExODgKICAgIC8vIHJlc3VsdC5wdXNoKGVtcHR5RXNjcm93SW5mbygpKQogICAgY29uY2F0IC8vIG9uIGVycm9yOiBtYXggYXJyYXkgbGVuZ3RoIGV4Y2VlZGVkCiAgICBzd2FwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgcmVwbGFjZTIgMAogICAgYnVyeSAyCiAgICBiIGFyYzU4X2dldEVzY3Jvd3NfYmxvY2tANgoKYXJjNThfZ2V0RXNjcm93c19hZnRlcl93aGlsZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExODAKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgYnl0ZWMgNyAvLyAweDE1MWY3Yzc1CiAgICBkaWcgMgogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X2dldEFsbG93YW5jZXNbcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF9nZXRBbGxvd2FuY2VzOgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTkzCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbit1dGY4W10pCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwbiAyCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cAogICAgY292ZXIgMgogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdWludDY0W10pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE5NQogICAgLy8gbGV0IHJlc3VsdDogQWxsb3dhbmNlSW5mb1tdID0gW10KICAgIGJ5dGVjIDEwIC8vIDB4MDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExOTYKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhc3NldHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMCAvLyAwCgphcmM1OF9nZXRBbGxvd2FuY2VzX3doaWxlX3RvcEAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExOTYKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhc3NldHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGR1cAogICAgZGlnIDMKICAgIDwKICAgIGJ6IGFyYzU4X2dldEFsbG93YW5jZXNfYWZ0ZXJfd2hpbGVANwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExOTcKICAgIC8vIGNvbnN0IGtleTogQWxsb3dhbmNlS2V5ID0geyBlc2Nyb3csIGFzc2V0OiBhc3NldHNbaV0gfQogICAgZGlnIDMKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMQogICAgaW50Y18zIC8vIDgKICAgICoKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0MyAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIGRpZyA1CiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWMgMTMgLy8gMHgwMDBhCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGFsbG93YW5jZXMgPSBCb3hNYXA8QWxsb3dhbmNlS2V5LCBBbGxvd2FuY2VJbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4QWxsb3dhbmNlcyB9KSAvLyAzOF81MDAKICAgIGJ5dGVjIDE0IC8vICJhIgogICAgc3dhcAogICAgY29uY2F0CiAgICBkdXAKICAgIGJ1cnkgNwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExOTgKICAgIC8vIGlmICh0aGlzLmFsbG93YW5jZXMoa2V5KS5leGlzdHMpIHsKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYnogYXJjNThfZ2V0QWxsb3dhbmNlc19hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTk5CiAgICAvLyByZXN1bHQucHVzaCh0aGlzLmFsbG93YW5jZXMoa2V5KS52YWx1ZSkKICAgIGRpZyA1CiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgZGlnIDIKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBjb25jYXQgLy8gb24gZXJyb3I6IG1heCBhcnJheSBsZW5ndGggZXhjZWVkZWQKICAgIHN3YXAKICAgIGludGNfMCAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICByZXBsYWNlMiAwCiAgICBidXJ5IDIKCmFyYzU4X2dldEFsbG93YW5jZXNfYmxvY2tANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTk2CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgYXNzZXRzLmxlbmd0aDsgaSArPSAxKSB7CiAgICBkdXAKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgYXJjNThfZ2V0QWxsb3dhbmNlc193aGlsZV90b3BAMgoKYXJjNThfZ2V0QWxsb3dhbmNlc19hZnRlcl9pZl9lbHNlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTIwMgogICAgLy8gcmVzdWx0LnB1c2goZW1wdHlBbGxvd2FuY2VJbmZvKCkpCiAgICBkaWcgMQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L3V0aWxzLnRzOjI3LTM2CiAgICAvLyByZXR1cm4gewogICAgLy8gICB0eXBlOiBuZXcgVWludDgoMCksCiAgICAvLyAgIG1heDogMCwKICAgIC8vICAgYW1vdW50OiAwLAogICAgLy8gICBzcGVudDogMCwKICAgIC8vICAgaW50ZXJ2YWw6IDAsCiAgICAvLyAgIGxhc3Q6IDAsCiAgICAvLyAgIHN0YXJ0OiAwLAogICAgLy8gICB1c2VSb3VuZHM6IGZhbHNlCiAgICAvLyB9OwogICAgcHVzaGJ5dGVzIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyMDIKICAgIC8vIHJlc3VsdC5wdXNoKGVtcHR5QWxsb3dhbmNlSW5mbygpKQogICAgY29uY2F0IC8vIG9uIGVycm9yOiBtYXggYXJyYXkgbGVuZ3RoIGV4Y2VlZGVkCiAgICBzd2FwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgcmVwbGFjZTIgMAogICAgYnVyeSAyCiAgICBiIGFyYzU4X2dldEFsbG93YW5jZXNfYmxvY2tANgoKYXJjNThfZ2V0QWxsb3dhbmNlc19hZnRlcl93aGlsZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExOTMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgYnl0ZWMgNyAvLyAweDE1MWY3Yzc1CiAgICBkaWcgMgogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X2dldEV4ZWN1dGlvbnNbcm91dGluZ10oKSAtPiB2b2lkOgphcmM1OF9nZXRFeGVjdXRpb25zOgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMjA3CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cG4gMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdWludDhbMzJdW10pCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTIwOQogICAgLy8gbGV0IHJlc3VsdDogRXhlY3V0aW9uSW5mb1tdID0gW10KICAgIGJ5dGVjIDEwIC8vIDB4MDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyMTAKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBsZWFzZXMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMCAvLyAwCgphcmM1OF9nZXRFeGVjdXRpb25zX3doaWxlX3RvcEAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyMTAKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBsZWFzZXMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGR1cAogICAgZGlnIDMKICAgIDwKICAgIGJ6IGFyYzU4X2dldEV4ZWN1dGlvbnNfYWZ0ZXJfd2hpbGVANwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyMTEKICAgIC8vIGlmICh0aGlzLmV4ZWN1dGlvbnMobGVhc2VzW2ldKS5leGlzdHMpIHsKICAgIGRpZyAzCiAgICBleHRyYWN0IDIgMAogICAgZGlnIDEKICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgICoKICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgIGV4dHJhY3QzIC8vIG9uIGVycm9yOiBpbmRleCBhY2Nlc3MgaXMgb3V0IG9mIGJvdW5kcwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBleGVjdXRpb25zID0gQm94TWFwPGJ5dGVzPDMyPiwgRXhlY3V0aW9uSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeEV4ZWN1dGlvbnMgfSkKICAgIGJ5dGVjIDggLy8gIngiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgYnVyeSA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTIxMQogICAgLy8gaWYgKHRoaXMuZXhlY3V0aW9ucyhsZWFzZXNbaV0pLmV4aXN0cykgewogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBhcmM1OF9nZXRFeGVjdXRpb25zX2FmdGVyX2lmX2Vsc2VANQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyMTIKICAgIC8vIHJlc3VsdC5wdXNoKHRoaXMuZXhlY3V0aW9ucyhsZWFzZXNbaV0pLnZhbHVlKQogICAgZGlnIDQKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBkaWcgMgogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIHN3YXAKICAgIGV4dHJhY3QgMiAwCiAgICBieXRlYyAyMCAvLyAweDAwMDIKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICBjb3ZlciAyCiAgICBpbnRjXzEgLy8gMQogICAgdW5jb3ZlciAzCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudAogICAgYnVyeSAyCgphcmM1OF9nZXRFeGVjdXRpb25zX2Jsb2NrQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTIxMAogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGxlYXNlcy5sZW5ndGg7IGkgKz0gMSkgewogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIGFyYzU4X2dldEV4ZWN1dGlvbnNfd2hpbGVfdG9wQDIKCmFyYzU4X2dldEV4ZWN1dGlvbnNfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyMTUKICAgIC8vIHJlc3VsdC5wdXNoKGVtcHR5RXhlY3V0aW9uSW5mbygpKQogICAgZGlnIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBzd2FwCiAgICBleHRyYWN0IDIgMAogICAgaW50Y18xIC8vIDEKICAgIHB1c2hieXRlcyAweDAwMDIwMDEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICBjYWxsc3ViIGR5bmFtaWNfYXJyYXlfY29uY2F0X2R5bmFtaWNfZWxlbWVudAogICAgYnVyeSAyCiAgICBiIGFyYzU4X2dldEV4ZWN1dGlvbnNfYmxvY2tANgoKYXJjNThfZ2V0RXhlY3V0aW9uc19hZnRlcl93aGlsZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyMDcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgYnl0ZWMgNyAvLyAweDE1MWY3Yzc1CiAgICBkaWcgMgogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50Lm1icltyb3V0aW5nXSgpIC0+IHZvaWQ6Cm1icjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMjIwCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbit1dGY4W10pCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBpbnRjXzIgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbit1dGY4W10pCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2MgogICAgLy8gcmV0dXJuIE1pbkVzY3Jvd3NNQlIgKyAoQm94Q29zdFBlckJ5dGUgKiBCeXRlcyhlc2Nyb3cpLmxlbmd0aCk7CiAgICBkaWcgMwogICAgbGVuCiAgICBpbnRjIDQgLy8gNDAwCiAgICAqCiAgICBwdXNoaW50IDY1MDAgLy8gNjUwMAogICAgZGlnIDEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMjMwCiAgICAvLyBwbHVnaW5zOiB0aGlzLnBsdWdpbnNNYnIoZXNjcm93LCBtZXRob2RDb3VudCksCiAgICBkaWcgNQogICAgdW5jb3ZlciA1CiAgICBjYWxsc3ViIHBsdWdpbnNNYnIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1OAogICAgLy8gcmV0dXJuIE1pbk5hbWVkUGx1Z2luTUJSICsgKEJveENvc3RQZXJCeXRlICogQnl0ZXMobmFtZSkubGVuZ3RoKTsKICAgIHVuY292ZXIgNAogICAgbGVuCiAgICBpbnRjIDQgLy8gNDAwCiAgICAqCiAgICBpbnRjIDUgLy8gMjE3MDAKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2NgogICAgLy8gcmV0dXJuIE1pbkFsbG93YW5jZU1CUiArIChCb3hDb3N0UGVyQnl0ZSAqIEJ5dGVzKGVzY3JvdykubGVuZ3RoKTsKICAgIGludGMgNiAvLyAyNzcwMAogICAgdW5jb3ZlciA0CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzAKICAgIC8vIHJldHVybiBNaW5FeGVjdXRpb25zTUJSICsgKEJveENvc3RQZXJCeXRlICogKGdyb3VwcyAqIDMyKSk7CiAgICB1bmNvdmVyIDQKICAgIHB1c2hpbnQgMTI4MDAgLy8gMTI4MDAKICAgICoKICAgIHB1c2hpbnQgMjA1MDAgLy8gMjA1MDAKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNwogICAgLy8gZXNjcm93cyA9IEJveE1hcDxzdHJpbmcsIEVzY3Jvd0luZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhFc2Nyb3dzIH0pCiAgICBieXRlYyA1IC8vICJlIgogICAgdW5jb3ZlciA2CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMjM1CiAgICAvLyBlc2Nyb3dFeGlzdHM6IHRoaXMuZXNjcm93cyhlc2Nyb3cpLmV4aXN0cywKICAgIGJveF9sZW4KICAgIGNvdmVyIDYKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyMzgKICAgIC8vIEdsb2JhbC5taW5CYWxhbmNlICsKICAgIGdsb2JhbCBNaW5CYWxhbmNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTIzNy0xMjM5CiAgICAvLyBOZXdDb3N0Rm9yQVJDNTggKwogICAgLy8gR2xvYmFsLm1pbkJhbGFuY2UgKwogICAgLy8gQVJDNThXYWxsZXRJRHNCeUFjY291bnRzTWJyICsKICAgIHB1c2hpbnQgMTYyMTAwIC8vIDE2MjEwMAogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyMzctMTI0MAogICAgLy8gTmV3Q29zdEZvckFSQzU4ICsKICAgIC8vIEdsb2JhbC5taW5CYWxhbmNlICsKICAgIC8vIEFSQzU4V2FsbGV0SURzQnlBY2NvdW50c01iciArCiAgICAvLyBlc2Nyb3dzCiAgICBkaWcgNQogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyMjktMTI0MgogICAgLy8gcmV0dXJuIHsKICAgIC8vICAgcGx1Z2luczogdGhpcy5wbHVnaW5zTWJyKGVzY3JvdywgbWV0aG9kQ291bnQpLAogICAgLy8gICBuYW1lZFBsdWdpbnM6IHRoaXMubmFtZWRQbHVnaW5zTWJyKHBsdWdpbiksCiAgICAvLyAgIGVzY3Jvd3MsCiAgICAvLyAgIGFsbG93YW5jZXM6IHRoaXMuYWxsb3dhbmNlc01icihlc2Nyb3cpLAogICAgLy8gICBleGVjdXRpb25zOiB0aGlzLmV4ZWN1dGlvbnNNYnIoZ3JvdXBzKSwKICAgIC8vICAgZXNjcm93RXhpc3RzOiB0aGlzLmVzY3Jvd3MoZXNjcm93KS5leGlzdHMsCiAgICAvLyAgIG5ld0VzY3Jvd01pbnRDb3N0OiAoCiAgICAvLyAgICAgTmV3Q29zdEZvckFSQzU4ICsKICAgIC8vICAgICBHbG9iYWwubWluQmFsYW5jZSArCiAgICAvLyAgICAgQVJDNThXYWxsZXRJRHNCeUFjY291bnRzTWJyICsKICAgIC8vICAgICBlc2Nyb3dzCiAgICAvLyAgICkKICAgIC8vIH0KICAgIHVuY292ZXIgNAogICAgaXRvYgogICAgdW5jb3ZlciA0CiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgNAogICAgaXRvYgogICAgY29uY2F0CiAgICB1bmNvdmVyIDMKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciAyCiAgICBpdG9iCiAgICBjb25jYXQKICAgIGJ5dGVjIDkgLy8gMHgwMAogICAgaW50Y18wIC8vIDAKICAgIHVuY292ZXIgNAogICAgc2V0Yml0CiAgICBjb25jYXQKICAgIHN3YXAKICAgIGl0b2IKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyMjAKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgYnl0ZWMgNyAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQucGx1Z2luc01icihlc2Nyb3c6IGJ5dGVzLCBtZXRob2RDb3VudDogdWludDY0KSAtPiB1aW50NjQ6CnBsdWdpbnNNYnI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIHByaXZhdGUgcGx1Z2luc01icihlc2Nyb3c6IHN0cmluZywgbWV0aG9kQ291bnQ6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAyIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1MwogICAgLy8gQm94Q29zdFBlckJ5dGUgKiAoKE1ldGhvZFJlc3RyaWN0aW9uQnl0ZUxlbmd0aCAqIG1ldGhvZENvdW50KSArIEJ5dGVzKGVzY3JvdykubGVuZ3RoKQogICAgcHVzaGludCAyMCAvLyAyMAogICAgZnJhbWVfZGlnIC0xCiAgICAqCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgKwogICAgaW50YyA0IC8vIDQwMAogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjUyCiAgICAvLyByZXR1cm4gTWluUGx1Z2luTUJSICsgKAogICAgcHVzaGludCAzODkwMCAvLyAzODkwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjUyLTU0CiAgICAvLyByZXR1cm4gTWluUGx1Z2luTUJSICsgKAogICAgLy8gICBCb3hDb3N0UGVyQnl0ZSAqICgoTWV0aG9kUmVzdHJpY3Rpb25CeXRlTGVuZ3RoICogbWV0aG9kQ291bnQpICsgQnl0ZXMoZXNjcm93KS5sZW5ndGgpCiAgICAvLyApOwogICAgKwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5tYXliZU5ld0VzY3Jvdyhlc2Nyb3c6IGJ5dGVzKSAtPiB1aW50NjQ6Cm1heWJlTmV3RXNjcm93OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjczCiAgICAvLyBwcml2YXRlIG1heWJlTmV3RXNjcm93KGVzY3Jvdzogc3RyaW5nKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo3NAogICAgLy8gaWYgKGVzY3JvdyA9PT0gJycpIHsKICAgIGZyYW1lX2RpZyAtMQogICAgYnl0ZWNfMSAvLyAiIgogICAgPT0KICAgIGJ6IG1heWJlTmV3RXNjcm93X2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjc1CiAgICAvLyByZXR1cm4gMDsKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICByZXRzdWIKCm1heWJlTmV3RXNjcm93X2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNwogICAgLy8gZXNjcm93cyA9IEJveE1hcDxzdHJpbmcsIEVzY3Jvd0luZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhFc2Nyb3dzIH0pCiAgICBieXRlYyA1IC8vICJlIgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzgKICAgIC8vIHJldHVybiB0aGlzLmVzY3Jvd3MoZXNjcm93KS5leGlzdHMKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjc4LTgwCiAgICAvLyByZXR1cm4gdGhpcy5lc2Nyb3dzKGVzY3JvdykuZXhpc3RzCiAgICAvLyAgID8gdGhpcy5lc2Nyb3dzKGVzY3JvdykudmFsdWUuaWQKICAgIC8vICAgOiB0aGlzLm5ld0VzY3Jvdyhlc2Nyb3cpOwogICAgYnogbWF5YmVOZXdFc2Nyb3dfdGVybmFyeV9mYWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzkKICAgIC8vID8gdGhpcy5lc2Nyb3dzKGVzY3JvdykudmFsdWUuaWQKICAgIGZyYW1lX2RpZyAwCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CgptYXliZU5ld0VzY3Jvd190ZXJuYXJ5X21lcmdlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NzgtODAKICAgIC8vIHJldHVybiB0aGlzLmVzY3Jvd3MoZXNjcm93KS5leGlzdHMKICAgIC8vICAgPyB0aGlzLmVzY3Jvd3MoZXNjcm93KS52YWx1ZS5pZAogICAgLy8gICA6IHRoaXMubmV3RXNjcm93KGVzY3Jvdyk7CiAgICBzd2FwCiAgICByZXRzdWIKCm1heWJlTmV3RXNjcm93X3Rlcm5hcnlfZmFsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4MAogICAgLy8gOiB0aGlzLm5ld0VzY3Jvdyhlc2Nyb3cpOwogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIG5ld0VzY3JvdwogICAgYiBtYXliZU5ld0VzY3Jvd190ZXJuYXJ5X21lcmdlQDUKCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50Lm5ld0VzY3Jvdyhlc2Nyb3c6IGJ5dGVzKSAtPiB1aW50NjQ6Cm5ld0VzY3JvdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo4MwogICAgLy8gcHJpdmF0ZSBuZXdFc2Nyb3coZXNjcm93OiBzdHJpbmcpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODQKICAgIC8vIGlmICh0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlICE9PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcykgewogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29udHJvbGxlZEFkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ29udHJvbGxlZEFkZHJlc3MgfSk7CiAgICBieXRlY18wIC8vICJjb250cm9sbGVkX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODQKICAgIC8vIGlmICh0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlICE9PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcykgewogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAhPQogICAgYnogbmV3RXNjcm93X2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg1LTkxCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogdGhpcy5lc2Nyb3dzTWJyKGVzY3JvdykKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODcKICAgIC8vIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGNvbnRyb2xsZWRBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0NvbnRyb2xsZWRBZGRyZXNzIH0pOwogICAgYnl0ZWNfMCAvLyAiY29udHJvbGxlZF9hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg3CiAgICAvLyBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg4CiAgICAvLyByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjYyCiAgICAvLyByZXR1cm4gTWluRXNjcm93c01CUiArIChCb3hDb3N0UGVyQnl0ZSAqIEJ5dGVzKGVzY3JvdykubGVuZ3RoKTsKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjIDQgLy8gNDAwCiAgICAqCiAgICBwdXNoaW50IDY1MDAgLy8gNjUwMAogICAgKwogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6ODUtOTAKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiB0aGlzLmVzY3Jvd3NNYnIoZXNjcm93KQogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjg1LTkxCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogdGhpcy5lc2Nyb3dzTWJyKGVzY3JvdykKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAoKbmV3RXNjcm93X2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo5NC0xMDQKICAgIC8vIGNvbnN0IGlkID0gYWJpQ2FsbDx0eXBlb2YgRXNjcm93RmFjdG9yeS5wcm90b3R5cGUubmV3Pih7CiAgICAvLyAgIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgYXBwSWQ6IHRoaXMuZXNjcm93RmFjdG9yeS52YWx1ZSwKICAgIC8vICAgYXJnczogWwogICAgLy8gICAgIGl0eG4ucGF5bWVudCh7CiAgICAvLyAgICAgICBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgICBhbW91bnQ6IE5ld0Nvc3RGb3JBUkM1OCArIEdsb2JhbC5taW5CYWxhbmNlLAogICAgLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMuZXNjcm93RmFjdG9yeS52YWx1ZS5hZGRyZXNzCiAgICAvLyAgICAgfSksCiAgICAvLyAgIF0KICAgIC8vIH0pLnJldHVyblZhbHVlCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTkKICAgIC8vIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGNvbnRyb2xsZWRBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0NvbnRyb2xsZWRBZGRyZXNzIH0pOwogICAgYnl0ZWNfMCAvLyAiY29udHJvbGxlZF9hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjk5CiAgICAvLyBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwMAogICAgLy8gYW1vdW50OiBOZXdDb3N0Rm9yQVJDNTggKyBHbG9iYWwubWluQmFsYW5jZSwKICAgIHB1c2hpbnQgMTUwMDAwIC8vIDE1MDAwMAogICAgZ2xvYmFsIE1pbkJhbGFuY2UKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDEKICAgIC8vIHJlY2VpdmVyOiB0aGlzLmVzY3Jvd0ZhY3RvcnkudmFsdWUuYWRkcmVzcwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNAogICAgLy8gZXNjcm93RmFjdG9yeSA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzRXNjcm93RmFjdG9yeSB9KQogICAgYnl0ZWMgMTggLy8gImVzY3Jvd19mYWN0b3J5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwMQogICAgLy8gcmVjZWl2ZXI6IHRoaXMuZXNjcm93RmFjdG9yeS52YWx1ZS5hZGRyZXNzCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZHVwCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgZGlnIDEKICAgIGl0eG5fZmllbGQgU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTgtMTAyCiAgICAvLyBpdHhuLnBheW1lbnQoewogICAgLy8gICBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgIGFtb3VudDogTmV3Q29zdEZvckFSQzU4ICsgR2xvYmFsLm1pbkJhbGFuY2UsCiAgICAvLyAgIHJlY2VpdmVyOiB0aGlzLmVzY3Jvd0ZhY3RvcnkudmFsdWUuYWRkcmVzcwogICAgLy8gfSksCiAgICBpbnRjXzEgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OTQtMTA0CiAgICAvLyBjb25zdCBpZCA9IGFiaUNhbGw8dHlwZW9mIEVzY3Jvd0ZhY3RvcnkucHJvdG90eXBlLm5ldz4oewogICAgLy8gICBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgIGFwcElkOiB0aGlzLmVzY3Jvd0ZhY3RvcnkudmFsdWUsCiAgICAvLyAgIGFyZ3M6IFsKICAgIC8vICAgICBpdHhuLnBheW1lbnQoewogICAgLy8gICAgICAgc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgICAgYW1vdW50OiBOZXdDb3N0Rm9yQVJDNTggKyBHbG9iYWwubWluQmFsYW5jZSwKICAgIC8vICAgICAgIHJlY2VpdmVyOiB0aGlzLmVzY3Jvd0ZhY3RvcnkudmFsdWUuYWRkcmVzcwogICAgLy8gICAgIH0pLAogICAgLy8gICBdCiAgICAvLyB9KS5yZXR1cm5WYWx1ZQogICAgaXR4bl9uZXh0CiAgICBwdXNoYnl0ZXMgMHhkODVjZjE4NCAvLyBtZXRob2QgIm5ldyhwYXkpdWludDY0IgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgaXR4bl9maWVsZCBTZW5kZXIKICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBnaXR4biAxIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlYyA3IC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMDYKICAgIC8vIHRoaXMuZXNjcm93cyhlc2Nyb3cpLnZhbHVlID0geyBpZCwgbG9ja2VkOiBmYWxzZSB9CiAgICBkdXAKICAgIGl0b2IKICAgIGJ5dGVjIDkgLy8gMHgwMAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzcKICAgIC8vIGVzY3Jvd3MgPSBCb3hNYXA8c3RyaW5nLCBFc2Nyb3dJbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4RXNjcm93cyB9KQogICAgYnl0ZWMgNSAvLyAiZSIKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTA2CiAgICAvLyB0aGlzLmVzY3Jvd3MoZXNjcm93KS52YWx1ZSA9IHsgaWQsIGxvY2tlZDogZmFsc2UgfQogICAgc3dhcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEwOAogICAgLy8gcmV0dXJuIGlkOwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5wbHVnaW5DYWxsQWxsb3dlZChwbHVnaW46IHVpbnQ2NCwgY2FsbGVyOiBieXRlcywgZXNjcm93OiBieXRlcywgbWV0aG9kOiBieXRlcykgLT4gdWludDY0OgpwbHVnaW5DYWxsQWxsb3dlZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMTEKICAgIC8vIHByaXZhdGUgcGx1Z2luQ2FsbEFsbG93ZWQocGx1Z2luOiB1aW50NjQsIGNhbGxlcjogQWNjb3VudCwgZXNjcm93OiBzdHJpbmcsIG1ldGhvZDogYnl0ZXM8ND4pOiBib29sZWFuIHsKICAgIHByb3RvIDQgMQogICAgYnl0ZWNfMSAvLyAiIgogICAgZHVwbiA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTEyCiAgICAvLyBjb25zdCBrZXk6IFBsdWdpbktleSA9IHsgcGx1Z2luLCBjYWxsZXIsIGVzY3JvdyB9CiAgICBmcmFtZV9kaWcgLTQKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMwogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBieXRlYyAxMiAvLyAweDAwMmEKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIHBsdWdpbnMgPSBCb3hNYXA8UGx1Z2luS2V5LCBQbHVnaW5JbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4UGx1Z2lucyB9KTsKICAgIGJ5dGVjIDQgLy8gInAiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNAogICAgLy8gaWYgKCF0aGlzLnBsdWdpbnMoa2V5KS5leGlzdHMpIHsKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYm56IHBsdWdpbkNhbGxBbGxvd2VkX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjExNQogICAgLy8gcmV0dXJuIGZhbHNlOwogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpwbHVnaW5DYWxsQWxsb3dlZF9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTE4CiAgICAvLyBjb25zdCB7IG1ldGhvZHMsIHVzZVJvdW5kcywgbGFzdENhbGxlZCwgY29vbGRvd24sIHVzZUV4ZWN1dGlvbktleSB9ID0gdGhpcy5wbHVnaW5zKGtleSkudmFsdWUgYXMgUmVhZG9ubHk8UGx1Z2luSW5mbz4KICAgIGZyYW1lX2RpZyA2CiAgICBkdXAKICAgIHB1c2hpbnQgMTcgLy8gMTcKICAgIGludGNfMyAvLyA4CiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgZnJhbWVfYnVyeSAwCiAgICBkdXAKICAgIHB1c2hpbnQgMjcgLy8gMjcKICAgIGludGNfMSAvLyAxCiAgICBib3hfZXh0cmFjdAogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgZ2V0Yml0CiAgICBmcmFtZV9idXJ5IDUKICAgIGludGNfMiAvLyAyCiAgICBnZXRiaXQKICAgIHN3YXAKICAgIHB1c2hpbnQgMjggLy8gMjgKICAgIGludGNfMyAvLyA4CiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgZnJhbWVfYnVyeSAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTIwCiAgICAvLyBpZiAodXNlRXhlY3V0aW9uS2V5KSB7CiAgICBieiBwbHVnaW5DYWxsQWxsb3dlZF9hZnRlcl9pZl9lbHNlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMjEKICAgIC8vIHJldHVybiBmYWxzZQogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpwbHVnaW5DYWxsQWxsb3dlZF9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTI0CiAgICAvLyBsZXQgbWV0aG9kQWxsb3dlZCA9IG1ldGhvZHMubGVuZ3RoID4gMCA/IGZhbHNlIDogdHJ1ZTsKICAgIGZyYW1lX2RpZyA2CiAgICBwdXNoaW50IDQ0IC8vIDQ0CiAgICBpbnRjXzIgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgICEKICAgIGZyYW1lX2J1cnkgNAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyNQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IG1ldGhvZHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDIKCnBsdWdpbkNhbGxBbGxvd2VkX3doaWxlX3RvcEA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyNQogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IG1ldGhvZHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGZyYW1lX2RpZyA2CiAgICBwdXNoaW50IDQ0IC8vIDQ0CiAgICBpbnRjXzIgLy8gMgogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGZyYW1lX2RpZyAyCiAgICA+CiAgICBieiBwbHVnaW5DYWxsQWxsb3dlZF9ibG9ja0AxMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyNgogICAgLy8gaWYgKG1ldGhvZHNbaV0uc2VsZWN0b3IgPT09IG1ldGhvZCkgewogICAgZnJhbWVfZGlnIDIKICAgIHB1c2hpbnQgMjAgLy8gMjAKICAgICoKICAgIHB1c2hpbnQgNDYgLy8gNDYKICAgICsKICAgIGZyYW1lX2RpZyA2CiAgICBzd2FwCiAgICBwdXNoaW50IDIwIC8vIDIwCiAgICBib3hfZXh0cmFjdAogICAgZXh0cmFjdCAwIDQKICAgIGZyYW1lX2RpZyAtMQogICAgPT0KICAgIGJ6IHBsdWdpbkNhbGxBbGxvd2VkX2FmdGVyX2lmX2Vsc2VAOAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEyNwogICAgLy8gbWV0aG9kQWxsb3dlZCA9IHRydWU7CiAgICBpbnRjXzEgLy8gMQogICAgZnJhbWVfYnVyeSA0CgpwbHVnaW5DYWxsQWxsb3dlZF9ibG9ja0AxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMzIKICAgIC8vIGNvbnN0IGVwb2NoUmVmID0gdXNlUm91bmRzID8gR2xvYmFsLnJvdW5kIDogR2xvYmFsLmxhdGVzdFRpbWVzdGFtcDsKICAgIGZyYW1lX2RpZyA1CiAgICBieiBwbHVnaW5DYWxsQWxsb3dlZF90ZXJuYXJ5X2ZhbHNlQDEyCiAgICBnbG9iYWwgUm91bmQKICAgIGZyYW1lX2J1cnkgMQoKcGx1Z2luQ2FsbEFsbG93ZWRfdGVybmFyeV9tZXJnZUAxMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMzUKICAgIC8vIGxhc3RDYWxsZWQgPj0gZXBvY2hSZWYgJiYKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMQogICAgPj0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMzUtMTM2CiAgICAvLyBsYXN0Q2FsbGVkID49IGVwb2NoUmVmICYmCiAgICAvLyAoZXBvY2hSZWYgLSBsYXN0Q2FsbGVkKSA+PSBjb29sZG93biAmJgogICAgYnogcGx1Z2luQ2FsbEFsbG93ZWRfYm9vbF9mYWxzZUAxNgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEzNgogICAgLy8gKGVwb2NoUmVmIC0gbGFzdENhbGxlZCkgPj0gY29vbGRvd24gJiYKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgMwogICAgLQogICAgZnJhbWVfZGlnIDAKICAgID49CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTM1LTEzNgogICAgLy8gbGFzdENhbGxlZCA+PSBlcG9jaFJlZiAmJgogICAgLy8gKGVwb2NoUmVmIC0gbGFzdENhbGxlZCkgPj0gY29vbGRvd24gJiYKICAgIGJ6IHBsdWdpbkNhbGxBbGxvd2VkX2Jvb2xfZmFsc2VAMTYKICAgIGludGNfMSAvLyAxCgpwbHVnaW5DYWxsQWxsb3dlZF9ib29sX21lcmdlQDE3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjEzNS0xMzcKICAgIC8vIGxhc3RDYWxsZWQgPj0gZXBvY2hSZWYgJiYKICAgIC8vIChlcG9jaFJlZiAtIGxhc3RDYWxsZWQpID49IGNvb2xkb3duICYmCiAgICAvLyBtZXRob2RBbGxvd2VkCiAgICBmcmFtZV9kaWcgNAogICAgJiYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMzQtMTM4CiAgICAvLyByZXR1cm4gKAogICAgLy8gICBsYXN0Q2FsbGVkID49IGVwb2NoUmVmICYmCiAgICAvLyAgIChlcG9jaFJlZiAtIGxhc3RDYWxsZWQpID49IGNvb2xkb3duICYmCiAgICAvLyAgIG1ldGhvZEFsbG93ZWQKICAgIC8vICkKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpwbHVnaW5DYWxsQWxsb3dlZF9ib29sX2ZhbHNlQDE2OgogICAgaW50Y18wIC8vIDAKICAgIGIgcGx1Z2luQ2FsbEFsbG93ZWRfYm9vbF9tZXJnZUAxNwoKcGx1Z2luQ2FsbEFsbG93ZWRfdGVybmFyeV9mYWxzZUAxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxMzIKICAgIC8vIGNvbnN0IGVwb2NoUmVmID0gdXNlUm91bmRzID8gR2xvYmFsLnJvdW5kIDogR2xvYmFsLmxhdGVzdFRpbWVzdGFtcDsKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGZyYW1lX2J1cnkgMQogICAgYiBwbHVnaW5DYWxsQWxsb3dlZF90ZXJuYXJ5X21lcmdlQDEzCgpwbHVnaW5DYWxsQWxsb3dlZF9hZnRlcl9pZl9lbHNlQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTI1CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7IGkgKz0gMSkgewogICAgZnJhbWVfZGlnIDIKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDIKICAgIGIgcGx1Z2luQ2FsbEFsbG93ZWRfd2hpbGVfdG9wQDUKCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LnR4blJla2V5c0JhY2sodHhuOiB1aW50NjQpIC0+IHVpbnQ2NDoKdHhuUmVrZXlzQmFjazoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNDEKICAgIC8vIHByaXZhdGUgdHhuUmVrZXlzQmFjayh0eG46IGd0eG4uVHJhbnNhY3Rpb24pOiBib29sZWFuIHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE0NAogICAgLy8gdHhuLnNlbmRlciA9PT0gdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSAmJgogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGNvbnRyb2xsZWRBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0NvbnRyb2xsZWRBZGRyZXNzIH0pOwogICAgYnl0ZWNfMCAvLyAiY29udHJvbGxlZF9hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE0NAogICAgLy8gdHhuLnNlbmRlciA9PT0gdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSAmJgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTQ0LTE0NQogICAgLy8gdHhuLnNlbmRlciA9PT0gdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSAmJgogICAgLy8gdHhuLnJla2V5VG8gPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBieiB0eG5SZWtleXNCYWNrX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE0NQogICAgLy8gdHhuLnJla2V5VG8gPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIFJla2V5VG8KICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE0NC0xNDUKICAgIC8vIHR4bi5zZW5kZXIgPT09IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUgJiYKICAgIC8vIHR4bi5yZWtleVRvID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgYnogdHhuUmVrZXlzQmFja19hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNDcKICAgIC8vIHJldHVybiB0cnVlOwogICAgaW50Y18xIC8vIDEKICAgIHJldHN1YgoKdHhuUmVrZXlzQmFja19hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTUxCiAgICAvLyB0eG4udHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLkFwcGxpY2F0aW9uQ2FsbAogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBUeXBlRW51bQogICAgcHVzaGludCA2IC8vIDYKICAgID09CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTUxLTE1MgogICAgLy8gdHhuLnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5BcHBsaWNhdGlvbkNhbGwKICAgIC8vICYmIHR4bi5hcHBJZCA9PT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbklkCiAgICBieiB0eG5SZWtleXNCYWNrX2Jvb2xfZmFsc2VAOQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE1MgogICAgLy8gJiYgdHhuLmFwcElkID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uSWQKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQXBwbGljYXRpb25JRAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbklECiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE1MS0xNTIKICAgIC8vIHR4bi50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuQXBwbGljYXRpb25DYWxsCiAgICAvLyAmJiB0eG4uYXBwSWQgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25JZAogICAgYnogdHhuUmVrZXlzQmFja19ib29sX2ZhbHNlQDkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNTMKICAgIC8vICYmIHR4bi5udW1BcHBBcmdzID09PSAxCiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIE51bUFwcEFyZ3MKICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE1MS0xNTMKICAgIC8vIHR4bi50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuQXBwbGljYXRpb25DYWxsCiAgICAvLyAmJiB0eG4uYXBwSWQgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25JZAogICAgLy8gJiYgdHhuLm51bUFwcEFyZ3MgPT09IDEKICAgIGJ6IHR4blJla2V5c0JhY2tfYm9vbF9mYWxzZUA5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTU0CiAgICAvLyAmJiB0eG4ub25Db21wbGV0aW9uID09PSBPbkNvbXBsZXRlQWN0aW9uLk5vT3AKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgT25Db21wbGV0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTUxLTE1NAogICAgLy8gdHhuLnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5BcHBsaWNhdGlvbkNhbGwKICAgIC8vICYmIHR4bi5hcHBJZCA9PT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbklkCiAgICAvLyAmJiB0eG4ubnVtQXBwQXJncyA9PT0gMQogICAgLy8gJiYgdHhuLm9uQ29tcGxldGlvbiA9PT0gT25Db21wbGV0ZUFjdGlvbi5Ob09wCiAgICBibnogdHhuUmVrZXlzQmFja19ib29sX2ZhbHNlQDkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNTUKICAgIC8vICYmIHR4bi5hcHBBcmdzKDApID09PSBtZXRob2RTZWxlY3RvcignYXJjNThfdmVyaWZ5QXV0aEFkZHJlc3MoKXZvaWQnKQogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgZ3R4bnNhcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGJ5dGVjIDIyIC8vIG1ldGhvZCAiYXJjNThfdmVyaWZ5QXV0aEFkZHJlc3MoKXZvaWQiCiAgICA9PQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE1MS0xNTUKICAgIC8vIHR4bi50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuQXBwbGljYXRpb25DYWxsCiAgICAvLyAmJiB0eG4uYXBwSWQgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25JZAogICAgLy8gJiYgdHhuLm51bUFwcEFyZ3MgPT09IDEKICAgIC8vICYmIHR4bi5vbkNvbXBsZXRpb24gPT09IE9uQ29tcGxldGVBY3Rpb24uTm9PcAogICAgLy8gJiYgdHhuLmFwcEFyZ3MoMCkgPT09IG1ldGhvZFNlbGVjdG9yKCdhcmM1OF92ZXJpZnlBdXRoQWRkcmVzcygpdm9pZCcpCiAgICBieiB0eG5SZWtleXNCYWNrX2Jvb2xfZmFsc2VAOQogICAgaW50Y18xIC8vIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNTAtMTU2CiAgICAvLyByZXR1cm4gKAogICAgLy8gICB0eG4udHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLkFwcGxpY2F0aW9uQ2FsbAogICAgLy8gICAmJiB0eG4uYXBwSWQgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25JZAogICAgLy8gICAmJiB0eG4ubnVtQXBwQXJncyA9PT0gMQogICAgLy8gICAmJiB0eG4ub25Db21wbGV0aW9uID09PSBPbkNvbXBsZXRlQWN0aW9uLk5vT3AKICAgIC8vICAgJiYgdHhuLmFwcEFyZ3MoMCkgPT09IG1ldGhvZFNlbGVjdG9yKCdhcmM1OF92ZXJpZnlBdXRoQWRkcmVzcygpdm9pZCcpCiAgICAvLyApCiAgICByZXRzdWIKCnR4blJla2V5c0JhY2tfYm9vbF9mYWxzZUA5OgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNTAtMTU2CiAgICAvLyByZXR1cm4gKAogICAgLy8gICB0eG4udHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLkFwcGxpY2F0aW9uQ2FsbAogICAgLy8gICAmJiB0eG4uYXBwSWQgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25JZAogICAgLy8gICAmJiB0eG4ubnVtQXBwQXJncyA9PT0gMQogICAgLy8gICAmJiB0eG4ub25Db21wbGV0aW9uID09PSBPbkNvbXBsZXRlQWN0aW9uLk5vT3AKICAgIC8vICAgJiYgdHhuLmFwcEFyZ3MoMCkgPT09IG1ldGhvZFNlbGVjdG9yKCdhcmM1OF92ZXJpZnlBdXRoQWRkcmVzcygpdm9pZCcpCiAgICAvLyApCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LnBsdWdpbkNoZWNrKGtleTogYnl0ZXMpIC0+IGJ5dGVzLCBieXRlczoKcGx1Z2luQ2hlY2s6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTczCiAgICAvLyBwcml2YXRlIHBsdWdpbkNoZWNrKGtleTogUGx1Z2luS2V5KTogUGx1Z2luVmFsaWRhdGlvbiB7CiAgICBwcm90byAxIDIKICAgIGJ5dGVjXzEgLy8gIiIKICAgIGR1cG4gMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBwbHVnaW5zID0gQm94TWFwPFBsdWdpbktleSwgUGx1Z2luSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeFBsdWdpbnMgfSk7CiAgICBieXRlYyA0IC8vICJwIgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE3NQogICAgLy8gY29uc3QgZXhpc3RzID0gdGhpcy5wbHVnaW5zKGtleSkuZXhpc3RzOwogICAgYm94X2xlbgogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIHBvcAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE3NgogICAgLy8gaWYgKCFleGlzdHMpIHsKICAgIGJueiBwbHVnaW5DaGVja19hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxNzctMTgyCiAgICAvLyByZXR1cm4gewogICAgLy8gICBleGlzdHM6IGZhbHNlLAogICAgLy8gICBleHBpcmVkOiB0cnVlLAogICAgLy8gICBvbkNvb2xkb3duOiB0cnVlLAogICAgLy8gICBoYXNNZXRob2RSZXN0cmljdGlvbnM6IGZhbHNlLAogICAgLy8gfQogICAgcHVzaGJ5dGVzIDB4NjAKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfYnVyeSAxCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKcGx1Z2luQ2hlY2tfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4NQogICAgLy8gY29uc3QgeyB1c2VSb3VuZHMsIGxhc3RWYWxpZCwgY29vbGRvd24sIGxhc3RDYWxsZWQsIG1ldGhvZHMgfSA9IHRoaXMucGx1Z2lucyhrZXkpLnZhbHVlIGFzIFJlYWRvbmx5PFBsdWdpbkluZm8+CiAgICBmcmFtZV9kaWcgMwogICAgZHVwCiAgICBwdXNoaW50IDkgLy8gOQogICAgaW50Y18zIC8vIDgKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBmcmFtZV9idXJ5IDIKICAgIGR1cAogICAgcHVzaGludCAxNyAvLyAxNwogICAgaW50Y18zIC8vIDgKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBmcmFtZV9idXJ5IDAKICAgIGR1cAogICAgcHVzaGludCAyNyAvLyAyNwogICAgaW50Y18xIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICBpbnRjXzEgLy8gMQogICAgZ2V0Yml0CiAgICBzd2FwCiAgICBwdXNoaW50IDI4IC8vIDI4CiAgICBpbnRjXzMgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4NgogICAgLy8gY29uc3QgZXBvY2hSZWYgPSB1c2VSb3VuZHMgPyBHbG9iYWwucm91bmQgOiBHbG9iYWwubGF0ZXN0VGltZXN0YW1wOwogICAgYnogcGx1Z2luQ2hlY2tfdGVybmFyeV9mYWxzZUA0CiAgICBnbG9iYWwgUm91bmQKCnBsdWdpbkNoZWNrX3Rlcm5hcnlfbWVyZ2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOTAKICAgIC8vIGV4cGlyZWQ6IGVwb2NoUmVmID4gbGFzdFZhbGlkLAogICAgZHVwCiAgICBmcmFtZV9kaWcgMgogICAgPgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE5MQogICAgLy8gb25Db29sZG93bjogKGVwb2NoUmVmIC0gbGFzdENhbGxlZCkgPCBjb29sZG93biwKICAgIHN3YXAKICAgIGZyYW1lX2RpZyAxCiAgICAtCiAgICBmcmFtZV9kaWcgMAogICAgPAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE5MgogICAgLy8gaGFzTWV0aG9kUmVzdHJpY3Rpb25zOiBtZXRob2RzLmxlbmd0aCA+IDAsCiAgICBmcmFtZV9kaWcgMwogICAgcHVzaGludCA0NCAvLyA0NAogICAgaW50Y18yIC8vIDIKICAgIGJveF9leHRyYWN0CiAgICBidG9pCiAgICBpbnRjXzAgLy8gMAogICAgPgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjE4OC0xOTMKICAgIC8vIHJldHVybiB7CiAgICAvLyAgIGV4aXN0cywKICAgIC8vICAgZXhwaXJlZDogZXBvY2hSZWYgPiBsYXN0VmFsaWQsCiAgICAvLyAgIG9uQ29vbGRvd246IChlcG9jaFJlZiAtIGxhc3RDYWxsZWQpIDwgY29vbGRvd24sCiAgICAvLyAgIGhhc01ldGhvZFJlc3RyaWN0aW9uczogbWV0aG9kcy5sZW5ndGggPiAwLAogICAgLy8gfQogICAgYnl0ZWMgOSAvLyAweDAwCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfZGlnIDQKICAgIHNldGJpdAogICAgaW50Y18xIC8vIDEKICAgIHVuY292ZXIgNAogICAgc2V0Yml0CiAgICBpbnRjXzIgLy8gMgogICAgdW5jb3ZlciAzCiAgICBzZXRiaXQKICAgIHB1c2hpbnQgMyAvLyAzCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9idXJ5IDEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpwbHVnaW5DaGVja190ZXJuYXJ5X2ZhbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTg2CiAgICAvLyBjb25zdCBlcG9jaFJlZiA9IHVzZVJvdW5kcyA/IEdsb2JhbC5yb3VuZCA6IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXA7CiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBiIHBsdWdpbkNoZWNrX3Rlcm5hcnlfbWVyZ2VANQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbihwbHVnaW46IHVpbnQ2NCwgZ2xvYmFsOiB1aW50NjQsIGVzY3JvdzogYnl0ZXMsIG1ldGhvZE9mZnNldHM6IGJ5dGVzLCBmdW5kc1JlcXVlc3Q6IGJ5dGVzKSAtPiBieXRlcywgYnl0ZXM6CnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1NjctNTczCiAgICAvLyBhcmM1OF9yZWtleVRvUGx1Z2luKAogICAgLy8gICBwbHVnaW46IHVpbnQ2NCwKICAgIC8vICAgZ2xvYmFsOiBib29sZWFuLAogICAgLy8gICBlc2Nyb3c6IHN0cmluZywKICAgIC8vICAgbWV0aG9kT2Zmc2V0czogdWludDY0W10sCiAgICAvLyAgIGZ1bmRzUmVxdWVzdDogRnVuZHNSZXF1ZXN0W10KICAgIC8vICk6IHZvaWQgewogICAgcHJvdG8gNSAyCiAgICBpbnRjXzAgLy8gMAogICAgZHVwbiAxMAogICAgYnl0ZWNfMSAvLyAiIgogICAgZHVwbiAxOAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU3NQogICAgLy8gY29uc3QgY2FsbGVyID0gZ2xvYmFsID8gR2xvYmFsLnplcm9BZGRyZXNzIDogVHhuLnNlbmRlcgogICAgZnJhbWVfZGlnIC00CiAgICBieiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fdGVybmFyeV9mYWxzZUAyCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl90ZXJuYXJ5X21lcmdlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTc2CiAgICAvLyBjb25zdCBrZXk6IFBsdWdpbktleSA9IHsgcGx1Z2luLCBjYWxsZXIsIGVzY3JvdyB9CiAgICBmcmFtZV9kaWcgLTUKICAgIGl0b2IKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0zCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTMKICAgIGNvbmNhdAogICAgZHVwCiAgICBmcmFtZV9idXJ5IDEKICAgIHN3YXAKICAgIGJ5dGVjIDEyIC8vIDB4MDAyYQogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgZnJhbWVfYnVyeSA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIHBsdWdpbnMgPSBCb3hNYXA8UGx1Z2luS2V5LCBQbHVnaW5JbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4UGx1Z2lucyB9KTsKICAgIGJ5dGVjIDQgLy8gInAiCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU3OAogICAgLy8gYXNzZXJ0KHRoaXMucGx1Z2lucyhrZXkpLmV4aXN0cywgRVJSX1BMVUdJTl9ET0VTX05PVF9FWElTVCkKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIHBsdWdpbiBkb2VzIG5vdCBleGlzdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI4CiAgICAvLyBjdXJyZW50UGx1Z2luID0gR2xvYmFsU3RhdGU8UGx1Z2luS2V5Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ3VycmVudFBsdWdpbiB9KQogICAgYnl0ZWMgMTkgLy8gImN1cnJlbnRfcGx1Z2luIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU3OQogICAgLy8gdGhpcy5jdXJyZW50UGx1Z2luLnZhbHVlID0gY2xvbmUoa2V5KQogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1ODEKICAgIC8vIGlmIChlc2Nyb3cgIT09ICcnKSB7CiAgICBmcmFtZV9kaWcgLTMKICAgIGJ5dGVjXzEgLy8gIiIKICAgICE9CiAgICBieiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fZWxzZV9ib2R5QDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNwogICAgLy8gZXNjcm93cyA9IEJveE1hcDxzdHJpbmcsIEVzY3Jvd0luZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhFc2Nyb3dzIH0pCiAgICBieXRlYyA1IC8vICJlIgogICAgZnJhbWVfZGlnIC0zCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1ODIKICAgIC8vIGFzc2VydCh0aGlzLmVzY3Jvd3MoZXNjcm93KS5leGlzdHMsIEVSUl9FU0NST1dfRE9FU19OT1RfRVhJU1QpCiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGVzY3JvdyBkb2VzIG5vdCBleGlzdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU4MwogICAgLy8gY29uc3QgZXNjcm93SUQgPSB0aGlzLmVzY3Jvd3MoZXNjcm93KS52YWx1ZS5pZAogICAgYm94X2dldAogICAgcG9wCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1ODUKICAgIC8vIHRoaXMuc3BlbmRpbmdBZGRyZXNzLnZhbHVlID0gc3BlbmRpbmdBcHAuYWRkcmVzcwogICAgZHVwCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjYKICAgIC8vIHNwZW5kaW5nQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNTcGVuZGluZ0FkZHJlc3MgfSkKICAgIGJ5dGVjIDExIC8vICJzcGVuZGluZ19hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU4NQogICAgLy8gdGhpcy5zcGVuZGluZ0FkZHJlc3MudmFsdWUgPSBzcGVuZGluZ0FwcC5hZGRyZXNzCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMxNgogICAgLy8gY29uc3QgZXNjcm93QWRkcmVzcyA9IEFwcGxpY2F0aW9uKGVzY3Jvd0lEKS5hZGRyZXNzOwogICAgYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwogICAgc3dhcAogICAgZnJhbWVfYnVyeSA1CiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzE4CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgZnVuZHNSZXF1ZXN0cy5sZW5ndGg7IGkgKz0gMSkgewogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgMTYKCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl93aGlsZV90b3BANTY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzE4CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgZnVuZHNSZXF1ZXN0cy5sZW5ndGg7IGkgKz0gMSkgewogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzAgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGZyYW1lX2RpZyAxNgogICAgPgogICAgYnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VAOAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMyMgogICAgLy8gYXNzZXQ6IGZ1bmRzUmVxdWVzdHNbaV0uYXNzZXQKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAyIDAKICAgIGZyYW1lX2RpZyAxNgogICAgcHVzaGludCAxNiAvLyAxNgogICAgKgogICAgcHVzaGludCAxNiAvLyAxNgogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMAogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMjkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozMjAtMzIzCiAgICAvLyBjb25zdCBhbGxvd2FuY2VLZXk6IEFsbG93YW5jZUtleSA9IHsKICAgIC8vICAgZXNjcm93LAogICAgLy8gICBhc3NldDogZnVuZHNSZXF1ZXN0c1tpXS5hc3NldAogICAgLy8gfQogICAgaXRvYgogICAgYnl0ZWMgMTMgLy8gMHgwMDBhCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAxCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozOQogICAgLy8gYWxsb3dhbmNlcyA9IEJveE1hcDxBbGxvd2FuY2VLZXksIEFsbG93YW5jZUluZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhBbGxvd2FuY2VzIH0pIC8vIDM4XzUwMAogICAgYnl0ZWMgMTQgLy8gImEiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGR1cAogICAgZnJhbWVfYnVyeSAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzQ5CiAgICAvLyBhc3NlcnQodGhpcy5hbGxvd2FuY2VzKGtleSkuZXhpc3RzLCBFUlJfQUxMT1dBTkNFX0RPRVNfTk9UX0VYSVNUKTsKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gYWxsb3dhbmNlIGRvZXMgbm90IGV4aXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzUwCiAgICAvLyBjb25zdCB7IHR5cGUsIHNwZW50LCBhbW91bnQsIGxhc3QsIG1heCwgaW50ZXJ2YWwsIHN0YXJ0LCB1c2VSb3VuZHMgfSA9IHRoaXMuYWxsb3dhbmNlcyhrZXkpLnZhbHVlCiAgICBib3hfZ2V0CiAgICBwb3AKICAgIGR1cAogICAgZXh0cmFjdCAwIDEKICAgIGZyYW1lX2J1cnkgMTAKICAgIGR1cAogICAgcHVzaGludCAxNyAvLyAxNwogICAgZXh0cmFjdF91aW50NjQKICAgIGZyYW1lX2J1cnkgMjYKICAgIGR1cAogICAgcHVzaGludCA5IC8vIDkKICAgIGV4dHJhY3RfdWludDY0CiAgICBmcmFtZV9idXJ5IDExCiAgICBkdXAKICAgIHB1c2hpbnQgMzMgLy8gMzMKICAgIGV4dHJhY3RfdWludDY0CiAgICBmcmFtZV9idXJ5IDE5CiAgICBkdXAKICAgIGludGNfMSAvLyAxCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZnJhbWVfYnVyeSAyMQogICAgZHVwCiAgICBwdXNoaW50IDI1IC8vIDI1CiAgICBleHRyYWN0X3VpbnQ2NAogICAgZnJhbWVfYnVyeSAxNwogICAgZHVwCiAgICBwdXNoaW50IDQxIC8vIDQxCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZnJhbWVfYnVyeSAyNwogICAgcHVzaGludCAzOTIgLy8gMzkyCiAgICBnZXRiaXQKICAgIGR1cAogICAgZnJhbWVfYnVyeSAyOAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM1MQogICAgLy8gY29uc3QgbmV3TGFzdCA9IHVzZVJvdW5kcyA/IEdsb2JhbC5yb3VuZCA6IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXA7CiAgICBieiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fdGVybmFyeV9mYWxzZUA1OQogICAgZ2xvYmFsIFJvdW5kCiAgICBmcmFtZV9idXJ5IDI0CgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fdGVybmFyeV9tZXJnZUA2MDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNTMKICAgIC8vIGlmICh0eXBlID09PSBTcGVuZEFsbG93YW5jZVR5cGVGbGF0KSB7CiAgICBmcmFtZV9kaWcgMTAKICAgIGJ5dGVjIDE1IC8vIDB4MDEKICAgID09CiAgICBieiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fZWxzZV9ib2R5QDYyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzU0CiAgICAvLyBjb25zdCBsZWZ0b3ZlcjogdWludDY0ID0gYW1vdW50IC0gc3BlbnQ7CiAgICBmcmFtZV9kaWcgMTEKICAgIGZyYW1lX2RpZyAyNgogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM1NQogICAgLy8gYXNzZXJ0KGxlZnRvdmVyID49IGZ1bmRSZXF1ZXN0LmFtb3VudCwgRVJSX0FMTE9XQU5DRV9FWENFRURFRCk7CiAgICBmcmFtZV9kaWcgMAogICAgaW50Y18zIC8vIDgKICAgIGV4dHJhY3RfdWludDY0CiAgICBzd2FwCiAgICBkaWcgMQogICAgPj0KICAgIGFzc2VydCAvLyBhbGxvd2FuY2UgZXhjZWVkZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNTYKICAgIC8vIHRoaXMuYWxsb3dhbmNlcyhrZXkpLnZhbHVlLnNwZW50ICs9IGZ1bmRSZXF1ZXN0LmFtb3VudAogICAgZnJhbWVfZGlnIDMKICAgIGR1cAogICAgY292ZXIgMgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIHB1c2hpbnQgMTcgLy8gMTcKICAgIGV4dHJhY3RfdWludDY0CiAgICArCiAgICBpdG9iCiAgICBwdXNoaW50IDE3IC8vIDE3CiAgICBzd2FwCiAgICBib3hfcmVwbGFjZQoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VANzE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzgxCiAgICAvLyB0aGlzLmFsbG93YW5jZXMoa2V5KS52YWx1ZS5sYXN0ID0gbmV3TGFzdAogICAgZnJhbWVfZGlnIDI0CiAgICBpdG9iCiAgICBmcmFtZV9kaWcgMwogICAgcHVzaGludCAzMyAvLyAzMwogICAgdW5jb3ZlciAyCiAgICBib3hfcmVwbGFjZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMyNwogICAgLy8gaWYgKGZ1bmRzUmVxdWVzdHNbaV0uYXNzZXQgIT09IDApIHsKICAgIGZyYW1lX2RpZyAyOQogICAgYnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2Vsc2VfYm9keUA3MwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMyOC0zMzUKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBlc2Nyb3dBZGRyZXNzLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiBmdW5kc1JlcXVlc3RzW2ldLmFtb3VudCwKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGZ1bmRzUmVxdWVzdHNbaV0uYXNzZXQKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMzMAogICAgLy8gc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29udHJvbGxlZEFkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ29udHJvbGxlZEFkZHJlc3MgfSk7CiAgICBieXRlY18wIC8vICJjb250cm9sbGVkX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzMwCiAgICAvLyBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMzMgogICAgLy8gYXNzZXRBbW91bnQ6IGZ1bmRzUmVxdWVzdHNbaV0uYW1vdW50LAogICAgZnJhbWVfZGlnIDAKICAgIGludGNfMyAvLyA4CiAgICBleHRyYWN0X3VpbnQ2NAogICAgZnJhbWVfZGlnIDI5CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIDUKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozMjgtMzM0CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogZXNjcm93QWRkcmVzcywKICAgIC8vICAgICBhc3NldEFtb3VudDogZnVuZHNSZXF1ZXN0c1tpXS5hbW91bnQsCiAgICAvLyAgICAgeGZlckFzc2V0OiBmdW5kc1JlcXVlc3RzW2ldLmFzc2V0CiAgICAvLyAgIH0pCiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzI4LTMzNQogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IGVzY3Jvd0FkZHJlc3MsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IGZ1bmRzUmVxdWVzdHNbaV0uYW1vdW50LAogICAgLy8gICAgIHhmZXJBc3NldDogZnVuZHNSZXF1ZXN0c1tpXS5hc3NldAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX3N1Ym1pdAoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VANzQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzE4CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgZnVuZHNSZXF1ZXN0cy5sZW5ndGg7IGkgKz0gMSkgewogICAgZnJhbWVfZGlnIDE2CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAxNgogICAgYiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fd2hpbGVfdG9wQDU2CgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fZWxzZV9ib2R5QDczOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMzNy0zNDMKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcjogZXNjcm93QWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IGZ1bmRzUmVxdWVzdHNbaV0uYW1vdW50CiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozMzkKICAgIC8vIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGNvbnRyb2xsZWRBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0NvbnRyb2xsZWRBZGRyZXNzIH0pOwogICAgYnl0ZWNfMCAvLyAiY29udHJvbGxlZF9hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMzOQogICAgLy8gc2VuZGVyOiB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNDEKICAgIC8vIGFtb3VudDogZnVuZHNSZXF1ZXN0c1tpXS5hbW91bnQKICAgIGZyYW1lX2RpZyAwCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBmcmFtZV9kaWcgNQogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgaXR4bl9maWVsZCBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozMzctMzQyCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICBzZW5kZXI6IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgcmVjZWl2ZXI6IGVzY3Jvd0FkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiBmdW5kc1JlcXVlc3RzW2ldLmFtb3VudAogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMzNy0zNDMKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlcjogdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcjogZXNjcm93QWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IGZ1bmRzUmVxdWVzdHNbaV0uYW1vdW50CiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0CiAgICBiIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pZl9lbHNlQDc0CgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fZWxzZV9ib2R5QDYyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM1NwogICAgLy8gfSBlbHNlIGlmICh0eXBlID09PSBTcGVuZEFsbG93YW5jZVR5cGVXaW5kb3cpIHsKICAgIGZyYW1lX2RpZyAxMAogICAgcHVzaGJ5dGVzIDB4MDIKICAgID09CiAgICBieiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fZWxzZV9ib2R5QDY2CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Mzg1CiAgICAvLyBpZiAodXNlUm91bmRzKSB7CiAgICBmcmFtZV9kaWcgMjgKICAgIGJ6IHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pZl9lbHNlQDc3CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Mzg2CiAgICAvLyByZXR1cm4gR2xvYmFsLnJvdW5kIC0gKChHbG9iYWwucm91bmQgLSBzdGFydCkgJSBpbnRlcnZhbCkKICAgIGdsb2JhbCBSb3VuZAogICAgZHVwCiAgICBmcmFtZV9kaWcgMjcKICAgIC0KICAgIGZyYW1lX2RpZyAxNwogICAgJQogICAgLQoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5nZXRMYXRlc3RXaW5kb3dTdGFydEA3ODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNjAKICAgIC8vIGlmIChjdXJyZW50V2luZG93U3RhcnQgPiBsYXN0KSB7CiAgICBmcmFtZV9kaWcgMTkKICAgID4KICAgIGJ6IHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9lbHNlX2JvZHlANjUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNjEKICAgIC8vIGFzc2VydChhbW91bnQgPj0gZnVuZFJlcXVlc3QuYW1vdW50LCBFUlJfQUxMT1dBTkNFX0VYQ0VFREVEKTsKICAgIGZyYW1lX2RpZyAwCiAgICBkdXAKICAgIGV4dHJhY3QgOCA4CiAgICBzd2FwCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIGZyYW1lX2RpZyAxMQogICAgPD0KICAgIGFzc2VydCAvLyBhbGxvd2FuY2UgZXhjZWVkZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNjIKICAgIC8vIHRoaXMuYWxsb3dhbmNlcyhrZXkpLnZhbHVlLnNwZW50ID0gZnVuZFJlcXVlc3QuYW1vdW50CiAgICBmcmFtZV9kaWcgMwogICAgcHVzaGludCAxNyAvLyAxNwogICAgdW5jb3ZlciAyCiAgICBib3hfcmVwbGFjZQogICAgYiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYWZ0ZXJfaWZfZWxzZUA3MQoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2Vsc2VfYm9keUA2NToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNjUKICAgIC8vIGNvbnN0IGxlZnRvdmVyOiB1aW50NjQgPSBhbW91bnQgLSBzcGVudDsKICAgIGZyYW1lX2RpZyAxMQogICAgZnJhbWVfZGlnIDI2CiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzY2CiAgICAvLyBhc3NlcnQobGVmdG92ZXIgPj0gZnVuZFJlcXVlc3QuYW1vdW50LCBFUlJfQUxMT1dBTkNFX0VYQ0VFREVEKTsKICAgIGZyYW1lX2RpZyAwCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIHN3YXAKICAgIGRpZyAxCiAgICA+PQogICAgYXNzZXJ0IC8vIGFsbG93YW5jZSBleGNlZWRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM2NwogICAgLy8gdGhpcy5hbGxvd2FuY2VzKGtleSkudmFsdWUuc3BlbnQgKz0gZnVuZFJlcXVlc3QuYW1vdW50CiAgICBmcmFtZV9kaWcgMwogICAgZHVwCiAgICBjb3ZlciAyCiAgICBib3hfZ2V0CiAgICBhc3NlcnQgLy8gQm94IG11c3QgaGF2ZSB2YWx1ZQogICAgcHVzaGludCAxNyAvLyAxNwogICAgZXh0cmFjdF91aW50NjQKICAgICsKICAgIGl0b2IKICAgIHB1c2hpbnQgMTcgLy8gMTcKICAgIHN3YXAKICAgIGJveF9yZXBsYWNlCiAgICBiIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pZl9lbHNlQDcxCgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYWZ0ZXJfaWZfZWxzZUA3NzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozODgKICAgIC8vIHJldHVybiBHbG9iYWwubGF0ZXN0VGltZXN0YW1wIC0gKChHbG9iYWwubGF0ZXN0VGltZXN0YW1wIC0gc3RhcnQpICUgaW50ZXJ2YWwpCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBkdXAKICAgIGZyYW1lX2RpZyAyNwogICAgLQogICAgZnJhbWVfZGlnIDE3CiAgICAlCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzU4CiAgICAvLyBjb25zdCBjdXJyZW50V2luZG93U3RhcnQgPSB0aGlzLmdldExhdGVzdFdpbmRvd1N0YXJ0KHVzZVJvdW5kcywgc3RhcnQsIGludGVydmFsKQogICAgYiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmdldExhdGVzdFdpbmRvd1N0YXJ0QDc4CgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fZWxzZV9ib2R5QDY2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjM2OQogICAgLy8gfSBlbHNlIGlmICh0eXBlID09PSBTcGVuZEFsbG93YW5jZVR5cGVEcmlwKSB7CiAgICBmcmFtZV9kaWcgMTAKICAgIHB1c2hieXRlcyAweDAzCiAgICA9PQogICAgYnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VANzEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNzAKICAgIC8vIGNvbnN0IGVwb2NoUmVmID0gdXNlUm91bmRzID8gR2xvYmFsLnJvdW5kIDogR2xvYmFsLmxhdGVzdFRpbWVzdGFtcDsKICAgIGZyYW1lX2RpZyAyOAogICAgYnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX3Rlcm5hcnlfZmFsc2VANjkKICAgIGdsb2JhbCBSb3VuZAogICAgZnJhbWVfYnVyeSAxNAoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX3Rlcm5hcnlfbWVyZ2VANzA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzcxCiAgICAvLyBjb25zdCBwYXNzZWQ6IHVpbnQ2NCA9IGVwb2NoUmVmIC0gbGFzdAogICAgZnJhbWVfZGlnIDE0CiAgICBmcmFtZV9kaWcgMTkKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNzUKICAgIC8vIGNvbnN0IGFjY3J1ZWQ6IHVpbnQ2NCA9IHNwZW50ICsgKChwYXNzZWQgLyBpbnRlcnZhbCkgKiBhbW91bnQpCiAgICBmcmFtZV9kaWcgMTcKICAgIC8KICAgIGZyYW1lX2RpZyAxMQogICAgKgogICAgZnJhbWVfZGlnIDI2CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Mzc2CiAgICAvLyBjb25zdCBhdmFpbGFibGU6IHVpbnQ2NCA9IGFjY3J1ZWQgPiBtYXggPyBtYXggOiBhY2NydWVkCiAgICBkdXAKICAgIGZyYW1lX2RpZyAyMQogICAgZHVwCiAgICBjb3ZlciAzCiAgICA+CiAgICBzd2FwCiAgICBjb3ZlciAyCiAgICBzZWxlY3QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNzgKICAgIC8vIGFzc2VydChhdmFpbGFibGUgPj0gZnVuZFJlcXVlc3QuYW1vdW50LCBFUlJfQUxMT1dBTkNFX0VYQ0VFREVEKTsKICAgIGZyYW1lX2RpZyAwCiAgICBpbnRjXzMgLy8gOAogICAgZXh0cmFjdF91aW50NjQKICAgIGR1cDIKICAgID49CiAgICBhc3NlcnQgLy8gYWxsb3dhbmNlIGV4Y2VlZGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Mzc5CiAgICAvLyB0aGlzLmFsbG93YW5jZXMoa2V5KS52YWx1ZS5zcGVudCA9IChhdmFpbGFibGUgLSBmdW5kUmVxdWVzdC5hbW91bnQpCiAgICAtCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgMwogICAgcHVzaGludCAxNyAvLyAxNwogICAgdW5jb3ZlciAyCiAgICBib3hfcmVwbGFjZQogICAgYiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYWZ0ZXJfaWZfZWxzZUA3MQoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX3Rlcm5hcnlfZmFsc2VANjk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzcwCiAgICAvLyBjb25zdCBlcG9jaFJlZiA9IHVzZVJvdW5kcyA/IEdsb2JhbC5yb3VuZCA6IEdsb2JhbC5sYXRlc3RUaW1lc3RhbXA7CiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBmcmFtZV9idXJ5IDE0CiAgICBiIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl90ZXJuYXJ5X21lcmdlQDcwCgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fdGVybmFyeV9mYWxzZUA1OToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozNTEKICAgIC8vIGNvbnN0IG5ld0xhc3QgPSB1c2VSb3VuZHMgPyBHbG9iYWwucm91bmQgOiBHbG9iYWwubGF0ZXN0VGltZXN0YW1wOwogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgZnJhbWVfYnVyeSAyNAogICAgYiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fdGVybmFyeV9tZXJnZUA2MAoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VAODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMDQKICAgIC8vIGNvbnN0IHsgdXNlUm91bmRzLCB1c2VFeGVjdXRpb25LZXkgfSA9IHRoaXMucGx1Z2lucyhrZXkpLnZhbHVlCiAgICBmcmFtZV9kaWcgMgogICAgcHVzaGludCAyNyAvLyAyNwogICAgaW50Y18xIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICBkdXAKICAgIGludGNfMSAvLyAxCiAgICBnZXRiaXQKICAgIGZyYW1lX2J1cnkgMjgKICAgIGludGNfMiAvLyAyCiAgICBnZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMDYKICAgIC8vIGlmICh1c2VFeGVjdXRpb25LZXkgJiYgIShUeG4uc2VuZGVyID09PSB0aGlzLmFkbWluLnZhbHVlKSkgewogICAgYnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VAMjIKICAgIHR4biBTZW5kZXIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MTYKICAgIC8vIGFkbWluID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0FkbWluIH0pCiAgICBieXRlY18yIC8vICJhZG1pbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMDYKICAgIC8vIGlmICh1c2VFeGVjdXRpb25LZXkgJiYgIShUeG4uc2VuZGVyID09PSB0aGlzLmFkbWluLnZhbHVlKSkgewogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBibnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VAMjIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0MQogICAgLy8gZXhlY3V0aW9ucyA9IEJveE1hcDxieXRlczwzMj4sIEV4ZWN1dGlvbkluZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhFeGVjdXRpb25zIH0pCiAgICBieXRlYyA4IC8vICJ4IgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIwNwogICAgLy8gYXNzZXJ0KHRoaXMuZXhlY3V0aW9ucyhUeG4ubGVhc2UpLmV4aXN0cywgRVJSX0VYRUNVVElPTl9LRVlfTk9UX0ZPVU5EKTsKICAgIHR4biBMZWFzZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBleGVjdXRpb25zID0gQm94TWFwPGJ5dGVzPDMyPiwgRXhlY3V0aW9uSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeEV4ZWN1dGlvbnMgfSkKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIwNwogICAgLy8gYXNzZXJ0KHRoaXMuZXhlY3V0aW9ucyhUeG4ubGVhc2UpLmV4aXN0cywgRVJSX0VYRUNVVElPTl9LRVlfTk9UX0ZPVU5EKTsKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEV4ZWN1dGlvbiBrZXkgbm90IGZvdW5kCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIGV4ZWN1dGlvbnMgPSBCb3hNYXA8Ynl0ZXM8MzI+LCBFeGVjdXRpb25JbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4RXhlY3V0aW9ucyB9KQogICAgYnl0ZWMgOCAvLyAieCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMDgKICAgIC8vIGFzc2VydCh0aGlzLmV4ZWN1dGlvbnMoVHhuLmxlYXNlKS52YWx1ZS5maXJzdFZhbGlkIDw9IEdsb2JhbC5yb3VuZCwgRVJSX0VYRUNVVElPTl9OT1RfUkVBRFkpOwogICAgdHhuIExlYXNlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIGV4ZWN1dGlvbnMgPSBCb3hNYXA8Ynl0ZXM8MzI+LCBFeGVjdXRpb25JbmZvPih7IGtleVByZWZpeDogQWJzdHJhY3RBY2NvdW50Qm94UHJlZml4RXhlY3V0aW9ucyB9KQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjA4CiAgICAvLyBhc3NlcnQodGhpcy5leGVjdXRpb25zKFR4bi5sZWFzZSkudmFsdWUuZmlyc3RWYWxpZCA8PSBHbG9iYWwucm91bmQsIEVSUl9FWEVDVVRJT05fTk9UX1JFQURZKTsKICAgIGludGNfMiAvLyAyCiAgICBpbnRjXzMgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGdsb2JhbCBSb3VuZAogICAgPD0KICAgIGFzc2VydCAvLyBFeGVjdXRpb24ga2V5IG5vdCByZWFkeQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBleGVjdXRpb25zID0gQm94TWFwPGJ5dGVzPDMyPiwgRXhlY3V0aW9uSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeEV4ZWN1dGlvbnMgfSkKICAgIGJ5dGVjIDggLy8gIngiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjA5CiAgICAvLyBhc3NlcnQodGhpcy5leGVjdXRpb25zKFR4bi5sZWFzZSkudmFsdWUubGFzdFZhbGlkID49IEdsb2JhbC5yb3VuZCwgRVJSX0VYRUNVVElPTl9FWFBJUkVEKTsKICAgIHR4biBMZWFzZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBleGVjdXRpb25zID0gQm94TWFwPGJ5dGVzPDMyPiwgRXhlY3V0aW9uSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeEV4ZWN1dGlvbnMgfSkKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIwOQogICAgLy8gYXNzZXJ0KHRoaXMuZXhlY3V0aW9ucyhUeG4ubGVhc2UpLnZhbHVlLmxhc3RWYWxpZCA+PSBHbG9iYWwucm91bmQsIEVSUl9FWEVDVVRJT05fRVhQSVJFRCk7CiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICBpbnRjXzMgLy8gOAogICAgYm94X2V4dHJhY3QKICAgIGJ0b2kKICAgIGdsb2JhbCBSb3VuZAogICAgPj0KICAgIGFzc2VydCAvLyBFeGVjdXRpb24ga2V5IGV4cGlyZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0MQogICAgLy8gZXhlY3V0aW9ucyA9IEJveE1hcDxieXRlczwzMj4sIEV4ZWN1dGlvbkluZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhFeGVjdXRpb25zIH0pCiAgICBieXRlYyA4IC8vICJ4IgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIxMQogICAgLy8gY29uc3QgZ3JvdXBzID0gdGhpcy5leGVjdXRpb25zKFR4bi5sZWFzZSkudmFsdWUuZ3JvdXBzIGFzIFJlYWRvbmx5PGJ5dGVzPDMyPltdPjsKICAgIHR4biBMZWFzZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBleGVjdXRpb25zID0gQm94TWFwPGJ5dGVzPDMyPiwgRXhlY3V0aW9uSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeEV4ZWN1dGlvbnMgfSkKICAgIGNvbmNhdAogICAgZnJhbWVfYnVyeSA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjEzCiAgICAvLyBsZXQgZm91bmRHcm91cCA9IGZhbHNlOwogICAgaW50Y18wIC8vIDAKICAgIGZyYW1lX2J1cnkgMTUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMTQKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBncm91cHMubGVuZ3RoOyBpICs9IDEpIHsKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDE2CgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fd2hpbGVfdG9wQDE3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIxNAogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGdyb3Vwcy5sZW5ndGg7IGkgKz0gMSkgewogICAgZnJhbWVfZGlnIDQKICAgIHB1c2hpbnQgMTggLy8gMTgKICAgIGludGNfMiAvLyAyCiAgICBib3hfZXh0cmFjdAogICAgYnRvaQogICAgZnJhbWVfZGlnIDE2CiAgICA+CiAgICBieiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYWZ0ZXJfd2hpbGVAMjEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMTUKICAgIC8vIGlmIChncm91cHNbaV0gPT09IEdsb2JhbC5ncm91cElkKSB7CiAgICBmcmFtZV9kaWcgMTYKICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgICoKICAgIHB1c2hpbnQgMjAgLy8gMjAKICAgICsKICAgIGZyYW1lX2RpZyA0CiAgICBzd2FwCiAgICBwdXNoaW50IDMyIC8vIDMyCiAgICBib3hfZXh0cmFjdAogICAgZ2xvYmFsIEdyb3VwSUQKICAgID09CiAgICBieiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYWZ0ZXJfaWZfZWxzZUAyMAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIxNgogICAgLy8gZm91bmRHcm91cCA9IHRydWU7CiAgICBpbnRjXzEgLy8gMQogICAgZnJhbWVfYnVyeSAxNQoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VAMjA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjE0CiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSArPSAxKSB7CiAgICBmcmFtZV9kaWcgMTYKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDE2CiAgICBiIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl93aGlsZV90b3BAMTcKCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl93aGlsZUAyMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMjAKICAgIC8vIGFzc2VydChmb3VuZEdyb3VwLCBFUlJfR1JPVVBfTk9UX0ZPVU5EKTsKICAgIGZyYW1lX2RpZyAxNQogICAgYXNzZXJ0IC8vIEdyb3VwIG5vdCBmb3VuZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBleGVjdXRpb25zID0gQm94TWFwPGJ5dGVzPDMyPiwgRXhlY3V0aW9uSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeEV4ZWN1dGlvbnMgfSkKICAgIGJ5dGVjIDggLy8gIngiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjIxCiAgICAvLyB0aGlzLmV4ZWN1dGlvbnMoVHhuLmxlYXNlKS5kZWxldGUoKTsKICAgIHR4biBMZWFzZQogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBleGVjdXRpb25zID0gQm94TWFwPGJ5dGVzPDMyPiwgRXhlY3V0aW9uSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeEV4ZWN1dGlvbnMgfSkKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIyMQogICAgLy8gdGhpcy5leGVjdXRpb25zKFR4bi5sZWFzZSkuZGVsZXRlKCk7CiAgICBib3hfZGVsCiAgICBwb3AKCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pZl9lbHNlQDIyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIyNAogICAgLy8gY29uc3QgaW5pdGlhbENoZWNrID0gdGhpcy5wbHVnaW5DaGVjayhrZXkpOwogICAgZnJhbWVfZGlnIDYKICAgIGNhbGxzdWIgcGx1Z2luQ2hlY2sKICAgIGZyYW1lX2J1cnkgNgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIyNgogICAgLy8gYXNzZXJ0KGluaXRpYWxDaGVjay5leGlzdHMsIEVSUl9QTFVHSU5fRE9FU19OT1RfRVhJU1QpOwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBhc3NlcnQgLy8gcGx1Z2luIGRvZXMgbm90IGV4aXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjI3CiAgICAvLyBhc3NlcnQoIWluaXRpYWxDaGVjay5leHBpcmVkLCBFUlJfUExVR0lOX0VYUElSRUQpOwogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgZ2V0Yml0CiAgICAhCiAgICBhc3NlcnQgLy8gcGx1Z2luIGV4cGlyZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMjgKICAgIC8vIGFzc2VydCghaW5pdGlhbENoZWNrLm9uQ29vbGRvd24sIEVSUl9QTFVHSU5fT05fQ09PTERPV04pOwogICAgaW50Y18yIC8vIDIKICAgIGdldGJpdAogICAgIQogICAgYXNzZXJ0IC8vIHBsdWdpbiBvbiBjb29sZG93bgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIzMC0yMzIKICAgIC8vIGNvbnN0IGVwb2NoUmVmID0gdXNlUm91bmRzCiAgICAvLyAgID8gR2xvYmFsLnJvdW5kCiAgICAvLyAgIDogR2xvYmFsLmxhdGVzdFRpbWVzdGFtcDsKICAgIGZyYW1lX2RpZyAyOAogICAgYnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX3Rlcm5hcnlfZmFsc2VAMjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMzEKICAgIC8vID8gR2xvYmFsLnJvdW5kCiAgICBnbG9iYWwgUm91bmQKICAgIGZyYW1lX2J1cnkgMTQKCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl90ZXJuYXJ5X21lcmdlQDI1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIzNAogICAgLy8gbGV0IHJla2V5c0JhY2sgPSBmYWxzZTsKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDI1CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjM1CiAgICAvLyBsZXQgbWV0aG9kSW5kZXg6IHVpbnQ2NCA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSAyMgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIzNwogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gKFR4bi5ncm91cEluZGV4ICsgMSk7IGkgPCBHbG9iYWwuZ3JvdXBTaXplOyBpICs9IDEpIHsKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgZnJhbWVfYnVyeSAxOAogICAgZnJhbWVfZGlnIDYKICAgIGZyYW1lX2J1cnkgNwoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX3doaWxlX3RvcEAyNjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMzcKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IChUeG4uZ3JvdXBJbmRleCArIDEpOyBpIDwgR2xvYmFsLmdyb3VwU2l6ZTsgaSArPSAxKSB7CiAgICBmcmFtZV9kaWcgMTgKICAgIGdsb2JhbCBHcm91cFNpemUKICAgIDwKICAgIGJ6IHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9ibG9ja0A1MwogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI0MAogICAgLy8gaWYgKHRoaXMudHhuUmVrZXlzQmFjayh0eG4pKSB7CiAgICBmcmFtZV9kaWcgMTgKICAgIGNhbGxzdWIgdHhuUmVrZXlzQmFjawogICAgYnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VAMjkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNDEKICAgIC8vIHJla2V5c0JhY2sgPSB0cnVlOwogICAgaW50Y18xIC8vIDEKICAgIGZyYW1lX2J1cnkgMjUKCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9ibG9ja0A1MzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNzEKICAgIC8vIGFzc2VydChyZWtleXNCYWNrLCBFUlJfTUlTU0lOR19SRUtFWV9CQUNLKTsKICAgIGZyYW1lX2RpZyAyNQogICAgYXNzZXJ0IC8vIG1pc3NpbmcgcmVrZXkgYmFjawogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU5My02MDAKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlcjogdGhpcy5zcGVuZGluZ0FkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgcmVjZWl2ZXI6IHRoaXMuc3BlbmRpbmdBZGRyZXNzLnZhbHVlLAogICAgLy8gICAgIHJla2V5VG86IHBsdWdpbkFwcC5hZGRyZXNzLAogICAgLy8gICAgIG5vdGU6ICdyZWtleWluZyB0byBwbHVnaW4gYXBwJwogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTk1CiAgICAvLyBzZW5kZXI6IHRoaXMuc3BlbmRpbmdBZGRyZXNzLnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNgogICAgLy8gc3BlbmRpbmdBZGRyZXNzID0gR2xvYmFsU3RhdGU8QWNjb3VudD4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c1NwZW5kaW5nQWRkcmVzcyB9KQogICAgYnl0ZWMgMTEgLy8gInNwZW5kaW5nX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTk1CiAgICAvLyBzZW5kZXI6IHRoaXMuc3BlbmRpbmdBZGRyZXNzLnZhbHVlLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1OTcKICAgIC8vIHJla2V5VG86IHBsdWdpbkFwcC5hZGRyZXNzLAogICAgZnJhbWVfZGlnIC01CiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTk4CiAgICAvLyBub3RlOiAncmVrZXlpbmcgdG8gcGx1Z2luIGFwcCcKICAgIHB1c2hieXRlcyAicmVrZXlpbmcgdG8gcGx1Z2luIGFwcCIKICAgIGl0eG5fZmllbGQgTm90ZQogICAgaXR4bl9maWVsZCBSZWtleVRvCiAgICBkdXAKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTkzLTU5OQogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyOiB0aGlzLnNwZW5kaW5nQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcjogdGhpcy5zcGVuZGluZ0FkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgcmVrZXlUbzogcGx1Z2luQXBwLmFkZHJlc3MsCiAgICAvLyAgICAgbm90ZTogJ3Jla2V5aW5nIHRvIHBsdWdpbiBhcHAnCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTkzLTYwMAogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyOiB0aGlzLnNwZW5kaW5nQWRkcmVzcy52YWx1ZSwKICAgIC8vICAgICByZWNlaXZlcjogdGhpcy5zcGVuZGluZ0FkZHJlc3MudmFsdWUsCiAgICAvLyAgICAgcmVrZXlUbzogcGx1Z2luQXBwLmFkZHJlc3MsCiAgICAvLyAgICAgbm90ZTogJ3Jla2V5aW5nIHRvIHBsdWdpbiBhcHAnCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzAKICAgIC8vIHJla2V5SW5kZXggPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwLCBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c1Jla2V5SW5kZXggfSkKICAgIGJ5dGVjIDE3IC8vICJyZWtleV9pbmRleCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2MDMKICAgIC8vIHRoaXMucmVrZXlJbmRleC52YWx1ZSA9IFR4bi5ncm91cEluZGV4CiAgICB0eG4gR3JvdXBJbmRleAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozMwogICAgLy8gcGx1Z2lucyA9IEJveE1hcDxQbHVnaW5LZXksIFBsdWdpbkluZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhQbHVnaW5zIH0pOwogICAgYnl0ZWMgNCAvLyAicCIKICAgIGZyYW1lX2RpZyA3CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo2MDUKICAgIC8vIGlmICh0aGlzLnBsdWdpbnMoa2V5KS52YWx1ZS5kZWxlZ2F0aW9uVHlwZSA9PT0gRGVsZWdhdGlvblR5cGVTZWxmKSB7CiAgICBpbnRjXzMgLy8gOAogICAgaW50Y18xIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICBieXRlYyAxNSAvLyAweDAxCiAgICA9PQogICAgYnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VAMTMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMAogICAgLy8gbGFzdFVzZXJJbnRlcmFjdGlvbiA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBrZXk6IEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c0xhc3RVc2VySW50ZXJhY3Rpb24gfSkKICAgIGJ5dGVjXzMgLy8gImxhc3RfdXNlcl9pbnRlcmFjdGlvbiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo0NAogICAgLy8gdGhpcy5sYXN0VXNlckludGVyYWN0aW9uLnZhbHVlID0gR2xvYmFsLmxhdGVzdFRpbWVzdGFtcAogICAgZ2xvYmFsIExhdGVzdFRpbWVzdGFtcAogICAgYXBwX2dsb2JhbF9wdXQKCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pZl9lbHNlQDEzOgogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2J1cnkgMQogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pZl9lbHNlQDI5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI0NQogICAgLy8gaWYgKHR4bi50eXBlICE9PSBUcmFuc2FjdGlvblR5cGUuQXBwbGljYXRpb25DYWxsKSB7CiAgICBmcmFtZV9kaWcgMTgKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBwdXNoaW50IDYgLy8gNgogICAgIT0KICAgIGJ6IHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pZl9lbHNlQDMxCiAgICBmcmFtZV9kaWcgNwoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2Jsb2NrQDUxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjIzNwogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gKFR4bi5ncm91cEluZGV4ICsgMSk7IGkgPCBHbG9iYWwuZ3JvdXBTaXplOyBpICs9IDEpIHsKICAgIGZyYW1lX2RpZyAxOAogICAgaW50Y18xIC8vIDEKICAgICsKICAgIGZyYW1lX2J1cnkgMTgKICAgIGZyYW1lX2J1cnkgNwogICAgYiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fd2hpbGVfdG9wQDI2CgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYWZ0ZXJfaWZfZWxzZUAzMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNDkKICAgIC8vIGFzc2VydCh0eG4uYXBwSWQuaWQgPT09IGtleS5wbHVnaW4sIEVSUl9DQU5OT1RfQ0FMTF9PVEhFUl9BUFBTX0RVUklOR19SRUtFWSk7CiAgICBmcmFtZV9kaWcgMTgKICAgIGR1cAogICAgZ3R4bnMgQXBwbGljYXRpb25JRAogICAgZnJhbWVfZGlnIDYKICAgIGR1cAogICAgY292ZXIgMwogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDY0CiAgICA9PQogICAgYXNzZXJ0IC8vIGNhbm5vdCBjYWxsIG90aGVyIGFwcHMgZHVyaW5nIHJla2V5CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjUwCiAgICAvLyBhc3NlcnQodHhuLm9uQ29tcGxldGlvbiA9PT0gT25Db21wbGV0ZUFjdGlvbi5Ob09wLCBFUlJfSU5WQUxJRF9PTkNPTVBMRVRFKTsKICAgIGR1cAogICAgZ3R4bnMgT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gaW52YWxpZCBvbmNvbXBsZXRlIG11c3QgYmUgbm8gb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNTMKICAgIC8vIGFzc2VydCh0eG4ubnVtQXBwQXJncyA+IDEsIEVSUl9JTlZBTElEX1NFTkRFUl9BUkcpOwogICAgZHVwCiAgICBndHhucyBOdW1BcHBBcmdzCiAgICBpbnRjXzEgLy8gMQogICAgPgogICAgYXNzZXJ0IC8vIGludmFsaWQgc2VuZGVyIG11c3QgYmUgdGhpcyBhcHAgaWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNTQKICAgIC8vIGFzc2VydChBcHBsaWNhdGlvbihidG9pKHR4bi5hcHBBcmdzKDEpKSkgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25JZCwgRVJSX0lOVkFMSURfU0VOREVSX1ZBTFVFKTsKICAgIGludGNfMSAvLyAxCiAgICBndHhuc2FzIEFwcGxpY2F0aW9uQXJncwogICAgYnRvaQogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbklECiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgc2VuZGVyIGFwcCBpZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI1NgogICAgLy8gY29uc3QgeyBleHBpcmVkLCBvbkNvb2xkb3duLCBoYXNNZXRob2RSZXN0cmljdGlvbnMgfSA9IHRoaXMucGx1Z2luQ2hlY2soa2V5KTsKICAgIGNhbGxzdWIgcGx1Z2luQ2hlY2sKICAgIGZyYW1lX2J1cnkgNgogICAgZHVwCiAgICBpbnRjXzEgLy8gMQogICAgZ2V0Yml0CiAgICBkaWcgMQogICAgaW50Y18yIC8vIDIKICAgIGdldGJpdAogICAgdW5jb3ZlciAyCiAgICBwdXNoaW50IDMgLy8gMwogICAgZ2V0Yml0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjU4CiAgICAvLyBhc3NlcnQoIWV4cGlyZWQsIEVSUl9QTFVHSU5fRVhQSVJFRCk7CiAgICB1bmNvdmVyIDIKICAgICEKICAgIGFzc2VydCAvLyBwbHVnaW4gZXhwaXJlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI1OQogICAgLy8gYXNzZXJ0KCFvbkNvb2xkb3duLCBFUlJfUExVR0lOX09OX0NPT0xET1dOKTsKICAgIHN3YXAKICAgICEKICAgIGFzc2VydCAvLyBwbHVnaW4gb24gY29vbGRvd24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNjEKICAgIC8vIGlmIChoYXNNZXRob2RSZXN0cmljdGlvbnMpIHsKICAgIGJ6IHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pZl9lbHNlQDUwCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjYyCiAgICAvLyBhc3NlcnQobWV0aG9kSW5kZXggPCBtZXRob2RPZmZzZXRzLmxlbmd0aCwgRVJSX01BTEZPUk1FRF9PRkZTRVRTKTsKICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18wIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBmcmFtZV9kaWcgMjIKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICA8CiAgICBhc3NlcnQgLy8gbWFsZm9ybWVkIG1ldGhvZCBvZmZzZXRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjYzCiAgICAvLyBjb25zdCB7IG1ldGhvZEFsbG93ZWQsIG1ldGhvZE9uQ29vbGRvd24gfSA9IHRoaXMubWV0aG9kQ2hlY2soa2V5LCB0eG4sIG1ldGhvZE9mZnNldHNbbWV0aG9kSW5kZXhdKTsKICAgIGZyYW1lX2RpZyAtMgogICAgZXh0cmFjdCAyIDAKICAgIHN3YXAKICAgIGludGNfMyAvLyA4CiAgICAqCiAgICBleHRyYWN0X3VpbnQ2NAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI4NAogICAgLy8gYXNzZXJ0KGxlbih0eG4uYXBwQXJncygwKSkgPT09IDQsIEVSUl9JTlZBTElEX01FVEhPRF9TSUdOQVRVUkVfTEVOR1RIKQogICAgZnJhbWVfZGlnIDE4CiAgICBpbnRjXzAgLy8gMAogICAgZ3R4bnNhcyBBcHBsaWNhdGlvbkFyZ3MKICAgIGR1cAogICAgZnJhbWVfYnVyeSA5CiAgICBsZW4KICAgIHB1c2hpbnQgNCAvLyA0CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbWV0aG9kIHNpZ25hdHVyZSBsZW5ndGgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czozMwogICAgLy8gcGx1Z2lucyA9IEJveE1hcDxQbHVnaW5LZXksIFBsdWdpbkluZm8+KHsga2V5UHJlZml4OiBBYnN0cmFjdEFjY291bnRCb3hQcmVmaXhQbHVnaW5zIH0pOwogICAgYnl0ZWMgNCAvLyAicCIKICAgIGZyYW1lX2RpZyA2CiAgICBjb25jYXQKICAgIGR1cAogICAgZnJhbWVfYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Mjg3CiAgICAvLyBjb25zdCB7IHVzZVJvdW5kcyB9ID0gdGhpcy5wbHVnaW5zKGtleSkudmFsdWUKICAgIGR1cAogICAgcHVzaGludCAyNyAvLyAyNwogICAgaW50Y18xIC8vIDEKICAgIGJveF9leHRyYWN0CiAgICBpbnRjXzEgLy8gMQogICAgZ2V0Yml0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGZyYW1lX2J1cnkgMjgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyODgKICAgIC8vIGNvbnN0IHsgc2VsZWN0b3IsIGNvb2xkb3duLCBsYXN0Q2FsbGVkIH0gPSB0aGlzLnBsdWdpbnMoa2V5KS52YWx1ZS5tZXRob2RzW29mZnNldF0KICAgIHVuY292ZXIgMgogICAgcHVzaGludCAyMCAvLyAyMAogICAgKgogICAgZHVwCiAgICBmcmFtZV9idXJ5IDEyCiAgICBwdXNoaW50IDQ2IC8vIDQ2CiAgICArCiAgICBwdXNoaW50IDIwIC8vIDIwCiAgICBib3hfZXh0cmFjdAogICAgZHVwCiAgICBleHRyYWN0IDAgNAogICAgZnJhbWVfYnVyeSA4CiAgICBkdXAKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBleHRyYWN0X3VpbnQ2NAogICAgZnJhbWVfYnVyeSAxMwogICAgcHVzaGludCAxMiAvLyAxMgogICAgZXh0cmFjdF91aW50NjQKICAgIGZyYW1lX2J1cnkgMjAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyOTIKICAgIC8vIGNvbnN0IGVwb2NoUmVmID0gdXNlUm91bmRzID8gR2xvYmFsLnJvdW5kIDogR2xvYmFsLmxhdGVzdFRpbWVzdGFtcAogICAgYnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX3Rlcm5hcnlfZmFsc2VAMzQKICAgIGdsb2JhbCBSb3VuZAoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX3Rlcm5hcnlfbWVyZ2VAMzU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjkzCiAgICAvLyBjb25zdCBtZXRob2RPbkNvb2xkb3duID0gKGVwb2NoUmVmIC0gbGFzdENhbGxlZCkgPCBjb29sZG93bgogICAgZnJhbWVfZGlnIDIwCiAgICAtCiAgICBmcmFtZV9kaWcgMTMKICAgIDwKICAgIGZyYW1lX2J1cnkgMjMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyOTUKICAgIC8vIGlmIChzZWxlY3RvciA9PT0gc2VsZWN0b3JBcmcgJiYgKCFoYXNDb29sZG93biB8fCAhbWV0aG9kT25Db29sZG93bikpIHsKICAgIGZyYW1lX2RpZyA4CiAgICBmcmFtZV9kaWcgOQogICAgPT0KICAgIGJ6IHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pZl9lbHNlQDQ0CiAgICBmcmFtZV9kaWcgMTMKICAgIGJ6IHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9pZl9ib2R5QDM4CiAgICBmcmFtZV9kaWcgMjMKICAgIGJueiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYWZ0ZXJfaWZfZWxzZUA0NAoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2lmX2JvZHlAMzg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Mjk3CiAgICAvLyBpZiAoaGFzQ29vbGRvd24pIHsKICAgIGZyYW1lX2RpZyAxMwogICAgYnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VANDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyOTgKICAgIC8vIGNvbnN0IGxhc3RDYWxsZWQgPSB1c2VSb3VuZHMgPyBHbG9iYWwucm91bmQgOiBHbG9iYWwubGF0ZXN0VGltZXN0YW1wOwogICAgZnJhbWVfZGlnIDI4CiAgICBieiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fdGVybmFyeV9mYWxzZUA0MQogICAgZ2xvYmFsIFJvdW5kCgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fdGVybmFyeV9tZXJnZUA0MjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyOTkKICAgIC8vIHRoaXMucGx1Z2lucyhrZXkpLnZhbHVlLm1ldGhvZHNbb2Zmc2V0XS5sYXN0Q2FsbGVkID0gbGFzdENhbGxlZAogICAgaXRvYgogICAgZnJhbWVfZGlnIDEyCiAgICBwdXNoaW50IDU4IC8vIDU4CiAgICArCiAgICBmcmFtZV9kaWcgMgogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBib3hfcmVwbGFjZQoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lmX2Vsc2VANDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MzAyLTMwNQogICAgLy8gcmV0dXJuIHsKICAgIC8vICAgbWV0aG9kQWxsb3dlZDogdHJ1ZSwKICAgIC8vICAgbWV0aG9kT25Db29sZG93bgogICAgLy8gfQogICAgcHVzaGJ5dGVzIDB4ODAKICAgIGludGNfMSAvLyAxCiAgICBmcmFtZV9kaWcgMjMKICAgIHNldGJpdAoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5tZXRob2RDaGVja0A0NToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNjMKICAgIC8vIGNvbnN0IHsgbWV0aG9kQWxsb3dlZCwgbWV0aG9kT25Db29sZG93biB9ID0gdGhpcy5tZXRob2RDaGVjayhrZXksIHR4biwgbWV0aG9kT2Zmc2V0c1ttZXRob2RJbmRleF0pOwogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICBzd2FwCiAgICBpbnRjXzEgLy8gMQogICAgZ2V0Yml0CiAgICBmcmFtZV9idXJ5IDIzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjY0CiAgICAvLyBhc3NlcnQobWV0aG9kQWxsb3dlZCAmJiAhbWV0aG9kT25Db29sZG93biwgRVJSX01FVEhPRF9PTl9DT09MRE9XTik7CiAgICBieiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYm9vbF9mYWxzZUA0OAogICAgZnJhbWVfZGlnIDIzCiAgICBibnogc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2Jvb2xfZmFsc2VANDgKICAgIGludGNfMSAvLyAxCgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYm9vbF9tZXJnZUA0OToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNjQKICAgIC8vIGFzc2VydChtZXRob2RBbGxvd2VkICYmICFtZXRob2RPbkNvb2xkb3duLCBFUlJfTUVUSE9EX09OX0NPT0xET1dOKTsKICAgIGFzc2VydCAvLyBtZXRob2Qgb24gY29vbGRvd24KCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pZl9lbHNlQDUwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBwbHVnaW5zID0gQm94TWFwPFBsdWdpbktleSwgUGx1Z2luSW5mbz4oeyBrZXlQcmVmaXg6IEFic3RyYWN0QWNjb3VudEJveFByZWZpeFBsdWdpbnMgfSk7CiAgICBieXRlYyA0IC8vICJwIgogICAgZnJhbWVfZGlnIDYKICAgIGR1cAogICAgY292ZXIgMgogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjY3CiAgICAvLyB0aGlzLnBsdWdpbnMoa2V5KS52YWx1ZS5sYXN0Q2FsbGVkID0gZXBvY2hSZWYKICAgIGZyYW1lX2RpZyAxNAogICAgaXRvYgogICAgcHVzaGludCAyOCAvLyAyOAogICAgc3dhcAogICAgYm94X3JlcGxhY2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyNjgKICAgIC8vIG1ldGhvZEluZGV4ICs9IDE7CiAgICBmcmFtZV9kaWcgMjIKICAgIGludGNfMSAvLyAxCiAgICArCiAgICBmcmFtZV9idXJ5IDIyCiAgICBiIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9ibG9ja0A1MQoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX2Jvb2xfZmFsc2VANDg6CiAgICBpbnRjXzAgLy8gMAogICAgYiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYm9vbF9tZXJnZUA0OQoKc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX3Rlcm5hcnlfZmFsc2VANDE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6Mjk4CiAgICAvLyBjb25zdCBsYXN0Q2FsbGVkID0gdXNlUm91bmRzID8gR2xvYmFsLnJvdW5kIDogR2xvYmFsLmxhdGVzdFRpbWVzdGFtcDsKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGIgc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX3Rlcm5hcnlfbWVyZ2VANDIKCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pZl9lbHNlQDQ0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjMwOC0zMTEKICAgIC8vIHJldHVybiB7CiAgICAvLyAgIG1ldGhvZEFsbG93ZWQ6IGZhbHNlLAogICAgLy8gICBtZXRob2RPbkNvb2xkb3duOiB0cnVlCiAgICAvLyB9CiAgICBwdXNoYnl0ZXMgMHg0MAogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI2MwogICAgLy8gY29uc3QgeyBtZXRob2RBbGxvd2VkLCBtZXRob2RPbkNvb2xkb3duIH0gPSB0aGlzLm1ldGhvZENoZWNrKGtleSwgdHhuLCBtZXRob2RPZmZzZXRzW21ldGhvZEluZGV4XSk7CiAgICBiIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQubWV0aG9kQ2hlY2tANDUKCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl90ZXJuYXJ5X2ZhbHNlQDM0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjI5MgogICAgLy8gY29uc3QgZXBvY2hSZWYgPSB1c2VSb3VuZHMgPyBHbG9iYWwucm91bmQgOiBHbG9iYWwubGF0ZXN0VGltZXN0YW1wCiAgICBnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCiAgICBiIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl90ZXJuYXJ5X21lcmdlQDM1CgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fdGVybmFyeV9mYWxzZUAyNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoyMzIKICAgIC8vIDogR2xvYmFsLmxhdGVzdFRpbWVzdGFtcDsKICAgIGdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKICAgIGZyYW1lX2J1cnkgMTQKICAgIGIgc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjpBYnN0cmFjdGVkQWNjb3VudC5hcmM1OF9yZWtleVRvUGx1Z2luX3Rlcm5hcnlfbWVyZ2VAMjUKCnNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo6QWJzdHJhY3RlZEFjY291bnQuYXJjNThfcmVrZXlUb1BsdWdpbl9lbHNlX2JvZHlANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czo1ODgKICAgIC8vIHRoaXMuc3BlbmRpbmdBZGRyZXNzLnZhbHVlID0gdGhpcy5jb250cm9sbGVkQWRkcmVzcy52YWx1ZQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9hYnN0cmFjdGVkX2FjY291bnQvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29udHJvbGxlZEFkZHJlc3MgPSBHbG9iYWxTdGF0ZTxBY2NvdW50Pih7IGtleTogQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzQ29udHJvbGxlZEFkZHJlc3MgfSk7CiAgICBieXRlY18wIC8vICJjb250cm9sbGVkX2FkZHJlc3MiCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6NTg4CiAgICAvLyB0aGlzLnNwZW5kaW5nQWRkcmVzcy52YWx1ZSA9IHRoaXMuY29udHJvbGxlZEFkZHJlc3MudmFsdWUKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6MjYKICAgIC8vIHNwZW5kaW5nQWRkcmVzcyA9IEdsb2JhbFN0YXRlPEFjY291bnQ+KHsga2V5OiBBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNTcGVuZGluZ0FkZHJlc3MgfSkKICAgIGJ5dGVjIDExIC8vICJzcGVuZGluZ19hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU4OAogICAgLy8gdGhpcy5zcGVuZGluZ0FkZHJlc3MudmFsdWUgPSB0aGlzLmNvbnRyb2xsZWRBZGRyZXNzLnZhbHVlCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgYiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fYWZ0ZXJfaWZfZWxzZUA4CgpzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fdGVybmFyeV9mYWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2Fic3RyYWN0ZWRfYWNjb3VudC9jb250cmFjdC5hbGdvLnRzOjU3NQogICAgLy8gY29uc3QgY2FsbGVyID0gZ2xvYmFsID8gR2xvYmFsLnplcm9BZGRyZXNzIDogVHhuLnNlbmRlcgogICAgdHhuIFNlbmRlcgogICAgYiBzbWFydF9jb250cmFjdHMvYWJzdHJhY3RlZF9hY2NvdW50L2NvbnRyYWN0LmFsZ28udHM6OkFic3RyYWN0ZWRBY2NvdW50LmFyYzU4X3Jla2V5VG9QbHVnaW5fdGVybmFyeV9tZXJnZUAzCg==","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CyAHAAECCJADxKkBtNgBJhgSY29udHJvbGxlZF9hZGRyZXNzAAVhZG1pbhVsYXN0X3VzZXJfaW50ZXJhY3Rpb24BcAFlC2xhc3RfY2hhbmdlBBUffHUBeAEAAgAAEHNwZW5kaW5nX2FkZHJlc3MCACoCAAoBYQEBAW4LcmVrZXlfaW5kZXgOZXNjcm93X2ZhY3RvcnkOY3VycmVudF9wbHVnaW4CAAIwAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAAAAAAAAAAAAAAAABGzD9gYCACwxGEAABCcRImcxGRREMRhBAMuCBAS9YJnlBNJLdVYEFHts1gQTvETkJxaCFwTJWl09BEcnryEEWC/zggTe/VzSBLPIDfkE7vRI/QQ49ZHqBONQudQECoyywgQltxPKBOuvFKAEH9o7TwSdP4kYBL9NfFcE1d04KwRc6+1DBNWGha8EfDcVbgSv+qToBKJAPd8EAv5FFQRBvcaABFDz41w2GgCOHAD0AU0BbAHaAeUCKgKsAw0DVgOxBVsF3AfCCEEIcgi7CakKWgt0DH8NKg3aDhYOng8+D74QgxERAIAE4YNi4jYaAI4BAIEAigQBKUmL/iQLi/wkCyKLBIsDDEEAHIv9iwRJTgJZiwIIFlcGAosBTFCMASQIjARC/9yL/RWMACKMBIsEiwIMQQAci/+LBElOAlmLAAgWVwYCiwFMUIwBJAiMBEL/3Iv8i/4IFlcGAosBUIv9iwOLAFJQi/8Vi/+LAk8CUlCMAIk2GgFHAhWBIBJENhoCSU4CFYEgEkQ2GgNJFSUSRBdMMQASQAAIMQBLAhJBADQjREsBSUsESU4DE0QqTGcyAxJBABoyCihMZycSSwFnJwsyA2crMgdnJwYyB2cjQ0sCQv/jIkL/yTYaAUkiWSQISwEVEkRXAgBJIkwpE0EAECcFSwJQSb1FAUS+SCJbRQGxIicSZURJcghEgcResgiyByOyECKyAbZLARaABGB+cEayGrIashiBBrIQIrIBsyNDNhoBSRWBIBJEMQAiKmVEEkQqTGcrMgdnJwYyB2cjQzYaAUkVgSASRCInE2VESSJbSwGBKFlLAhVLA04CUlcCACkSRDEASwFyCEQSRCIoZURzAkRMcghEEkQnBExQSb1FAUEAJUmBGyO6IlNBABsjRCpLAmdJJSO6Jw8SQQAEKzIHZycGMgdnI0MiQv/iIiplRCcHTFCwI0MiJwtlRElzAkxOAkQiKGVEEkEALCIoZUQyChJBACIyA0sBEkQnCzIDZzIKIhZMUIAEACoAAFAnE0xnJxEiZyNDMgpC/9spSTYaAUkVgSASRDYaAkkVIxJEIlMxACIqZUQSRLEiKGVEgBtyZWtleWluZyBhYnN0cmFjdGVkIGFjY291bnSyBUsCsiBPArIHsgAjshAisgGzQQAeIkUBMRYjCEUCSwEyBAxBAAtLAYgQk0EACyNFAUlEKzIHZyNDSwEjCEUCQv/cNhoBSRUlEkQXNhoCSRUjEkQiUzYaA0lOAhWBIBJENhoESSJZJAhLARUSRFcCAEw2GgVJTgIVgQQSREEADEsDMgNLA0sDiA95SEsDSwNLA0sDiA9tJwkiTwJUJwdMULAjQzYaAUkVJRJEFzYaAkkVIxJEIlM2GgNJIlkkCEsBFRJEVwIANhoESSJZJQskCEsBFRJENhoFSSJZgRALJAhLARUSRIgQm0YCI0M2GgFJIlkkCEsBFRJEVwIANhoCSRUjEkQiUzYaA0kiWSQISwEVEkRXAgA2GgRJIlklCyQISwEVEkQ2GgVJIlmBEAskCEsBFRJEJxBPBVAiJboXTgSIEEBGAiNDIkcDKUk2GgFJFSUSRBc2GgJJFYEgEkQ2GgNJIlkkCEsBFRJEVwIANhoESRUjEkQiUzYaBUcCFSMSRDYaBkkVJRJEF0w2GgdJFSUSRBdMNhoISU4CSSJZSU4DgQwLJAhMFRJENhoJSRUjEkQiU0w2GgpJFSMSRCJTTDYaC0kVIxJEIlNMMQAiKmVEEkQnDxJBARRLCjIDEkEBDCMUREsBQQEASwoyAxNBAPgjFERJQADmSwlFEUsLFksLUEsRSRUWVwYCTFBMJwxQTFBFECIWRRInCkUPIkUNSwxLBAxBAD1LBFcCAEsNSU4CgQwLgQxYSVcABExXBAhLARWBBBJEUEsTUEsQSU8CUEwiWSMIFlcGAlwARRAjCEUNQv+7SwJBAG4yBkUOIihlRDIKE0EAHrEiKGVEMgpLECJZSxNMiAy0sgiyB7IAI7IQIrIBs0sJiAy3FksIUEsHFlBLBhZQJxdQJwkiSwtUI0sFVCRLBFRQSxJQSw4WUEsPUCcESxFQSbxITL8rMgdnJwYyB2cjQzIHRQ5C/49LCSkTRClFEUL/EyJC/wUiQv7xNhoBSRUlEkQXNhoCSRWBIBJENhoDSSJZJAhLARUSRFcCAElOAzEAIiplRBJETwIWTwJQSwEVFlcGAk8CUEwnDFBMUCcETFBJvUUBREmBLCS6F0y8SCIoZUQyChNBABexIihlREsCSwKIC+CyCLIHI7IQIrIBsysyB2cnBjIHZyNDIkcDKUk2GgFJIlkkCEsBFRJEVwIASTYaAkkVJRJEF0w2GgNJTgIVgSASRDYaBEkiWSQISwEVEkRXAgBMNhoFSRUjEkQiU0w2GgZJTgJJFSMSRDYaB0kVJRJEF04CNhoISRUlEkQXTgI2GglJTgNJIllJTgSBDAskCEwVEkQ2GgpJFSMSRCJTTgI2GgtJFSMSRCJTTgI2GgxJFSMSRCJTTgIxACIqZUQSRCcQTwJQSU4CvUUBFEQnDxJBASZLCzIDEkEBHiMUREsCQQESSwsyAxNBAQojFERLAUAA90sKRRNLDBZLDFBLE0kVFlcGAkxQTCcMUExQSUUTSwFJvEhMvyIWRRQnCkURIkUPSw5LBQxBAD1LBVcCAEsPSU4CgQwLgQxYSVcABExXBAhLARWBBBJEUEsVUEsSSU8CUEwiWSMIFlcGAlwARRIjCEUPQv+7IihlRDIKE0EAKLEiKGVEMgpLEiJZSxVMiApfSxAVIQQLIQUICLIIsgeyACOyECKyAbNLCogKWEUQSwNBAEAyBksQFksKUEsJFlBLCBZQJxdQJwkiSw1UI0sHVCRLBlRQSxVQTBZQSxFQJwRLE1BJvEhMvysyB2cnBjIHZyNDMgdC/71LCikTRClFE0L/AiJC/vMiQv7fNhoBSSJZJAhLARUSRFcCAEkxACIqZUQSRCcQTFBJvUUBREm+SElOAicETFBJvUUBREmBLCS6F04CTLxIvEgiKGVEMgoTQQAssSIoZURLAxUhBAshBQhLA0mBKFlLARVSVwIASwOICXwIsgiyByOyECKyAbMrMgdnJwYyB2cjQzYaAUkiWSQISwEVEkRXAgAxACIqZUQSRCcFSwFQvUUBFERJKRNEiAl9FicHTFCwI0M2GgFJIlkkCEsBFRJEVwIAMQAiKmVEEkQnBUxQSb1FAURJvkiBQFMUSwElI7oiTwJUSwElTwK7KzIHZycGMgdnvkgnB0xQsCNDIkkpRwQ2GgFJIlkkCEsBFRJEVwIANhoCSU4CSSJZSU4DgRELJAhMFRJEIkwiTDEAIiplRBJEJwVMUEm9RQFEvkgiW3IIRCJJSwUMQQCeSwVXAgBLAYERC4ERWEkiW0lFDEAARCIoZUxFD0RJJVtFCiJFDIGAAVNBAAkiKGVEI0UMRQOxSwpBAARLArIJSwiyCEsMsgdLAbIAI7IQIrIBs0kjCEUBQv+fIihlTEUOREklW0UJIkUIgYABU0EACSIoZUQjRQhFBLFLBkEABEsDshVLCbIRSweyEksLshRLAbIAgQSyECKyAbNC/7QjQzYaAUkiWSQISwEVEkRXAgBJNhoCSU4CSSJZSU4DSSULJAhPAhUSRDEAIiplRBJEJwVPAlBJvUUBRL5ISSJbcghMSU4DTgREgUBTFESxIihlRDIQTwMLsgiyALIHI7IQIrIBsyJJSwMMQQBESwNXAgBLAUlOAiULW0sGSRUWVwYCTFBLARYnDUxQTFAnDkxQvUUBRLGyESKyEksCSbIUsgCBBLIQIrIBsyMIRQFC/7UjQyIpNhoBSRUlEkQXNhoCSU4CSRWBIBJENhoDSSJZJAhLARUSRFcCADYaBElOBEkiWUlOBSULJAhMFRJEMRYjCUlOBDgQIxJESwIWTwJQSwEVFlcGAksCUElOBEwnDFBMUCcETFC9RQFEJwVMUEm9RQFEvkhJgUBTFEQiW0wxAExyCEQSQAAQMQBLBhJAAAhLBTIDEkEAgCNESXIITElOAkUKREsDSTgHIihlRExLARJPAjgIMhBLCElOBAsSEESxMhALsgiyALIHI7IQIrIBsyJFB0sGSwQMQQA6SwRXAgBLB0lOAiULW0kWJw1MUEsEUCcOTFC9RQFEsbIRIrISSwhJshSyAIEEshAisgGzIwhFB0L/viNDIkL/fSJHBClJNhoBSSJZJAhLARUSRFcCAEk2GgJJTgJJIllJTgOBIgskCEwVEkQxACIqZUQSRCcFTFBJvUUBRL5IgUBTFEQiKGVEMgoTQQAgsSIoZUQyCksEFSEECyEGCEsDC7IIsgeyACOyECKyAbMiRQVLBEsBDEEAiEsBVwIASwWBIguBIlhJVwAISwFXCAFFCEsBVwkIRQxLAVcRCEULSwFXGQhFCkyBiAJTSU4CRQZLBEkVFlcGAkxQJw1PAlBMUCcOTFBJRQm9RQEUREEALDIGSwZLClBLC1AiFkxLAVBLClBMUEwWUCcJIksGVFBLB0y/SwQjCEUFQv91MgdC/9ErMgdnJwYyB2cjQyk2GgFJIlkkCEsBFRJEVwIASTYaAklOAkkiWUlOAyULJAhMFRJEMQAiKmVEEkQnBUxQSb1FAUS+SIFAUxREIihlRDIKE0EAHLEiKGVESwMVIQQLIQYISwILsgiyByOyECKyAbMiRQRLA0sBDEEAMUsBVwIASwRJTgIlCyVYSwRJFRZXBgJMUCcNTwJQTFAnDkxQSb1FAUS8SCMIRQRC/8crMgdnJwYyB2cjQzYaAUkVgSASRDYaAklOAkkiWYEgCyQITBUSRDYaA0kVJRJEF04CNhoESRUlEkQXTgIxACIqZUQSRCcITFBJTgO9RQFAACFLAxaAAgASTFBPAhZQTFBLAUm8SEy/KzIHZycGMgdnI0NLAkkkJboXSwUSREmBCiW6F08DEkRJvkhJIllLARVLAksCTwJSTwRXAgBQSVcCABWBIAoWVwYCXABPAiJPA1hMUEsBvEi/Qv+sNhoBSRWBIBJEJwhMUEm9RQFEMQAiKmVEEkAADEmBCiW6FzIGDEEAECNESbxIKzIHZycGMgdnI0MiQv/tIik2GgEnCiJLAiJZSUUFSwENQQBrSwJXAgBLAUlOAiQLSwFMWU8CIwhJRQRLBksBCUsDFU8CJAtLBExZTwJNUicETFBJRQa9RQFBAB9LBL5ESwJJIllMVwIAJxRPA1BOAiNPA4jxkkUCQv+cSwFJIllMVwIAIycViPF+RQJC/4gnB0sCULAjQyJJKTYaAScKIksCIllLAQ1JRQVBAIJLAlcCAEsEREsBJAtLAUxZSlkkCFhXAgAnEExQSUUHvUUBQQBJSwW+RCcETFBJRQa9RQFBACRLBL5ESwJJIllMVwIAJxRPA1BOAiNPA4jxC0UCSSMIRQFC/5lLAUkiWUxXAgAjJxWI8PJFAkL/5EsBSSJZTFcCACMnFYjw3kUCQv/QJwdLAlCwI0MiKTYaAScKIksCIllLAQ1JRQVBAGNLAlcCAEsEREsBJAtLAUxZSlkkCFhXAgAnBUxQSUUGvUUBQQAfSwS+REsCSU8CUEwiWSMIFlcGAlwARQJJIwhFAUL/r0sBSYAJAAAAAAAAAAAAUEwiWSMIFlcGAlwARQJC/9knB0sCULAjQyI2GgFJIlkkCEsBFRJEVwIANhoCRwIiWUlOAiULJAhMFRJEJwoiSUsDDEEAkEsDVwIASwElCyVYSwVJFRZXBgJMUCcNTwJQTFAnDkxQSUUHvUUBQQAfSwW+REsCSU8CUEwiWSMIFlcGAlwARQJJIwhFAUL/sUsBSYAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQTCJZIwgWVwYCXABFAkL/sCcHSwJQsCNDIjYaAUcCIllJTgKBIAskCEwVEkQnCiJJSwMMQQBoSwNXAgBLAYEgC4EgWCcITFBJRQa9RQFBACRLBL5ESwJJIllMVwIAJxRPA1BOAiNPA4jvOkUCSSMIRQFC/7tLAUkiWUxXAgAjgBYAAgASAAAAAAAAAAAAAAAAAAAAAAAAiO8LRQJC/84nB0sCULAjQzYaAUkiWSQISwEVEkRXAgA2GgJJFSUSRBc2GgNJIlkkCEsBFRJEVwIANhoESRUlEkQXSwMVIQQLgeQySwEISwVPBYgAUE8EFSEECyEFCCEGTwQITwSBgGQLgZSgAQgnBU8GUL1OBkgyAYG08gkISwUITwQWTwQWUE8EFlBPAxZQTwIWUCcJIk8EVFBMFlAnB0xQsCNDigIBgRSL/wuL/hUIIQQLgfSvAgiJigEBIov/KRJBAAMiTIknBYv/UEmMAL1FAUEACIsAvkQiW0yJi/+IAANC//aKAQEiKGVEMgoTQQAesSIoZUQyCov/FSEEC4HkMgiyCLIHsgAjshAisgGzsSIoZUSB8JMJMgEIIicSZURJcghEsgdMsghLAbIAI7IQIrIBtoAE2FzxhLIashiyAIEGshAisgGztwE+SVcEAExXAAQnBxJESRUlEkQXSRYnCVAnBYv/UEy/iYoEASlHBYv8Fov9UIv+FRZXBgKL/lBMJwxQTFAnBExQSb1FAUAABCKMAImLBkmBESW6F4wASYEbI7pJI1OMBSRTTIEcJboXjANBAAQijACJiwaBLCS6FxSMBCKMAosGgSwkuheLAg1BABqLAoEUC4EuCIsGTIEUulcABIv/EkEAMSOMBIsFQQAiMgaMAYsDiwEPQQASiwGLAwmLAA9BAAcjiwQQjACJIkL/9jIHjAFC/9uLAiMIjAJC/6KKAQGL/zgAIihlRBJBAAyL/zggMgoSQQACI4mL/zgQgQYSQQAni/84GDIIEkEAHYv/OBsjEkEAFIv/OBlAAA2L/yLCGicWEkEAAiOJIomKAQIpRwInBIv/UEm9SU8CSEAACoABYIv/jAGMAImLA0mBCSW6F4wCSYERJboXjABJgRsjuiNTTIEcJboXjAFBADAyBkmLAg1MiwEJiwAMiwOBLCS6FyINJwkiiwRUI08EVCRPA1SBA08CVIv/jAGMAIkyB0L/zYoFAiJHCilHEov8QQQxMgOL+xZMUIv9FRZXBgKL/VBJjAFMJwxQTFBJjAYnBEsBUEmMAr1FAUQnE0xni/0pE0ED8icFi/1QSb1FAUS+SCJbSXIIRCcLTGdyCEyMBUQijBCL/yJZixANQQGHi/9XAgCLEIEQC4EQWEmMACJbSYwdFicNTFCLAVAnDkxQSYwDSb1FAUS+SElXAAGMCkmBEVuMGkmBCVuMC0mBIVuME0kjW4wVSYEZW4wRSYEpW4wbgYgDU0mMHEEBIjIGjBiLCicPEkEAbosLixoJiwAlW0xLAQ9EiwNJTgK+RIERWwgWgRFMu4sYFosDgSFPAruLHUEAJrEiKGVEiwAlW4sdshGyEosFshSyAIEEshAisgGzixAjCIwQQv85sSIoZUSLACVbsgiLBbIHsgAjshAisgGzQv/ciwqAAQISQQBaixxBAEgyBkmLGwmLERgJixMNQQAXiwBJVwgITCVbiwsORIsDgRFPArtC/3uLC4saCYsAJVtMSwEPRIsDSU4CvkSBEVsIFoERTLtC/1oyB0mLGwmLERgJQv+1iwqAAQMSQf9EixxBADAyBowOiw6LEwmLEQqLCwuLGghJixVJTgMNTE4CTYsAJVtKD0QJFosDgRFPArtC/w8yB4wOQv/NMgeMGEL+24sCgRsjukkjU4wcJFNBAHIxACIqZUQSQABoJwgxBlC9RQFEJwgxBlAkJboXMgYORCcIMQZQgQoluhcyBg9EJwgxBlCMBCKMDyKMEIsEgRIkuheLEA1BACCLEIEgC4EUCIsETIEgujILEkEAAyOMD4sQIwiMEEL/04sPRCcIMQZQvEiLBoj9EIwGSSJTREkjUxREJFMURIscQQGgMgaMDiKMGSKMFjEWIwiMEosGjAeLEjIEDEEAC4sSiPyNQQBZI4wZixlEsSInC2VEi/tyCESAFnJla2V5aW5nIHRvIHBsdWdpbiBhcHCyBbIgSbIHsgAjshAisgGzJxExFmcnBIsHUCUjuicPEkEABCsyB2eL/ov/jAGMAImLEjgQgQYTQQANiweLEiMIjBKMB0L/gIsSSTgYiwZJTgMiWxJESTgZFERJOBsjDUQjwhoXMggSRIj8RIwGSSNTSwEkU08CgQNTTwIUREwUREEApIv+IlmLFklPAgxEi/5XAgBMJQtbixIiwhpJjAkVgQQSRCcEiwZQSYwCSYEbI7ojU0lOAowcTwKBFAtJjAyBLgiBFLpJVwAEjAhJgQRbjA2BDFuMFEEAdDIGixQJiw0MjBeLCIsJEkEAXIsNQQAFixdAAFKLDUEAE4scQQBDMgYWiwyBOgiLAkxPAruAAYAjixdUSSJTTCNTjBdBAB+LF0AAGiNEJwSLBklOAlCLDhaBHEy7ixYjCIwWQv79IkL/4zIHQv+6gAFAQv/HMgdC/4kyB4wOQv5dIihlRCcLTGdC/bMxAEL7zA==","clear":"C4EBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +// Type definitions for ARC-56 structs + +export type AbstractAccountBoxMbrData = { + plugins: bigint, + namedPlugins: bigint, + escrows: bigint, + allowances: bigint, + executions: bigint, + escrowExists: boolean, + newEscrowMintCost: bigint +} + + +/** + * Converts the ABI tuple representation of a AbstractAccountBoxMBRData to the struct representation + */ +export function AbstractAccountBoxMbrDataFromTuple(abiTuple: [bigint, bigint, bigint, bigint, bigint, boolean, bigint]) { + return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.AbstractAccountBoxMBRData, APP_SPEC.structs) as AbstractAccountBoxMbrData +} + +export type AllowanceInfo = { + type: number, + max: bigint, + amount: bigint, + spent: bigint, + interval: bigint, + last: bigint, + start: bigint, + useRounds: boolean +} + + +/** + * Converts the ABI tuple representation of a AllowanceInfo to the struct representation + */ +export function AllowanceInfoFromTuple(abiTuple: [number, bigint, bigint, bigint, bigint, bigint, bigint, boolean]) { + return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.AllowanceInfo, APP_SPEC.structs) as AllowanceInfo +} + +export type AllowanceKey = { + escrow: string, + asset: bigint +} + + +/** + * Converts the ABI tuple representation of a AllowanceKey to the struct representation + */ +export function AllowanceKeyFromTuple(abiTuple: [string, bigint]) { + return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.AllowanceKey, APP_SPEC.structs) as AllowanceKey +} + +export type EscrowInfo = { + id: bigint, + locked: boolean +} + + +/** + * Converts the ABI tuple representation of a EscrowInfo to the struct representation + */ +export function EscrowInfoFromTuple(abiTuple: [bigint, boolean]) { + return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.EscrowInfo, APP_SPEC.structs) as EscrowInfo +} + +export type ExecutionInfo = { + groups: Uint8Array[], + firstValid: bigint, + lastValid: bigint +} + + +/** + * Converts the ABI tuple representation of a ExecutionInfo to the struct representation + */ +export function ExecutionInfoFromTuple(abiTuple: [Uint8Array[], bigint, bigint]) { + return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.ExecutionInfo, APP_SPEC.structs) as ExecutionInfo +} + +export type PluginInfo = { + escrow: bigint, + delegationType: number, + lastValid: bigint, + cooldown: bigint, + methods: [Uint8Array, bigint, bigint][], + admin: boolean, + useRounds: boolean, + useExecutionKey: boolean, + lastCalled: bigint, + start: bigint +} + + +/** + * Converts the ABI tuple representation of a PluginInfo to the struct representation + */ +export function PluginInfoFromTuple(abiTuple: [bigint, number, bigint, bigint, [Uint8Array, bigint, bigint][], boolean, boolean, boolean, bigint, bigint]) { + return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.PluginInfo, APP_SPEC.structs) as PluginInfo +} + +export type PluginKey = { + plugin: bigint, + caller: string, + escrow: string +} + + +/** + * Converts the ABI tuple representation of a PluginKey to the struct representation + */ +export function PluginKeyFromTuple(abiTuple: [bigint, string, string]) { + return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.PluginKey, APP_SPEC.structs) as PluginKey +} + +/** + * The argument types for the AbstractedAccount contract + */ +export type AbstractedAccountArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'createApplication(address,address,uint64)void': { + /** + * The address of the abstracted account. If zeroAddress, then the address of the contract account will be used + */ + controlledAddress: string + /** + * The admin for this app + */ + admin: string + escrowFactory: bigint | number + } + 'register(string)void': { + escrow: string + } + 'arc58_changeAdmin(address)void': { + /** + * The new admin + */ + newAdmin: string + } + 'arc58_pluginChangeAdmin(address)void': { + /** + * The new admin + */ + newAdmin: string + } + 'arc58_getAdmin()address': Record + 'arc58_verifyAuthAddress()void': Record + 'arc58_rekeyTo(address,bool)void': { + /** + * The address to rekey to + */ + address: string + /** + * Whether or not this should be a flash rekey. If true, the rekey back to the app address must done in the same txn group as this call + */ + flash: boolean + } + 'arc58_canCall(uint64,bool,address,string,byte[4])bool': { + /** + * the plugin to be rekeyed to + */ + plugin: bigint | number + /** + * whether this is callable globally + */ + global: boolean + /** + * the address that will trigger the plugin + */ + address: string + escrow: string + /** + * the method being called on the plugin, if applicable + */ + method: Uint8Array + } + 'arc58_rekeyToPlugin(uint64,bool,string,uint64[],(uint64,uint64)[])void': { + /** + * The app to rekey to + */ + plugin: bigint | number + /** + * Whether the plugin is callable globally + */ + global: boolean + escrow: string + /** + * The indices of the methods being used in the group if the plugin has method restrictions these indices are required to match the methods used on each subsequent call to the plugin within the group + */ + methodOffsets: bigint[] | number[] + /** + * If the plugin is using an escrow, this is the list of funds to transfer to the escrow for the plugin to be able to use during execution + */ + fundsRequest: [bigint | number, bigint | number][] + } + 'arc58_rekeyToNamedPlugin(string,bool,string,uint64[],(uint64,uint64)[])void': { + /** + * The name of the plugin to rekey to + */ + name: string + /** + * Whether the plugin is callable globally + */ + global: boolean + escrow: string + /** + * The indices of the methods being used in the group if the plugin has method restrictions these indices are required to match the methods used on each subsequent call to the plugin within the group + */ + methodOffsets: bigint[] | number[] + /** + * If the plugin is using an escrow, this is the list of funds to transfer to the escrow for the plugin to be able to use during execution + */ + fundsRequest: [bigint | number, bigint | number][] + } + 'arc58_addPlugin(uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void': { + plugin: bigint | number + caller: string + /** + * The escrow account to use for the plugin, if any. If empty, no escrow will be used, if the named escrow does not exist, it will be created + */ + escrow: string + /** + * Whether the plugin has permissions to change the admin account + */ + admin: boolean + /** + * the ownership of the delegation for last_interval updates + */ + delegationType: bigint | number + /** + * The timestamp or round when the permission expires + */ + lastValid: bigint | number + /** + * The number of seconds or rounds that must pass before the plugin can be called again + */ + cooldown: bigint | number + /** + * The methods that are allowed to be called for the plugin by the address + */ + methods: [Uint8Array, bigint | number][] + /** + * Whether the plugin uses rounds for cooldowns and lastValid, defaults to timestamp + */ + useRounds: boolean + useExecutionKey: boolean + defaultToEscrow: boolean + } + 'arc58_removePlugin(uint64,address,string)void': { + plugin: bigint | number + caller: string + escrow: string + } + 'arc58_addNamedPlugin(string,uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void': { + /** + * The plugin name + */ + name: string + plugin: bigint | number + caller: string + /** + * The escrow account to use for the plugin, if any. If empty, no escrow will be used, if the named escrow does not exist, it will be created + */ + escrow: string + /** + * Whether the plugin has permissions to change the admin account + */ + admin: boolean + /** + * the ownership of the delegation for last_interval updates + */ + delegationType: bigint | number + /** + * The timestamp or round when the permission expires + */ + lastValid: bigint | number + /** + * The number of seconds or rounds that must pass before the plugin can be called again + */ + cooldown: bigint | number + /** + * The methods that are allowed to be called for the plugin by the address + */ + methods: [Uint8Array, bigint | number][] + /** + * Whether the plugin uses rounds for cooldowns and lastValid, defaults to timestamp + */ + useRounds: boolean + useExecutionKey: boolean + defaultToEscrow: boolean + } + 'arc58_removeNamedPlugin(string)void': { + /** + * The plugin name + */ + name: string + } + 'arc58_newEscrow(string)uint64': { + /** + * The name of the escrow to create + */ + escrow: string + } + 'arc58_toggleEscrowLock(string)(uint64,bool)': { + /** + * The escrow to lock or unlock + */ + escrow: string + } + 'arc58_reclaim(string,(uint64,uint64,bool)[])void': { + /** + * The escrow to reclaim funds from + */ + escrow: string + /** + * The list of reclaims to make from the escrow + */ + reclaims: [bigint | number, bigint | number, boolean][] + } + 'arc58_optinEscrow(string,uint64[])void': { + /** + * The escrow to opt-in to + */ + escrow: string + /** + * The list of assets to opt-in to + */ + assets: bigint[] | number[] + } + 'arc58_pluginOptinEscrow(uint64,address,string,uint64[],pay)void': { + plugin: bigint | number + caller: string + escrow: string + /** + * The list of assets to opt-in to + */ + assets: bigint[] | number[] + /** + * The payment txn that is used to pay for the asset opt-in + */ + mbrPayment: AppMethodCallTransactionArgument + } + 'arc58_addAllowances(string,(uint64,uint8,uint64,uint64,uint64,bool)[])void': { + /** + * The escrow to add the allowance for + */ + escrow: string + /** + * The list of allowances to add + */ + allowances: [bigint | number, bigint | number, bigint | number, bigint | number, bigint | number, boolean][] + } + 'arc58_removeAllowances(string,uint64[])void': { + /** + * The escrow to remove the allowance for + */ + escrow: string + /** + * The list of assets to remove the allowance for + */ + assets: bigint[] | number[] + } + 'arc58_addExecutionKey(byte[32],byte[32][],uint64,uint64)void': { + lease: Uint8Array + groups: Uint8Array[] + firstValid: bigint | number + lastValid: bigint | number + } + 'arc58_removeExecutionKey(byte[32])void': { + lease: Uint8Array + } + 'arc58_getPlugins((uint64,address,string)[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]': { + keys: [bigint | number, string, string][] + } + 'arc58_getNamedPlugins(string[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]': { + names: string[] + } + 'arc58_getEscrows(string[])(uint64,bool)[]': { + escrows: string[] + } + 'arc58_getAllowances(string,uint64[])(uint8,uint64,uint64,uint64,uint64,uint64,uint64,bool)[]': { + escrow: string + assets: bigint[] | number[] + } + 'arc58_getExecutions(byte[32][])(byte[32][],uint64,uint64)[]': { + leases: Uint8Array[] + } + 'mbr(string,uint64,string,uint64)(uint64,uint64,uint64,uint64,uint64,bool,uint64)': { + escrow: string + methodCount: bigint | number + plugin: string + groups: bigint | number + } + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'createApplication(address,address,uint64)void': [controlledAddress: string, admin: string, escrowFactory: bigint | number] + 'register(string)void': [escrow: string] + 'arc58_changeAdmin(address)void': [newAdmin: string] + 'arc58_pluginChangeAdmin(address)void': [newAdmin: string] + 'arc58_getAdmin()address': [] + 'arc58_verifyAuthAddress()void': [] + 'arc58_rekeyTo(address,bool)void': [address: string, flash: boolean] + 'arc58_canCall(uint64,bool,address,string,byte[4])bool': [plugin: bigint | number, global: boolean, address: string, escrow: string, method: Uint8Array] + 'arc58_rekeyToPlugin(uint64,bool,string,uint64[],(uint64,uint64)[])void': [plugin: bigint | number, global: boolean, escrow: string, methodOffsets: bigint[] | number[], fundsRequest: [bigint | number, bigint | number][]] + 'arc58_rekeyToNamedPlugin(string,bool,string,uint64[],(uint64,uint64)[])void': [name: string, global: boolean, escrow: string, methodOffsets: bigint[] | number[], fundsRequest: [bigint | number, bigint | number][]] + 'arc58_addPlugin(uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void': [plugin: bigint | number, caller: string, escrow: string, admin: boolean, delegationType: bigint | number, lastValid: bigint | number, cooldown: bigint | number, methods: [Uint8Array, bigint | number][], useRounds: boolean, useExecutionKey: boolean, defaultToEscrow: boolean] + 'arc58_removePlugin(uint64,address,string)void': [plugin: bigint | number, caller: string, escrow: string] + 'arc58_addNamedPlugin(string,uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void': [name: string, plugin: bigint | number, caller: string, escrow: string, admin: boolean, delegationType: bigint | number, lastValid: bigint | number, cooldown: bigint | number, methods: [Uint8Array, bigint | number][], useRounds: boolean, useExecutionKey: boolean, defaultToEscrow: boolean] + 'arc58_removeNamedPlugin(string)void': [name: string] + 'arc58_newEscrow(string)uint64': [escrow: string] + 'arc58_toggleEscrowLock(string)(uint64,bool)': [escrow: string] + 'arc58_reclaim(string,(uint64,uint64,bool)[])void': [escrow: string, reclaims: [bigint | number, bigint | number, boolean][]] + 'arc58_optinEscrow(string,uint64[])void': [escrow: string, assets: bigint[] | number[]] + 'arc58_pluginOptinEscrow(uint64,address,string,uint64[],pay)void': [plugin: bigint | number, caller: string, escrow: string, assets: bigint[] | number[], mbrPayment: AppMethodCallTransactionArgument] + 'arc58_addAllowances(string,(uint64,uint8,uint64,uint64,uint64,bool)[])void': [escrow: string, allowances: [bigint | number, bigint | number, bigint | number, bigint | number, bigint | number, boolean][]] + 'arc58_removeAllowances(string,uint64[])void': [escrow: string, assets: bigint[] | number[]] + 'arc58_addExecutionKey(byte[32],byte[32][],uint64,uint64)void': [lease: Uint8Array, groups: Uint8Array[], firstValid: bigint | number, lastValid: bigint | number] + 'arc58_removeExecutionKey(byte[32])void': [lease: Uint8Array] + 'arc58_getPlugins((uint64,address,string)[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]': [keys: [bigint | number, string, string][]] + 'arc58_getNamedPlugins(string[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]': [names: string[]] + 'arc58_getEscrows(string[])(uint64,bool)[]': [escrows: string[]] + 'arc58_getAllowances(string,uint64[])(uint8,uint64,uint64,uint64,uint64,uint64,uint64,bool)[]': [escrow: string, assets: bigint[] | number[]] + 'arc58_getExecutions(byte[32][])(byte[32][],uint64,uint64)[]': [leases: Uint8Array[]] + 'mbr(string,uint64,string,uint64)(uint64,uint64,uint64,uint64,uint64,bool,uint64)': [escrow: string, methodCount: bigint | number, plugin: string, groups: bigint | number] + } +} + +/** + * The return type for each method + */ +export type AbstractedAccountReturns = { + 'createApplication(address,address,uint64)void': void + 'register(string)void': void + 'arc58_changeAdmin(address)void': void + 'arc58_pluginChangeAdmin(address)void': void + 'arc58_getAdmin()address': string + 'arc58_verifyAuthAddress()void': void + 'arc58_rekeyTo(address,bool)void': void + 'arc58_canCall(uint64,bool,address,string,byte[4])bool': boolean + 'arc58_rekeyToPlugin(uint64,bool,string,uint64[],(uint64,uint64)[])void': void + 'arc58_rekeyToNamedPlugin(string,bool,string,uint64[],(uint64,uint64)[])void': void + 'arc58_addPlugin(uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void': void + 'arc58_removePlugin(uint64,address,string)void': void + 'arc58_addNamedPlugin(string,uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void': void + 'arc58_removeNamedPlugin(string)void': void + 'arc58_newEscrow(string)uint64': bigint + 'arc58_toggleEscrowLock(string)(uint64,bool)': EscrowInfo + 'arc58_reclaim(string,(uint64,uint64,bool)[])void': void + 'arc58_optinEscrow(string,uint64[])void': void + 'arc58_pluginOptinEscrow(uint64,address,string,uint64[],pay)void': void + 'arc58_addAllowances(string,(uint64,uint8,uint64,uint64,uint64,bool)[])void': void + 'arc58_removeAllowances(string,uint64[])void': void + 'arc58_addExecutionKey(byte[32],byte[32][],uint64,uint64)void': void + 'arc58_removeExecutionKey(byte[32])void': void + 'arc58_getPlugins((uint64,address,string)[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]': [bigint, number, bigint, bigint, [Uint8Array, bigint, bigint][], boolean, boolean, boolean, bigint, bigint][] + 'arc58_getNamedPlugins(string[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]': [bigint, number, bigint, bigint, [Uint8Array, bigint, bigint][], boolean, boolean, boolean, bigint, bigint][] + 'arc58_getEscrows(string[])(uint64,bool)[]': [bigint, boolean][] + 'arc58_getAllowances(string,uint64[])(uint8,uint64,uint64,uint64,uint64,uint64,uint64,bool)[]': [number, bigint, bigint, bigint, bigint, bigint, bigint, boolean][] + 'arc58_getExecutions(byte[32][])(byte[32][],uint64,uint64)[]': [Uint8Array[], bigint, bigint][] + 'mbr(string,uint64,string,uint64)(uint64,uint64,uint64,uint64,uint64,bool,uint64)': AbstractAccountBoxMbrData +} + +/** + * Defines the types of available calls and state of the AbstractedAccount smart contract. + */ +export type AbstractedAccountTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'createApplication(address,address,uint64)void' | 'createApplication', { + argsObj: AbstractedAccountArgs['obj']['createApplication(address,address,uint64)void'] + argsTuple: AbstractedAccountArgs['tuple']['createApplication(address,address,uint64)void'] + returns: AbstractedAccountReturns['createApplication(address,address,uint64)void'] + }> + & Record<'register(string)void' | 'register', { + argsObj: AbstractedAccountArgs['obj']['register(string)void'] + argsTuple: AbstractedAccountArgs['tuple']['register(string)void'] + returns: AbstractedAccountReturns['register(string)void'] + }> + & Record<'arc58_changeAdmin(address)void' | 'arc58_changeAdmin', { + argsObj: AbstractedAccountArgs['obj']['arc58_changeAdmin(address)void'] + argsTuple: AbstractedAccountArgs['tuple']['arc58_changeAdmin(address)void'] + returns: AbstractedAccountReturns['arc58_changeAdmin(address)void'] + }> + & Record<'arc58_pluginChangeAdmin(address)void' | 'arc58_pluginChangeAdmin', { + argsObj: AbstractedAccountArgs['obj']['arc58_pluginChangeAdmin(address)void'] + argsTuple: AbstractedAccountArgs['tuple']['arc58_pluginChangeAdmin(address)void'] + returns: AbstractedAccountReturns['arc58_pluginChangeAdmin(address)void'] + }> + & Record<'arc58_getAdmin()address' | 'arc58_getAdmin', { + argsObj: AbstractedAccountArgs['obj']['arc58_getAdmin()address'] + argsTuple: AbstractedAccountArgs['tuple']['arc58_getAdmin()address'] + returns: AbstractedAccountReturns['arc58_getAdmin()address'] + }> + & Record<'arc58_verifyAuthAddress()void' | 'arc58_verifyAuthAddress', { + argsObj: AbstractedAccountArgs['obj']['arc58_verifyAuthAddress()void'] + argsTuple: AbstractedAccountArgs['tuple']['arc58_verifyAuthAddress()void'] + returns: AbstractedAccountReturns['arc58_verifyAuthAddress()void'] + }> + & Record<'arc58_rekeyTo(address,bool)void' | 'arc58_rekeyTo', { + argsObj: AbstractedAccountArgs['obj']['arc58_rekeyTo(address,bool)void'] + argsTuple: AbstractedAccountArgs['tuple']['arc58_rekeyTo(address,bool)void'] + returns: AbstractedAccountReturns['arc58_rekeyTo(address,bool)void'] + }> + & Record<'arc58_canCall(uint64,bool,address,string,byte[4])bool' | 'arc58_canCall', { + argsObj: AbstractedAccountArgs['obj']['arc58_canCall(uint64,bool,address,string,byte[4])bool'] + argsTuple: AbstractedAccountArgs['tuple']['arc58_canCall(uint64,bool,address,string,byte[4])bool'] + /** + * whether the plugin can be called with these parameters + */ + returns: AbstractedAccountReturns['arc58_canCall(uint64,bool,address,string,byte[4])bool'] + }> + & Record<'arc58_rekeyToPlugin(uint64,bool,string,uint64[],(uint64,uint64)[])void' | 'arc58_rekeyToPlugin', { + argsObj: AbstractedAccountArgs['obj']['arc58_rekeyToPlugin(uint64,bool,string,uint64[],(uint64,uint64)[])void'] + argsTuple: AbstractedAccountArgs['tuple']['arc58_rekeyToPlugin(uint64,bool,string,uint64[],(uint64,uint64)[])void'] + returns: AbstractedAccountReturns['arc58_rekeyToPlugin(uint64,bool,string,uint64[],(uint64,uint64)[])void'] + }> + & Record<'arc58_rekeyToNamedPlugin(string,bool,string,uint64[],(uint64,uint64)[])void' | 'arc58_rekeyToNamedPlugin', { + argsObj: AbstractedAccountArgs['obj']['arc58_rekeyToNamedPlugin(string,bool,string,uint64[],(uint64,uint64)[])void'] + argsTuple: AbstractedAccountArgs['tuple']['arc58_rekeyToNamedPlugin(string,bool,string,uint64[],(uint64,uint64)[])void'] + returns: AbstractedAccountReturns['arc58_rekeyToNamedPlugin(string,bool,string,uint64[],(uint64,uint64)[])void'] + }> + & Record<'arc58_addPlugin(uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void' | 'arc58_addPlugin', { + argsObj: AbstractedAccountArgs['obj']['arc58_addPlugin(uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void'] + argsTuple: AbstractedAccountArgs['tuple']['arc58_addPlugin(uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void'] + returns: AbstractedAccountReturns['arc58_addPlugin(uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void'] + }> + & Record<'arc58_removePlugin(uint64,address,string)void' | 'arc58_removePlugin', { + argsObj: AbstractedAccountArgs['obj']['arc58_removePlugin(uint64,address,string)void'] + argsTuple: AbstractedAccountArgs['tuple']['arc58_removePlugin(uint64,address,string)void'] + returns: AbstractedAccountReturns['arc58_removePlugin(uint64,address,string)void'] + }> + & Record<'arc58_addNamedPlugin(string,uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void' | 'arc58_addNamedPlugin', { + argsObj: AbstractedAccountArgs['obj']['arc58_addNamedPlugin(string,uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void'] + argsTuple: AbstractedAccountArgs['tuple']['arc58_addNamedPlugin(string,uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void'] + returns: AbstractedAccountReturns['arc58_addNamedPlugin(string,uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void'] + }> + & Record<'arc58_removeNamedPlugin(string)void' | 'arc58_removeNamedPlugin', { + argsObj: AbstractedAccountArgs['obj']['arc58_removeNamedPlugin(string)void'] + argsTuple: AbstractedAccountArgs['tuple']['arc58_removeNamedPlugin(string)void'] + returns: AbstractedAccountReturns['arc58_removeNamedPlugin(string)void'] + }> + & Record<'arc58_newEscrow(string)uint64' | 'arc58_newEscrow', { + argsObj: AbstractedAccountArgs['obj']['arc58_newEscrow(string)uint64'] + argsTuple: AbstractedAccountArgs['tuple']['arc58_newEscrow(string)uint64'] + returns: AbstractedAccountReturns['arc58_newEscrow(string)uint64'] + }> + & Record<'arc58_toggleEscrowLock(string)(uint64,bool)' | 'arc58_toggleEscrowLock', { + argsObj: AbstractedAccountArgs['obj']['arc58_toggleEscrowLock(string)(uint64,bool)'] + argsTuple: AbstractedAccountArgs['tuple']['arc58_toggleEscrowLock(string)(uint64,bool)'] + returns: AbstractedAccountReturns['arc58_toggleEscrowLock(string)(uint64,bool)'] + }> + & Record<'arc58_reclaim(string,(uint64,uint64,bool)[])void' | 'arc58_reclaim', { + argsObj: AbstractedAccountArgs['obj']['arc58_reclaim(string,(uint64,uint64,bool)[])void'] + argsTuple: AbstractedAccountArgs['tuple']['arc58_reclaim(string,(uint64,uint64,bool)[])void'] + returns: AbstractedAccountReturns['arc58_reclaim(string,(uint64,uint64,bool)[])void'] + }> + & Record<'arc58_optinEscrow(string,uint64[])void' | 'arc58_optinEscrow', { + argsObj: AbstractedAccountArgs['obj']['arc58_optinEscrow(string,uint64[])void'] + argsTuple: AbstractedAccountArgs['tuple']['arc58_optinEscrow(string,uint64[])void'] + returns: AbstractedAccountReturns['arc58_optinEscrow(string,uint64[])void'] + }> + & Record<'arc58_pluginOptinEscrow(uint64,address,string,uint64[],pay)void' | 'arc58_pluginOptinEscrow', { + argsObj: AbstractedAccountArgs['obj']['arc58_pluginOptinEscrow(uint64,address,string,uint64[],pay)void'] + argsTuple: AbstractedAccountArgs['tuple']['arc58_pluginOptinEscrow(uint64,address,string,uint64[],pay)void'] + returns: AbstractedAccountReturns['arc58_pluginOptinEscrow(uint64,address,string,uint64[],pay)void'] + }> + & Record<'arc58_addAllowances(string,(uint64,uint8,uint64,uint64,uint64,bool)[])void' | 'arc58_addAllowances', { + argsObj: AbstractedAccountArgs['obj']['arc58_addAllowances(string,(uint64,uint8,uint64,uint64,uint64,bool)[])void'] + argsTuple: AbstractedAccountArgs['tuple']['arc58_addAllowances(string,(uint64,uint8,uint64,uint64,uint64,bool)[])void'] + returns: AbstractedAccountReturns['arc58_addAllowances(string,(uint64,uint8,uint64,uint64,uint64,bool)[])void'] + }> + & Record<'arc58_removeAllowances(string,uint64[])void' | 'arc58_removeAllowances', { + argsObj: AbstractedAccountArgs['obj']['arc58_removeAllowances(string,uint64[])void'] + argsTuple: AbstractedAccountArgs['tuple']['arc58_removeAllowances(string,uint64[])void'] + returns: AbstractedAccountReturns['arc58_removeAllowances(string,uint64[])void'] + }> + & Record<'arc58_addExecutionKey(byte[32],byte[32][],uint64,uint64)void' | 'arc58_addExecutionKey', { + argsObj: AbstractedAccountArgs['obj']['arc58_addExecutionKey(byte[32],byte[32][],uint64,uint64)void'] + argsTuple: AbstractedAccountArgs['tuple']['arc58_addExecutionKey(byte[32],byte[32][],uint64,uint64)void'] + returns: AbstractedAccountReturns['arc58_addExecutionKey(byte[32],byte[32][],uint64,uint64)void'] + }> + & Record<'arc58_removeExecutionKey(byte[32])void' | 'arc58_removeExecutionKey', { + argsObj: AbstractedAccountArgs['obj']['arc58_removeExecutionKey(byte[32])void'] + argsTuple: AbstractedAccountArgs['tuple']['arc58_removeExecutionKey(byte[32])void'] + returns: AbstractedAccountReturns['arc58_removeExecutionKey(byte[32])void'] + }> + & Record<'arc58_getPlugins((uint64,address,string)[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]' | 'arc58_getPlugins', { + argsObj: AbstractedAccountArgs['obj']['arc58_getPlugins((uint64,address,string)[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]'] + argsTuple: AbstractedAccountArgs['tuple']['arc58_getPlugins((uint64,address,string)[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]'] + returns: AbstractedAccountReturns['arc58_getPlugins((uint64,address,string)[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]'] + }> + & Record<'arc58_getNamedPlugins(string[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]' | 'arc58_getNamedPlugins', { + argsObj: AbstractedAccountArgs['obj']['arc58_getNamedPlugins(string[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]'] + argsTuple: AbstractedAccountArgs['tuple']['arc58_getNamedPlugins(string[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]'] + returns: AbstractedAccountReturns['arc58_getNamedPlugins(string[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]'] + }> + & Record<'arc58_getEscrows(string[])(uint64,bool)[]' | 'arc58_getEscrows', { + argsObj: AbstractedAccountArgs['obj']['arc58_getEscrows(string[])(uint64,bool)[]'] + argsTuple: AbstractedAccountArgs['tuple']['arc58_getEscrows(string[])(uint64,bool)[]'] + returns: AbstractedAccountReturns['arc58_getEscrows(string[])(uint64,bool)[]'] + }> + & Record<'arc58_getAllowances(string,uint64[])(uint8,uint64,uint64,uint64,uint64,uint64,uint64,bool)[]' | 'arc58_getAllowances', { + argsObj: AbstractedAccountArgs['obj']['arc58_getAllowances(string,uint64[])(uint8,uint64,uint64,uint64,uint64,uint64,uint64,bool)[]'] + argsTuple: AbstractedAccountArgs['tuple']['arc58_getAllowances(string,uint64[])(uint8,uint64,uint64,uint64,uint64,uint64,uint64,bool)[]'] + returns: AbstractedAccountReturns['arc58_getAllowances(string,uint64[])(uint8,uint64,uint64,uint64,uint64,uint64,uint64,bool)[]'] + }> + & Record<'arc58_getExecutions(byte[32][])(byte[32][],uint64,uint64)[]' | 'arc58_getExecutions', { + argsObj: AbstractedAccountArgs['obj']['arc58_getExecutions(byte[32][])(byte[32][],uint64,uint64)[]'] + argsTuple: AbstractedAccountArgs['tuple']['arc58_getExecutions(byte[32][])(byte[32][],uint64,uint64)[]'] + returns: AbstractedAccountReturns['arc58_getExecutions(byte[32][])(byte[32][],uint64,uint64)[]'] + }> + & Record<'mbr(string,uint64,string,uint64)(uint64,uint64,uint64,uint64,uint64,bool,uint64)' | 'mbr', { + argsObj: AbstractedAccountArgs['obj']['mbr(string,uint64,string,uint64)(uint64,uint64,uint64,uint64,uint64,bool,uint64)'] + argsTuple: AbstractedAccountArgs['tuple']['mbr(string,uint64,string,uint64)(uint64,uint64,uint64,uint64,uint64,bool,uint64)'] + returns: AbstractedAccountReturns['mbr(string,uint64,string,uint64)(uint64,uint64,uint64,uint64,uint64,bool,uint64)'] + }> + /** + * Defines the shape of the state of the application. + */ + state: { + global: { + keys: { + /** + * The admin of the abstracted account. This address can add plugins and initiate rekeys + */ + admin: string + /** + * The address this app controls + */ + controlledAddress: string + /** + * The last time the contract was interacted with in unix time + */ + lastUserInteraction: bigint + /** + * The last time state has changed on the abstracted account (not including lastCalled for cooldowns) in unix time + */ + lastChange: bigint + /** + * the escrow account factory to use for allowances + */ + escrowFactory: bigint + /** + * [TEMPORARY STATE FIELD] The spending address for the currently active plugin + */ + spendingAddress: string + /** + * [TEMPORARY STATE FIELD] The current plugin key being used + */ + currentPlugin: PluginKey + /** + * [TEMPORARY STATE FIELD] The index of the transaction that created the rekey sandwich + */ + rekeyIndex: bigint + } + maps: {} + } + box: { + keys: {} + maps: { + /** + * Plugins that add functionality to the controlledAddress and the account that has permission to use it. + */ + plugins: Map + /** + * Plugins that have been given a name for discoverability + */ + namedPlugins: Map + /** + * the escrows that this wallet has created for specific callers with allowances + */ + escrows: Map + /** + * The Allowances for plugins installed on the smart contract with useAllowance set to true + */ + allowances: Map + /** + * execution keys + */ + executions: Map + } + } + } +} + +/** + * Defines the possible abi call signatures. + */ +export type AbstractedAccountSignatures = keyof AbstractedAccountTypes['methods'] +/** + * Defines the possible abi call signatures for methods that return a non-void value. + */ +export type AbstractedAccountNonVoidMethodSignatures = keyof AbstractedAccountTypes['methods'] extends infer T ? T extends keyof AbstractedAccountTypes['methods'] ? MethodReturn extends void ? never : T : never : never +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the AbstractedAccount smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = AbstractedAccountTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the AbstractedAccount smart contract to the method's return type + */ +export type MethodReturn = AbstractedAccountTypes['methods'][TSignature]['returns'] + +/** + * Defines the shape of the keyed global state of the application. + */ +export type GlobalKeysState = AbstractedAccountTypes['state']['global']['keys'] + +/** + * Defines the shape of the keyed box state of the application. + */ +export type BoxKeysState = AbstractedAccountTypes['state']['box']['keys'] + + +/** + * Defines supported create method params for this smart contract + */ +export type AbstractedAccountCreateCallParams = + | Expand & {method: 'createApplication'} & {onComplete?: OnApplicationComplete.NoOpOC} & CreateSchema> + | Expand & {method: 'createApplication(address,address,uint64)void'} & {onComplete?: OnApplicationComplete.NoOpOC} & CreateSchema> +/** + * Defines arguments required for the deploy method. + */ +export type AbstractedAccountDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: AbstractedAccountCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the AbstractedAccount smart contract + */ +export abstract class AbstractedAccountParamsFactory { + /** + * Gets available create ABI call param factories + */ + static get create() { + return { + _resolveByMethod(params: TParams) { + switch(params.method) { + case 'createApplication': + case 'createApplication(address,address,uint64)void': + return AbstractedAccountParamsFactory.create.createApplication(params) + } + throw new Error(`Unknown ' + verb + ' method`) + }, + + /** + * Constructs create ABI call params for the AbstractedAccount smart contract using the createApplication(address,address,uint64)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + createApplication(params: CallParams & AppClientCompilationParams & {onComplete?: OnApplicationComplete.NoOpOC}): AppClientMethodCallParams & AppClientCompilationParams & {onComplete?: OnApplicationComplete.NoOpOC} { + return { + ...params, + method: 'createApplication(address,address,uint64)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.controlledAddress, params.args.admin, params.args.escrowFactory], + } + }, + } + } + + /** + * Constructs a no op call for the register(string)void ABI method + * + * Register the abstracted account with the escrow factory. + This allows apps to correlate the account with the app without needing + it to be explicitly provided. + + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static register(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'register(string)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.escrow], + } + } + /** + * Constructs a no op call for the arc58_changeAdmin(address)void ABI method + * + * Attempt to change the admin for this app. Some implementations MAY not support this. + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static arc58ChangeAdmin(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'arc58_changeAdmin(address)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.newAdmin], + } + } + /** + * Constructs a no op call for the arc58_pluginChangeAdmin(address)void ABI method + * + * Attempt to change the admin via plugin. + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static arc58PluginChangeAdmin(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'arc58_pluginChangeAdmin(address)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.newAdmin], + } + } + /** + * Constructs a no op call for the arc58_getAdmin()address ABI method + * + * Get the admin of this app. This method SHOULD always be used rather than reading directly from state + because different implementations may have different ways of determining the admin. + + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static arc58GetAdmin(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'arc58_getAdmin()address' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the arc58_verifyAuthAddress()void ABI method + * + * Verify the abstracted account is rekeyed to this app + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static arc58VerifyAuthAddress(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'arc58_verifyAuthAddress()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the arc58_rekeyTo(address,bool)void ABI method + * + * Rekey the abstracted account to another address. Primarily useful for rekeying to an EOA. + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static arc58RekeyTo(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'arc58_rekeyTo(address,bool)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.address, params.args.flash], + } + } + /** + * Constructs a no op call for the arc58_canCall(uint64,bool,address,string,byte[4])bool ABI method + * + * check whether the plugin can be used + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static arc58CanCall(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'arc58_canCall(uint64,bool,address,string,byte[4])bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.plugin, params.args.global, params.args.address, params.args.escrow, params.args.method], + } + } + /** + * Constructs a no op call for the arc58_rekeyToPlugin(uint64,bool,string,uint64[],(uint64,uint64)[])void ABI method + * + * Temporarily rekey to an approved plugin app address + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static arc58RekeyToPlugin(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'arc58_rekeyToPlugin(uint64,bool,string,uint64[],(uint64,uint64)[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.plugin, params.args.global, params.args.escrow, params.args.methodOffsets, params.args.fundsRequest], + } + } + /** + * Constructs a no op call for the arc58_rekeyToNamedPlugin(string,bool,string,uint64[],(uint64,uint64)[])void ABI method + * + * Temporarily rekey to a named plugin app address + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static arc58RekeyToNamedPlugin(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'arc58_rekeyToNamedPlugin(string,bool,string,uint64[],(uint64,uint64)[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.name, params.args.global, params.args.escrow, params.args.methodOffsets, params.args.fundsRequest], + } + } + /** + * Constructs a no op call for the arc58_addPlugin(uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void ABI method + * + * Add an app to the list of approved plugins + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static arc58AddPlugin(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'arc58_addPlugin(uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.plugin, params.args.caller, params.args.escrow, params.args.admin, params.args.delegationType, params.args.lastValid, params.args.cooldown, params.args.methods, params.args.useRounds, params.args.useExecutionKey, params.args.defaultToEscrow], + } + } + /** + * Constructs a no op call for the arc58_removePlugin(uint64,address,string)void ABI method + * + * Remove an app from the list of approved plugins + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static arc58RemovePlugin(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'arc58_removePlugin(uint64,address,string)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.plugin, params.args.caller, params.args.escrow], + } + } + /** + * Constructs a no op call for the arc58_addNamedPlugin(string,uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void ABI method + * + * Add a named plugin + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static arc58AddNamedPlugin(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'arc58_addNamedPlugin(string,uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.name, params.args.plugin, params.args.caller, params.args.escrow, params.args.admin, params.args.delegationType, params.args.lastValid, params.args.cooldown, params.args.methods, params.args.useRounds, params.args.useExecutionKey, params.args.defaultToEscrow], + } + } + /** + * Constructs a no op call for the arc58_removeNamedPlugin(string)void ABI method + * + * Remove a named plugin + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static arc58RemoveNamedPlugin(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'arc58_removeNamedPlugin(string)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.name], + } + } + /** + * Constructs a no op call for the arc58_newEscrow(string)uint64 ABI method + * + * Create a new escrow for the controlled address + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static arc58NewEscrow(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'arc58_newEscrow(string)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.escrow], + } + } + /** + * Constructs a no op call for the arc58_toggleEscrowLock(string)(uint64,bool) ABI method + * + * Lock or Unlock an escrow account + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static arc58ToggleEscrowLock(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'arc58_toggleEscrowLock(string)(uint64,bool)' as const, + args: Array.isArray(params.args) ? params.args : [params.args.escrow], + } + } + /** + * Constructs a no op call for the arc58_reclaim(string,(uint64,uint64,bool)[])void ABI method + * + * Transfer funds from an escrow back to the controlled address. + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static arc58Reclaim(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'arc58_reclaim(string,(uint64,uint64,bool)[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.escrow, params.args.reclaims], + } + } + /** + * Constructs a no op call for the arc58_optinEscrow(string,uint64[])void ABI method + * + * Opt-in an escrow account to assets + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static arc58OptinEscrow(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'arc58_optinEscrow(string,uint64[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.escrow, params.args.assets], + } + } + /** + * Constructs a no op call for the arc58_pluginOptinEscrow(uint64,address,string,uint64[],pay)void ABI method + * + * Opt-in an escrow account to assets via a plugin / allowed caller + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static arc58PluginOptinEscrow(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'arc58_pluginOptinEscrow(uint64,address,string,uint64[],pay)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.plugin, params.args.caller, params.args.escrow, params.args.assets, params.args.mbrPayment], + } + } + /** + * Constructs a no op call for the arc58_addAllowances(string,(uint64,uint8,uint64,uint64,uint64,bool)[])void ABI method + * + * Add an allowance for an escrow account + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static arc58AddAllowances(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'arc58_addAllowances(string,(uint64,uint8,uint64,uint64,uint64,bool)[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.escrow, params.args.allowances], + } + } + /** + * Constructs a no op call for the arc58_removeAllowances(string,uint64[])void ABI method + * + * Remove an allowances for an escrow account + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static arc58RemoveAllowances(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'arc58_removeAllowances(string,uint64[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.escrow, params.args.assets], + } + } + /** + * Constructs a no op call for the arc58_addExecutionKey(byte[32],byte[32][],uint64,uint64)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static arc58AddExecutionKey(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'arc58_addExecutionKey(byte[32],byte[32][],uint64,uint64)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.lease, params.args.groups, params.args.firstValid, params.args.lastValid], + } + } + /** + * Constructs a no op call for the arc58_removeExecutionKey(byte[32])void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static arc58RemoveExecutionKey(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'arc58_removeExecutionKey(byte[32])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.lease], + } + } + /** + * Constructs a no op call for the arc58_getPlugins((uint64,address,string)[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static arc58GetPlugins(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'arc58_getPlugins((uint64,address,string)[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.keys], + } + } + /** + * Constructs a no op call for the arc58_getNamedPlugins(string[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static arc58GetNamedPlugins(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'arc58_getNamedPlugins(string[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.names], + } + } + /** + * Constructs a no op call for the arc58_getEscrows(string[])(uint64,bool)[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static arc58GetEscrows(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'arc58_getEscrows(string[])(uint64,bool)[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.escrows], + } + } + /** + * Constructs a no op call for the arc58_getAllowances(string,uint64[])(uint8,uint64,uint64,uint64,uint64,uint64,uint64,bool)[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static arc58GetAllowances(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'arc58_getAllowances(string,uint64[])(uint8,uint64,uint64,uint64,uint64,uint64,uint64,bool)[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.escrow, params.args.assets], + } + } + /** + * Constructs a no op call for the arc58_getExecutions(byte[32][])(byte[32][],uint64,uint64)[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static arc58GetExecutions(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'arc58_getExecutions(byte[32][])(byte[32][],uint64,uint64)[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.leases], + } + } + /** + * Constructs a no op call for the mbr(string,uint64,string,uint64)(uint64,uint64,uint64,uint64,uint64,bool,uint64) ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static mbr(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'mbr(string,uint64,string,uint64)(uint64,uint64,uint64,uint64,uint64,bool,uint64)' as const, + args: Array.isArray(params.args) ? params.args : [params.args.escrow, params.args.methodCount, params.args.plugin, params.args.groups], + } + } +} + +/** + * A factory to create and deploy one or more instance of the AbstractedAccount smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class AbstractedAccountFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `AbstractedAccountFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new AbstractedAccountClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new AbstractedAccountClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the AbstractedAccount smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: AbstractedAccountDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + createParams: params.createParams?.method ? AbstractedAccountParamsFactory.create._resolveByMethod(params.createParams) : params.createParams ? params.createParams as (AbstractedAccountCreateCallParams & { args: Uint8Array[] }) : undefined, + }) + return { result: result.result, appClient: new AbstractedAccountClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the AbstractedAccount smart contract using the createApplication(address,address,uint64)void ABI method. + * + * Create an abstracted account application. + This is not part of ARC58 and implementation specific. + + * + * @param params The params for the smart contract call + * @returns The create params + */ + createApplication: (params: CallParams & AppClientCompilationParams & CreateSchema & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appFactory.params.create(AbstractedAccountParamsFactory.create.createApplication(params)) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the AbstractedAccount smart contract using the createApplication(address,address,uint64)void ABI method. + * + * Create an abstracted account application. + This is not part of ARC58 and implementation specific. + + * + * @param params The params for the smart contract call + * @returns The create transaction + */ + createApplication: (params: CallParams & AppClientCompilationParams & CreateSchema & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appFactory.createTransaction.create(AbstractedAccountParamsFactory.create.createApplication(params)) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the AbstractedAccount smart contract using an ABI method call using the createApplication(address,address,uint64)void ABI method. + * + * Create an abstracted account application. + This is not part of ARC58 and implementation specific. + + * + * @param params The params for the smart contract call + * @returns The create result + */ + createApplication: async (params: CallParams & AppClientCompilationParams & CreateSchema & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appFactory.send.create(AbstractedAccountParamsFactory.create.createApplication(params)) + return { result: { ...result.result, return: result.result.return as unknown as (undefined | AbstractedAccountReturns['createApplication(address,address,uint64)void']) }, appClient: new AbstractedAccountClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the AbstractedAccount smart contract + */ +export class AbstractedAccountClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `AbstractedAccountClient` + * + * @param appClient An `AppClient` instance which has been created with the AbstractedAccount app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `AbstractedAccountClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Checks for decode errors on the given return value and maps the return value to the return type for the given method + * @returns The typed return value or undefined if there was no value + */ + decodeReturnValue(method: TSignature, returnValue: ABIReturn | undefined) { + return returnValue !== undefined ? getArc56ReturnValue>(returnValue, this.appClient.getABIMethod(method), APP_SPEC.structs) : undefined + } + + /** + * Returns a new `AbstractedAccountClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new AbstractedAccountClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `AbstractedAccountClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new AbstractedAccountClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Makes a clear_state call to an existing instance of the AbstractedAccount smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `register(string)void` ABI method. + * + * Register the abstracted account with the escrow factory. + This allows apps to correlate the account with the app without needing + it to be explicitly provided. + + * + * @param params The params for the smart contract call + * @returns The call params + */ + register: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AbstractedAccountParamsFactory.register(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_changeAdmin(address)void` ABI method. + * + * Attempt to change the admin for this app. Some implementations MAY not support this. + * + * @param params The params for the smart contract call + * @returns The call params + */ + arc58ChangeAdmin: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AbstractedAccountParamsFactory.arc58ChangeAdmin(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_pluginChangeAdmin(address)void` ABI method. + * + * Attempt to change the admin via plugin. + * + * @param params The params for the smart contract call + * @returns The call params + */ + arc58PluginChangeAdmin: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AbstractedAccountParamsFactory.arc58PluginChangeAdmin(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_getAdmin()address` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * Get the admin of this app. This method SHOULD always be used rather than reading directly from state + because different implementations may have different ways of determining the admin. + + * + * @param params The params for the smart contract call + * @returns The call params + */ + arc58GetAdmin: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { + return this.appClient.params.call(AbstractedAccountParamsFactory.arc58GetAdmin(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_verifyAuthAddress()void` ABI method. + * + * Verify the abstracted account is rekeyed to this app + * + * @param params The params for the smart contract call + * @returns The call params + */ + arc58VerifyAuthAddress: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { + return this.appClient.params.call(AbstractedAccountParamsFactory.arc58VerifyAuthAddress(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_rekeyTo(address,bool)void` ABI method. + * + * Rekey the abstracted account to another address. Primarily useful for rekeying to an EOA. + * + * @param params The params for the smart contract call + * @returns The call params + */ + arc58RekeyTo: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AbstractedAccountParamsFactory.arc58RekeyTo(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_canCall(uint64,bool,address,string,byte[4])bool` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * check whether the plugin can be used + * + * @param params The params for the smart contract call + * @returns The call params: whether the plugin can be called with these parameters + */ + arc58CanCall: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AbstractedAccountParamsFactory.arc58CanCall(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_rekeyToPlugin(uint64,bool,string,uint64[],(uint64,uint64)[])void` ABI method. + * + * Temporarily rekey to an approved plugin app address + * + * @param params The params for the smart contract call + * @returns The call params + */ + arc58RekeyToPlugin: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AbstractedAccountParamsFactory.arc58RekeyToPlugin(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_rekeyToNamedPlugin(string,bool,string,uint64[],(uint64,uint64)[])void` ABI method. + * + * Temporarily rekey to a named plugin app address + * + * @param params The params for the smart contract call + * @returns The call params + */ + arc58RekeyToNamedPlugin: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AbstractedAccountParamsFactory.arc58RekeyToNamedPlugin(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_addPlugin(uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void` ABI method. + * + * Add an app to the list of approved plugins + * + * @param params The params for the smart contract call + * @returns The call params + */ + arc58AddPlugin: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AbstractedAccountParamsFactory.arc58AddPlugin(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_removePlugin(uint64,address,string)void` ABI method. + * + * Remove an app from the list of approved plugins + * + * @param params The params for the smart contract call + * @returns The call params + */ + arc58RemovePlugin: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AbstractedAccountParamsFactory.arc58RemovePlugin(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_addNamedPlugin(string,uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void` ABI method. + * + * Add a named plugin + * + * @param params The params for the smart contract call + * @returns The call params + */ + arc58AddNamedPlugin: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AbstractedAccountParamsFactory.arc58AddNamedPlugin(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_removeNamedPlugin(string)void` ABI method. + * + * Remove a named plugin + * + * @param params The params for the smart contract call + * @returns The call params + */ + arc58RemoveNamedPlugin: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AbstractedAccountParamsFactory.arc58RemoveNamedPlugin(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_newEscrow(string)uint64` ABI method. + * + * Create a new escrow for the controlled address + * + * @param params The params for the smart contract call + * @returns The call params + */ + arc58NewEscrow: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AbstractedAccountParamsFactory.arc58NewEscrow(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_toggleEscrowLock(string)(uint64,bool)` ABI method. + * + * Lock or Unlock an escrow account + * + * @param params The params for the smart contract call + * @returns The call params + */ + arc58ToggleEscrowLock: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AbstractedAccountParamsFactory.arc58ToggleEscrowLock(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_reclaim(string,(uint64,uint64,bool)[])void` ABI method. + * + * Transfer funds from an escrow back to the controlled address. + * + * @param params The params for the smart contract call + * @returns The call params + */ + arc58Reclaim: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AbstractedAccountParamsFactory.arc58Reclaim(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_optinEscrow(string,uint64[])void` ABI method. + * + * Opt-in an escrow account to assets + * + * @param params The params for the smart contract call + * @returns The call params + */ + arc58OptinEscrow: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AbstractedAccountParamsFactory.arc58OptinEscrow(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_pluginOptinEscrow(uint64,address,string,uint64[],pay)void` ABI method. + * + * Opt-in an escrow account to assets via a plugin / allowed caller + * + * @param params The params for the smart contract call + * @returns The call params + */ + arc58PluginOptinEscrow: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AbstractedAccountParamsFactory.arc58PluginOptinEscrow(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_addAllowances(string,(uint64,uint8,uint64,uint64,uint64,bool)[])void` ABI method. + * + * Add an allowance for an escrow account + * + * @param params The params for the smart contract call + * @returns The call params + */ + arc58AddAllowances: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AbstractedAccountParamsFactory.arc58AddAllowances(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_removeAllowances(string,uint64[])void` ABI method. + * + * Remove an allowances for an escrow account + * + * @param params The params for the smart contract call + * @returns The call params + */ + arc58RemoveAllowances: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AbstractedAccountParamsFactory.arc58RemoveAllowances(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_addExecutionKey(byte[32],byte[32][],uint64,uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + arc58AddExecutionKey: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AbstractedAccountParamsFactory.arc58AddExecutionKey(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_removeExecutionKey(byte[32])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + arc58RemoveExecutionKey: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AbstractedAccountParamsFactory.arc58RemoveExecutionKey(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_getPlugins((uint64,address,string)[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + arc58GetPlugins: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AbstractedAccountParamsFactory.arc58GetPlugins(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_getNamedPlugins(string[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + arc58GetNamedPlugins: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AbstractedAccountParamsFactory.arc58GetNamedPlugins(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_getEscrows(string[])(uint64,bool)[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + arc58GetEscrows: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AbstractedAccountParamsFactory.arc58GetEscrows(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_getAllowances(string,uint64[])(uint8,uint64,uint64,uint64,uint64,uint64,uint64,bool)[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + arc58GetAllowances: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AbstractedAccountParamsFactory.arc58GetAllowances(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_getExecutions(byte[32][])(byte[32][],uint64,uint64)[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + arc58GetExecutions: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AbstractedAccountParamsFactory.arc58GetExecutions(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `mbr(string,uint64,string,uint64)(uint64,uint64,uint64,uint64,uint64,bool,uint64)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + mbr: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(AbstractedAccountParamsFactory.mbr(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Makes a clear_state call to an existing instance of the AbstractedAccount smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `register(string)void` ABI method. + * + * Register the abstracted account with the escrow factory. + This allows apps to correlate the account with the app without needing + it to be explicitly provided. + + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + register: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AbstractedAccountParamsFactory.register(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_changeAdmin(address)void` ABI method. + * + * Attempt to change the admin for this app. Some implementations MAY not support this. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + arc58ChangeAdmin: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AbstractedAccountParamsFactory.arc58ChangeAdmin(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_pluginChangeAdmin(address)void` ABI method. + * + * Attempt to change the admin via plugin. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + arc58PluginChangeAdmin: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AbstractedAccountParamsFactory.arc58PluginChangeAdmin(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_getAdmin()address` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * Get the admin of this app. This method SHOULD always be used rather than reading directly from state + because different implementations may have different ways of determining the admin. + + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + arc58GetAdmin: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { + return this.appClient.createTransaction.call(AbstractedAccountParamsFactory.arc58GetAdmin(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_verifyAuthAddress()void` ABI method. + * + * Verify the abstracted account is rekeyed to this app + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + arc58VerifyAuthAddress: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { + return this.appClient.createTransaction.call(AbstractedAccountParamsFactory.arc58VerifyAuthAddress(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_rekeyTo(address,bool)void` ABI method. + * + * Rekey the abstracted account to another address. Primarily useful for rekeying to an EOA. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + arc58RekeyTo: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AbstractedAccountParamsFactory.arc58RekeyTo(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_canCall(uint64,bool,address,string,byte[4])bool` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * check whether the plugin can be used + * + * @param params The params for the smart contract call + * @returns The call transaction: whether the plugin can be called with these parameters + */ + arc58CanCall: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AbstractedAccountParamsFactory.arc58CanCall(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_rekeyToPlugin(uint64,bool,string,uint64[],(uint64,uint64)[])void` ABI method. + * + * Temporarily rekey to an approved plugin app address + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + arc58RekeyToPlugin: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AbstractedAccountParamsFactory.arc58RekeyToPlugin(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_rekeyToNamedPlugin(string,bool,string,uint64[],(uint64,uint64)[])void` ABI method. + * + * Temporarily rekey to a named plugin app address + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + arc58RekeyToNamedPlugin: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AbstractedAccountParamsFactory.arc58RekeyToNamedPlugin(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_addPlugin(uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void` ABI method. + * + * Add an app to the list of approved plugins + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + arc58AddPlugin: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AbstractedAccountParamsFactory.arc58AddPlugin(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_removePlugin(uint64,address,string)void` ABI method. + * + * Remove an app from the list of approved plugins + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + arc58RemovePlugin: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AbstractedAccountParamsFactory.arc58RemovePlugin(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_addNamedPlugin(string,uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void` ABI method. + * + * Add a named plugin + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + arc58AddNamedPlugin: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AbstractedAccountParamsFactory.arc58AddNamedPlugin(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_removeNamedPlugin(string)void` ABI method. + * + * Remove a named plugin + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + arc58RemoveNamedPlugin: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AbstractedAccountParamsFactory.arc58RemoveNamedPlugin(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_newEscrow(string)uint64` ABI method. + * + * Create a new escrow for the controlled address + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + arc58NewEscrow: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AbstractedAccountParamsFactory.arc58NewEscrow(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_toggleEscrowLock(string)(uint64,bool)` ABI method. + * + * Lock or Unlock an escrow account + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + arc58ToggleEscrowLock: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AbstractedAccountParamsFactory.arc58ToggleEscrowLock(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_reclaim(string,(uint64,uint64,bool)[])void` ABI method. + * + * Transfer funds from an escrow back to the controlled address. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + arc58Reclaim: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AbstractedAccountParamsFactory.arc58Reclaim(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_optinEscrow(string,uint64[])void` ABI method. + * + * Opt-in an escrow account to assets + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + arc58OptinEscrow: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AbstractedAccountParamsFactory.arc58OptinEscrow(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_pluginOptinEscrow(uint64,address,string,uint64[],pay)void` ABI method. + * + * Opt-in an escrow account to assets via a plugin / allowed caller + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + arc58PluginOptinEscrow: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AbstractedAccountParamsFactory.arc58PluginOptinEscrow(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_addAllowances(string,(uint64,uint8,uint64,uint64,uint64,bool)[])void` ABI method. + * + * Add an allowance for an escrow account + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + arc58AddAllowances: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AbstractedAccountParamsFactory.arc58AddAllowances(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_removeAllowances(string,uint64[])void` ABI method. + * + * Remove an allowances for an escrow account + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + arc58RemoveAllowances: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AbstractedAccountParamsFactory.arc58RemoveAllowances(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_addExecutionKey(byte[32],byte[32][],uint64,uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + arc58AddExecutionKey: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AbstractedAccountParamsFactory.arc58AddExecutionKey(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_removeExecutionKey(byte[32])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + arc58RemoveExecutionKey: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AbstractedAccountParamsFactory.arc58RemoveExecutionKey(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_getPlugins((uint64,address,string)[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + arc58GetPlugins: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AbstractedAccountParamsFactory.arc58GetPlugins(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_getNamedPlugins(string[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + arc58GetNamedPlugins: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AbstractedAccountParamsFactory.arc58GetNamedPlugins(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_getEscrows(string[])(uint64,bool)[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + arc58GetEscrows: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AbstractedAccountParamsFactory.arc58GetEscrows(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_getAllowances(string,uint64[])(uint8,uint64,uint64,uint64,uint64,uint64,uint64,bool)[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + arc58GetAllowances: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AbstractedAccountParamsFactory.arc58GetAllowances(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_getExecutions(byte[32][])(byte[32][],uint64,uint64)[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + arc58GetExecutions: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AbstractedAccountParamsFactory.arc58GetExecutions(params)) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `mbr(string,uint64,string,uint64)(uint64,uint64,uint64,uint64,uint64,bool,uint64)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + mbr: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(AbstractedAccountParamsFactory.mbr(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Makes a clear_state call to an existing instance of the AbstractedAccount smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `register(string)void` ABI method. + * + * Register the abstracted account with the escrow factory. + This allows apps to correlate the account with the app without needing + it to be explicitly provided. + + * + * @param params The params for the smart contract call + * @returns The call result + */ + register: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.register(params)) + return {...result, return: result.return as unknown as (undefined | AbstractedAccountReturns['register(string)void'])} + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_changeAdmin(address)void` ABI method. + * + * Attempt to change the admin for this app. Some implementations MAY not support this. + * + * @param params The params for the smart contract call + * @returns The call result + */ + arc58ChangeAdmin: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.arc58ChangeAdmin(params)) + return {...result, return: result.return as unknown as (undefined | AbstractedAccountReturns['arc58_changeAdmin(address)void'])} + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_pluginChangeAdmin(address)void` ABI method. + * + * Attempt to change the admin via plugin. + * + * @param params The params for the smart contract call + * @returns The call result + */ + arc58PluginChangeAdmin: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.arc58PluginChangeAdmin(params)) + return {...result, return: result.return as unknown as (undefined | AbstractedAccountReturns['arc58_pluginChangeAdmin(address)void'])} + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_getAdmin()address` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * Get the admin of this app. This method SHOULD always be used rather than reading directly from state + because different implementations may have different ways of determining the admin. + + * + * @param params The params for the smart contract call + * @returns The call result + */ + arc58GetAdmin: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.arc58GetAdmin(params)) + return {...result, return: result.return as unknown as (undefined | AbstractedAccountReturns['arc58_getAdmin()address'])} + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_verifyAuthAddress()void` ABI method. + * + * Verify the abstracted account is rekeyed to this app + * + * @param params The params for the smart contract call + * @returns The call result + */ + arc58VerifyAuthAddress: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.arc58VerifyAuthAddress(params)) + return {...result, return: result.return as unknown as (undefined | AbstractedAccountReturns['arc58_verifyAuthAddress()void'])} + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_rekeyTo(address,bool)void` ABI method. + * + * Rekey the abstracted account to another address. Primarily useful for rekeying to an EOA. + * + * @param params The params for the smart contract call + * @returns The call result + */ + arc58RekeyTo: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.arc58RekeyTo(params)) + return {...result, return: result.return as unknown as (undefined | AbstractedAccountReturns['arc58_rekeyTo(address,bool)void'])} + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_canCall(uint64,bool,address,string,byte[4])bool` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * check whether the plugin can be used + * + * @param params The params for the smart contract call + * @returns The call result: whether the plugin can be called with these parameters + */ + arc58CanCall: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.arc58CanCall(params)) + return {...result, return: result.return as unknown as (undefined | AbstractedAccountReturns['arc58_canCall(uint64,bool,address,string,byte[4])bool'])} + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_rekeyToPlugin(uint64,bool,string,uint64[],(uint64,uint64)[])void` ABI method. + * + * Temporarily rekey to an approved plugin app address + * + * @param params The params for the smart contract call + * @returns The call result + */ + arc58RekeyToPlugin: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.arc58RekeyToPlugin(params)) + return {...result, return: result.return as unknown as (undefined | AbstractedAccountReturns['arc58_rekeyToPlugin(uint64,bool,string,uint64[],(uint64,uint64)[])void'])} + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_rekeyToNamedPlugin(string,bool,string,uint64[],(uint64,uint64)[])void` ABI method. + * + * Temporarily rekey to a named plugin app address + * + * @param params The params for the smart contract call + * @returns The call result + */ + arc58RekeyToNamedPlugin: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.arc58RekeyToNamedPlugin(params)) + return {...result, return: result.return as unknown as (undefined | AbstractedAccountReturns['arc58_rekeyToNamedPlugin(string,bool,string,uint64[],(uint64,uint64)[])void'])} + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_addPlugin(uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void` ABI method. + * + * Add an app to the list of approved plugins + * + * @param params The params for the smart contract call + * @returns The call result + */ + arc58AddPlugin: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.arc58AddPlugin(params)) + return {...result, return: result.return as unknown as (undefined | AbstractedAccountReturns['arc58_addPlugin(uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void'])} + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_removePlugin(uint64,address,string)void` ABI method. + * + * Remove an app from the list of approved plugins + * + * @param params The params for the smart contract call + * @returns The call result + */ + arc58RemovePlugin: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.arc58RemovePlugin(params)) + return {...result, return: result.return as unknown as (undefined | AbstractedAccountReturns['arc58_removePlugin(uint64,address,string)void'])} + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_addNamedPlugin(string,uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void` ABI method. + * + * Add a named plugin + * + * @param params The params for the smart contract call + * @returns The call result + */ + arc58AddNamedPlugin: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.arc58AddNamedPlugin(params)) + return {...result, return: result.return as unknown as (undefined | AbstractedAccountReturns['arc58_addNamedPlugin(string,uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void'])} + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_removeNamedPlugin(string)void` ABI method. + * + * Remove a named plugin + * + * @param params The params for the smart contract call + * @returns The call result + */ + arc58RemoveNamedPlugin: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.arc58RemoveNamedPlugin(params)) + return {...result, return: result.return as unknown as (undefined | AbstractedAccountReturns['arc58_removeNamedPlugin(string)void'])} + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_newEscrow(string)uint64` ABI method. + * + * Create a new escrow for the controlled address + * + * @param params The params for the smart contract call + * @returns The call result + */ + arc58NewEscrow: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.arc58NewEscrow(params)) + return {...result, return: result.return as unknown as (undefined | AbstractedAccountReturns['arc58_newEscrow(string)uint64'])} + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_toggleEscrowLock(string)(uint64,bool)` ABI method. + * + * Lock or Unlock an escrow account + * + * @param params The params for the smart contract call + * @returns The call result + */ + arc58ToggleEscrowLock: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.arc58ToggleEscrowLock(params)) + return {...result, return: result.return as unknown as (undefined | AbstractedAccountReturns['arc58_toggleEscrowLock(string)(uint64,bool)'])} + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_reclaim(string,(uint64,uint64,bool)[])void` ABI method. + * + * Transfer funds from an escrow back to the controlled address. + * + * @param params The params for the smart contract call + * @returns The call result + */ + arc58Reclaim: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.arc58Reclaim(params)) + return {...result, return: result.return as unknown as (undefined | AbstractedAccountReturns['arc58_reclaim(string,(uint64,uint64,bool)[])void'])} + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_optinEscrow(string,uint64[])void` ABI method. + * + * Opt-in an escrow account to assets + * + * @param params The params for the smart contract call + * @returns The call result + */ + arc58OptinEscrow: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.arc58OptinEscrow(params)) + return {...result, return: result.return as unknown as (undefined | AbstractedAccountReturns['arc58_optinEscrow(string,uint64[])void'])} + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_pluginOptinEscrow(uint64,address,string,uint64[],pay)void` ABI method. + * + * Opt-in an escrow account to assets via a plugin / allowed caller + * + * @param params The params for the smart contract call + * @returns The call result + */ + arc58PluginOptinEscrow: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.arc58PluginOptinEscrow(params)) + return {...result, return: result.return as unknown as (undefined | AbstractedAccountReturns['arc58_pluginOptinEscrow(uint64,address,string,uint64[],pay)void'])} + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_addAllowances(string,(uint64,uint8,uint64,uint64,uint64,bool)[])void` ABI method. + * + * Add an allowance for an escrow account + * + * @param params The params for the smart contract call + * @returns The call result + */ + arc58AddAllowances: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.arc58AddAllowances(params)) + return {...result, return: result.return as unknown as (undefined | AbstractedAccountReturns['arc58_addAllowances(string,(uint64,uint8,uint64,uint64,uint64,bool)[])void'])} + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_removeAllowances(string,uint64[])void` ABI method. + * + * Remove an allowances for an escrow account + * + * @param params The params for the smart contract call + * @returns The call result + */ + arc58RemoveAllowances: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.arc58RemoveAllowances(params)) + return {...result, return: result.return as unknown as (undefined | AbstractedAccountReturns['arc58_removeAllowances(string,uint64[])void'])} + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_addExecutionKey(byte[32],byte[32][],uint64,uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + arc58AddExecutionKey: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.arc58AddExecutionKey(params)) + return {...result, return: result.return as unknown as (undefined | AbstractedAccountReturns['arc58_addExecutionKey(byte[32],byte[32][],uint64,uint64)void'])} + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_removeExecutionKey(byte[32])void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + arc58RemoveExecutionKey: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.arc58RemoveExecutionKey(params)) + return {...result, return: result.return as unknown as (undefined | AbstractedAccountReturns['arc58_removeExecutionKey(byte[32])void'])} + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_getPlugins((uint64,address,string)[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + arc58GetPlugins: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.arc58GetPlugins(params)) + return {...result, return: result.return as unknown as (undefined | AbstractedAccountReturns['arc58_getPlugins((uint64,address,string)[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]'])} + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_getNamedPlugins(string[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + arc58GetNamedPlugins: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.arc58GetNamedPlugins(params)) + return {...result, return: result.return as unknown as (undefined | AbstractedAccountReturns['arc58_getNamedPlugins(string[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]'])} + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_getEscrows(string[])(uint64,bool)[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + arc58GetEscrows: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.arc58GetEscrows(params)) + return {...result, return: result.return as unknown as (undefined | AbstractedAccountReturns['arc58_getEscrows(string[])(uint64,bool)[]'])} + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_getAllowances(string,uint64[])(uint8,uint64,uint64,uint64,uint64,uint64,uint64,bool)[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + arc58GetAllowances: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.arc58GetAllowances(params)) + return {...result, return: result.return as unknown as (undefined | AbstractedAccountReturns['arc58_getAllowances(string,uint64[])(uint8,uint64,uint64,uint64,uint64,uint64,uint64,bool)[]'])} + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `arc58_getExecutions(byte[32][])(byte[32][],uint64,uint64)[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + arc58GetExecutions: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.arc58GetExecutions(params)) + return {...result, return: result.return as unknown as (undefined | AbstractedAccountReturns['arc58_getExecutions(byte[32][])(byte[32][],uint64,uint64)[]'])} + }, + + /** + * Makes a call to the AbstractedAccount smart contract using the `mbr(string,uint64,string,uint64)(uint64,uint64,uint64,uint64,uint64,bool,uint64)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + mbr: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.mbr(params)) + return {...result, return: result.return as unknown as (undefined | AbstractedAccountReturns['mbr(string,uint64,string,uint64)(uint64,uint64,uint64,uint64,uint64,bool,uint64)'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new AbstractedAccountClient(this.appClient.clone(params)) + } + + /** + * Makes a readonly (simulated) call to the AbstractedAccount smart contract using the `arc58_getAdmin()address` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * Get the admin of this app. This method SHOULD always be used rather than reading directly from state + because different implementations may have different ways of determining the admin. + + * + * @param params The params for the smart contract call + * @returns The call result + */ + async arc58GetAdmin(params: CallParams = {args: []}) { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.arc58GetAdmin(params)) + return result.return as unknown as AbstractedAccountReturns['arc58_getAdmin()address'] + } + + /** + * Makes a readonly (simulated) call to the AbstractedAccount smart contract using the `arc58_canCall(uint64,bool,address,string,byte[4])bool` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * check whether the plugin can be used + * + * @param params The params for the smart contract call + * @returns The call result: whether the plugin can be called with these parameters + */ + async arc58CanCall(params: CallParams) { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.arc58CanCall(params)) + return result.return as unknown as AbstractedAccountReturns['arc58_canCall(uint64,bool,address,string,byte[4])bool'] + } + + /** + * Makes a readonly (simulated) call to the AbstractedAccount smart contract using the `arc58_getPlugins((uint64,address,string)[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async arc58GetPlugins(params: CallParams) { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.arc58GetPlugins(params)) + return result.return as unknown as AbstractedAccountReturns['arc58_getPlugins((uint64,address,string)[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]'] + } + + /** + * Makes a readonly (simulated) call to the AbstractedAccount smart contract using the `arc58_getNamedPlugins(string[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async arc58GetNamedPlugins(params: CallParams) { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.arc58GetNamedPlugins(params)) + return result.return as unknown as AbstractedAccountReturns['arc58_getNamedPlugins(string[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]'] + } + + /** + * Makes a readonly (simulated) call to the AbstractedAccount smart contract using the `arc58_getEscrows(string[])(uint64,bool)[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async arc58GetEscrows(params: CallParams) { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.arc58GetEscrows(params)) + return result.return as unknown as AbstractedAccountReturns['arc58_getEscrows(string[])(uint64,bool)[]'] + } + + /** + * Makes a readonly (simulated) call to the AbstractedAccount smart contract using the `arc58_getAllowances(string,uint64[])(uint8,uint64,uint64,uint64,uint64,uint64,uint64,bool)[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async arc58GetAllowances(params: CallParams) { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.arc58GetAllowances(params)) + return result.return as unknown as AbstractedAccountReturns['arc58_getAllowances(string,uint64[])(uint8,uint64,uint64,uint64,uint64,uint64,uint64,bool)[]'] + } + + /** + * Makes a readonly (simulated) call to the AbstractedAccount smart contract using the `arc58_getExecutions(byte[32][])(byte[32][],uint64,uint64)[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async arc58GetExecutions(params: CallParams) { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.arc58GetExecutions(params)) + return result.return as unknown as AbstractedAccountReturns['arc58_getExecutions(byte[32][])(byte[32][],uint64,uint64)[]'] + } + + /** + * Makes a readonly (simulated) call to the AbstractedAccount smart contract using the `mbr(string,uint64,string,uint64)(uint64,uint64,uint64,uint64,uint64,bool,uint64)` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async mbr(params: CallParams) { + const result = await this.appClient.send.call(AbstractedAccountParamsFactory.mbr(params)) + return result.return as unknown as AbstractedAccountReturns['mbr(string,uint64,string,uint64)(uint64,uint64,uint64,uint64,uint64,bool,uint64)'] + } + + /** + * Methods to access state for the current AbstractedAccount app + */ + state = { + /** + * Methods to access global state for the current AbstractedAccount app + */ + global: { + /** + * Get all current keyed values from global state + */ + getAll: async (): Promise>> => { + const result = await this.appClient.state.global.getAll() + return { + admin: result.admin, + controlledAddress: result.controlledAddress, + lastUserInteraction: result.lastUserInteraction, + lastChange: result.lastChange, + escrowFactory: result.escrowFactory, + spendingAddress: result.spendingAddress, + currentPlugin: result.currentPlugin, + rekeyIndex: result.rekeyIndex, + } + }, + /** + * Get the current value of the admin key in global state + */ + admin: async (): Promise => { return (await this.appClient.state.global.getValue("admin")) as string | undefined }, + /** + * Get the current value of the controlledAddress key in global state + */ + controlledAddress: async (): Promise => { return (await this.appClient.state.global.getValue("controlledAddress")) as string | undefined }, + /** + * Get the current value of the lastUserInteraction key in global state + */ + lastUserInteraction: async (): Promise => { return (await this.appClient.state.global.getValue("lastUserInteraction")) as bigint | undefined }, + /** + * Get the current value of the lastChange key in global state + */ + lastChange: async (): Promise => { return (await this.appClient.state.global.getValue("lastChange")) as bigint | undefined }, + /** + * Get the current value of the escrowFactory key in global state + */ + escrowFactory: async (): Promise => { return (await this.appClient.state.global.getValue("escrowFactory")) as bigint | undefined }, + /** + * Get the current value of the spendingAddress key in global state + */ + spendingAddress: async (): Promise => { return (await this.appClient.state.global.getValue("spendingAddress")) as string | undefined }, + /** + * Get the current value of the currentPlugin key in global state + */ + currentPlugin: async (): Promise => { return (await this.appClient.state.global.getValue("currentPlugin")) as PluginKey | undefined }, + /** + * Get the current value of the rekeyIndex key in global state + */ + rekeyIndex: async (): Promise => { return (await this.appClient.state.global.getValue("rekeyIndex")) as bigint | undefined }, + }, + /** + * Methods to access box state for the current AbstractedAccount app + */ + box: { + /** + * Get all current keyed values from box state + */ + getAll: async (): Promise>> => { + const result = await this.appClient.state.box.getAll() + return { + } + }, + /** + * Get values from the plugins map in box state + */ + plugins: { + /** + * Get all current values of the plugins map in box state + */ + getMap: async (): Promise> => { return (await this.appClient.state.box.getMap("plugins")) as Map }, + /** + * Get a current value of the plugins map by key from box state + */ + value: async (key: PluginKey): Promise => { return await this.appClient.state.box.getMapValue("plugins", key) as PluginInfo | undefined }, + }, + /** + * Get values from the namedPlugins map in box state + */ + namedPlugins: { + /** + * Get all current values of the namedPlugins map in box state + */ + getMap: async (): Promise> => { return (await this.appClient.state.box.getMap("namedPlugins")) as Map }, + /** + * Get a current value of the namedPlugins map by key from box state + */ + value: async (key: string): Promise => { return await this.appClient.state.box.getMapValue("namedPlugins", key) as PluginKey | undefined }, + }, + /** + * Get values from the escrows map in box state + */ + escrows: { + /** + * Get all current values of the escrows map in box state + */ + getMap: async (): Promise> => { return (await this.appClient.state.box.getMap("escrows")) as Map }, + /** + * Get a current value of the escrows map by key from box state + */ + value: async (key: string): Promise => { return await this.appClient.state.box.getMapValue("escrows", key) as EscrowInfo | undefined }, + }, + /** + * Get values from the allowances map in box state + */ + allowances: { + /** + * Get all current values of the allowances map in box state + */ + getMap: async (): Promise> => { return (await this.appClient.state.box.getMap("allowances")) as Map }, + /** + * Get a current value of the allowances map by key from box state + */ + value: async (key: AllowanceKey): Promise => { return await this.appClient.state.box.getMapValue("allowances", key) as AllowanceInfo | undefined }, + }, + /** + * Get values from the executions map in box state + */ + executions: { + /** + * Get all current values of the executions map in box state + */ + getMap: async (): Promise> => { return (await this.appClient.state.box.getMap("executions")) as Map }, + /** + * Get a current value of the executions map by key from box state + */ + value: async (key: Uint8Array | string): Promise => { return await this.appClient.state.box.getMapValue("executions", key) as ExecutionInfo | undefined }, + }, + }, + } + + public newGroup(): AbstractedAccountComposer { + const client = this + const composer = this.algorand.newGroup() + let promiseChain:Promise = Promise.resolve() + const resultMappers: Array any)> = [] + return { + /** + * Add a register(string)void method call against the AbstractedAccount contract + */ + register(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.register(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a arc58_changeAdmin(address)void method call against the AbstractedAccount contract + */ + arc58ChangeAdmin(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc58ChangeAdmin(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a arc58_pluginChangeAdmin(address)void method call against the AbstractedAccount contract + */ + arc58PluginChangeAdmin(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc58PluginChangeAdmin(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a arc58_getAdmin()address method call against the AbstractedAccount contract + */ + arc58GetAdmin(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc58GetAdmin(params))) + resultMappers.push((v) => client.decodeReturnValue('arc58_getAdmin()address', v)) + return this + }, + /** + * Add a arc58_verifyAuthAddress()void method call against the AbstractedAccount contract + */ + arc58VerifyAuthAddress(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc58VerifyAuthAddress(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a arc58_rekeyTo(address,bool)void method call against the AbstractedAccount contract + */ + arc58RekeyTo(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc58RekeyTo(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a arc58_canCall(uint64,bool,address,string,byte[4])bool method call against the AbstractedAccount contract + */ + arc58CanCall(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc58CanCall(params))) + resultMappers.push((v) => client.decodeReturnValue('arc58_canCall(uint64,bool,address,string,byte[4])bool', v)) + return this + }, + /** + * Add a arc58_rekeyToPlugin(uint64,bool,string,uint64[],(uint64,uint64)[])void method call against the AbstractedAccount contract + */ + arc58RekeyToPlugin(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc58RekeyToPlugin(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a arc58_rekeyToNamedPlugin(string,bool,string,uint64[],(uint64,uint64)[])void method call against the AbstractedAccount contract + */ + arc58RekeyToNamedPlugin(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc58RekeyToNamedPlugin(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a arc58_addPlugin(uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void method call against the AbstractedAccount contract + */ + arc58AddPlugin(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc58AddPlugin(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a arc58_removePlugin(uint64,address,string)void method call against the AbstractedAccount contract + */ + arc58RemovePlugin(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc58RemovePlugin(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a arc58_addNamedPlugin(string,uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void method call against the AbstractedAccount contract + */ + arc58AddNamedPlugin(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc58AddNamedPlugin(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a arc58_removeNamedPlugin(string)void method call against the AbstractedAccount contract + */ + arc58RemoveNamedPlugin(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc58RemoveNamedPlugin(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a arc58_newEscrow(string)uint64 method call against the AbstractedAccount contract + */ + arc58NewEscrow(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc58NewEscrow(params))) + resultMappers.push((v) => client.decodeReturnValue('arc58_newEscrow(string)uint64', v)) + return this + }, + /** + * Add a arc58_toggleEscrowLock(string)(uint64,bool) method call against the AbstractedAccount contract + */ + arc58ToggleEscrowLock(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc58ToggleEscrowLock(params))) + resultMappers.push((v) => client.decodeReturnValue('arc58_toggleEscrowLock(string)(uint64,bool)', v)) + return this + }, + /** + * Add a arc58_reclaim(string,(uint64,uint64,bool)[])void method call against the AbstractedAccount contract + */ + arc58Reclaim(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc58Reclaim(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a arc58_optinEscrow(string,uint64[])void method call against the AbstractedAccount contract + */ + arc58OptinEscrow(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc58OptinEscrow(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a arc58_pluginOptinEscrow(uint64,address,string,uint64[],pay)void method call against the AbstractedAccount contract + */ + arc58PluginOptinEscrow(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc58PluginOptinEscrow(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a arc58_addAllowances(string,(uint64,uint8,uint64,uint64,uint64,bool)[])void method call against the AbstractedAccount contract + */ + arc58AddAllowances(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc58AddAllowances(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a arc58_removeAllowances(string,uint64[])void method call against the AbstractedAccount contract + */ + arc58RemoveAllowances(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc58RemoveAllowances(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a arc58_addExecutionKey(byte[32],byte[32][],uint64,uint64)void method call against the AbstractedAccount contract + */ + arc58AddExecutionKey(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc58AddExecutionKey(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a arc58_removeExecutionKey(byte[32])void method call against the AbstractedAccount contract + */ + arc58RemoveExecutionKey(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc58RemoveExecutionKey(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a arc58_getPlugins((uint64,address,string)[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[] method call against the AbstractedAccount contract + */ + arc58GetPlugins(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc58GetPlugins(params))) + resultMappers.push((v) => client.decodeReturnValue('arc58_getPlugins((uint64,address,string)[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]', v)) + return this + }, + /** + * Add a arc58_getNamedPlugins(string[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[] method call against the AbstractedAccount contract + */ + arc58GetNamedPlugins(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc58GetNamedPlugins(params))) + resultMappers.push((v) => client.decodeReturnValue('arc58_getNamedPlugins(string[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]', v)) + return this + }, + /** + * Add a arc58_getEscrows(string[])(uint64,bool)[] method call against the AbstractedAccount contract + */ + arc58GetEscrows(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc58GetEscrows(params))) + resultMappers.push((v) => client.decodeReturnValue('arc58_getEscrows(string[])(uint64,bool)[]', v)) + return this + }, + /** + * Add a arc58_getAllowances(string,uint64[])(uint8,uint64,uint64,uint64,uint64,uint64,uint64,bool)[] method call against the AbstractedAccount contract + */ + arc58GetAllowances(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc58GetAllowances(params))) + resultMappers.push((v) => client.decodeReturnValue('arc58_getAllowances(string,uint64[])(uint8,uint64,uint64,uint64,uint64,uint64,uint64,bool)[]', v)) + return this + }, + /** + * Add a arc58_getExecutions(byte[32][])(byte[32][],uint64,uint64)[] method call against the AbstractedAccount contract + */ + arc58GetExecutions(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc58GetExecutions(params))) + resultMappers.push((v) => client.decodeReturnValue('arc58_getExecutions(byte[32][])(byte[32][],uint64,uint64)[]', v)) + return this + }, + /** + * Add a mbr(string,uint64,string,uint64)(uint64,uint64,uint64,uint64,uint64,bool,uint64) method call against the AbstractedAccount contract + */ + mbr(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.mbr(params))) + resultMappers.push((v) => client.decodeReturnValue('mbr(string,uint64,string,uint64)(uint64,uint64,uint64,uint64,uint64,bool,uint64)', v)) + return this + }, + /** + * Add a clear state call to the AbstractedAccount contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue) + } + } + } as unknown as AbstractedAccountComposer + } +} +export type AbstractedAccountComposer = { + /** + * Calls the register(string)void ABI method. + * + * Register the abstracted account with the escrow factory. + This allows apps to correlate the account with the app without needing + it to be explicitly provided. + + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + register(params?: CallParams): AbstractedAccountComposer<[...TReturns, AbstractedAccountReturns['register(string)void'] | undefined]> + + /** + * Calls the arc58_changeAdmin(address)void ABI method. + * + * Attempt to change the admin for this app. Some implementations MAY not support this. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + arc58ChangeAdmin(params?: CallParams): AbstractedAccountComposer<[...TReturns, AbstractedAccountReturns['arc58_changeAdmin(address)void'] | undefined]> + + /** + * Calls the arc58_pluginChangeAdmin(address)void ABI method. + * + * Attempt to change the admin via plugin. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + arc58PluginChangeAdmin(params?: CallParams): AbstractedAccountComposer<[...TReturns, AbstractedAccountReturns['arc58_pluginChangeAdmin(address)void'] | undefined]> + + /** + * Calls the arc58_getAdmin()address ABI method. + * + * Get the admin of this app. This method SHOULD always be used rather than reading directly from state + because different implementations may have different ways of determining the admin. + + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + arc58GetAdmin(params?: CallParams): AbstractedAccountComposer<[...TReturns, AbstractedAccountReturns['arc58_getAdmin()address'] | undefined]> + + /** + * Calls the arc58_verifyAuthAddress()void ABI method. + * + * Verify the abstracted account is rekeyed to this app + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + arc58VerifyAuthAddress(params?: CallParams): AbstractedAccountComposer<[...TReturns, AbstractedAccountReturns['arc58_verifyAuthAddress()void'] | undefined]> + + /** + * Calls the arc58_rekeyTo(address,bool)void ABI method. + * + * Rekey the abstracted account to another address. Primarily useful for rekeying to an EOA. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + arc58RekeyTo(params?: CallParams): AbstractedAccountComposer<[...TReturns, AbstractedAccountReturns['arc58_rekeyTo(address,bool)void'] | undefined]> + + /** + * Calls the arc58_canCall(uint64,bool,address,string,byte[4])bool ABI method. + * + * check whether the plugin can be used + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + arc58CanCall(params?: CallParams): AbstractedAccountComposer<[...TReturns, AbstractedAccountReturns['arc58_canCall(uint64,bool,address,string,byte[4])bool'] | undefined]> + + /** + * Calls the arc58_rekeyToPlugin(uint64,bool,string,uint64[],(uint64,uint64)[])void ABI method. + * + * Temporarily rekey to an approved plugin app address + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + arc58RekeyToPlugin(params?: CallParams): AbstractedAccountComposer<[...TReturns, AbstractedAccountReturns['arc58_rekeyToPlugin(uint64,bool,string,uint64[],(uint64,uint64)[])void'] | undefined]> + + /** + * Calls the arc58_rekeyToNamedPlugin(string,bool,string,uint64[],(uint64,uint64)[])void ABI method. + * + * Temporarily rekey to a named plugin app address + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + arc58RekeyToNamedPlugin(params?: CallParams): AbstractedAccountComposer<[...TReturns, AbstractedAccountReturns['arc58_rekeyToNamedPlugin(string,bool,string,uint64[],(uint64,uint64)[])void'] | undefined]> + + /** + * Calls the arc58_addPlugin(uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void ABI method. + * + * Add an app to the list of approved plugins + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + arc58AddPlugin(params?: CallParams): AbstractedAccountComposer<[...TReturns, AbstractedAccountReturns['arc58_addPlugin(uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void'] | undefined]> + + /** + * Calls the arc58_removePlugin(uint64,address,string)void ABI method. + * + * Remove an app from the list of approved plugins + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + arc58RemovePlugin(params?: CallParams): AbstractedAccountComposer<[...TReturns, AbstractedAccountReturns['arc58_removePlugin(uint64,address,string)void'] | undefined]> + + /** + * Calls the arc58_addNamedPlugin(string,uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void ABI method. + * + * Add a named plugin + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + arc58AddNamedPlugin(params?: CallParams): AbstractedAccountComposer<[...TReturns, AbstractedAccountReturns['arc58_addNamedPlugin(string,uint64,address,string,bool,uint8,uint64,uint64,(byte[4],uint64)[],bool,bool,bool)void'] | undefined]> + + /** + * Calls the arc58_removeNamedPlugin(string)void ABI method. + * + * Remove a named plugin + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + arc58RemoveNamedPlugin(params?: CallParams): AbstractedAccountComposer<[...TReturns, AbstractedAccountReturns['arc58_removeNamedPlugin(string)void'] | undefined]> + + /** + * Calls the arc58_newEscrow(string)uint64 ABI method. + * + * Create a new escrow for the controlled address + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + arc58NewEscrow(params?: CallParams): AbstractedAccountComposer<[...TReturns, AbstractedAccountReturns['arc58_newEscrow(string)uint64'] | undefined]> + + /** + * Calls the arc58_toggleEscrowLock(string)(uint64,bool) ABI method. + * + * Lock or Unlock an escrow account + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + arc58ToggleEscrowLock(params?: CallParams): AbstractedAccountComposer<[...TReturns, AbstractedAccountReturns['arc58_toggleEscrowLock(string)(uint64,bool)'] | undefined]> + + /** + * Calls the arc58_reclaim(string,(uint64,uint64,bool)[])void ABI method. + * + * Transfer funds from an escrow back to the controlled address. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + arc58Reclaim(params?: CallParams): AbstractedAccountComposer<[...TReturns, AbstractedAccountReturns['arc58_reclaim(string,(uint64,uint64,bool)[])void'] | undefined]> + + /** + * Calls the arc58_optinEscrow(string,uint64[])void ABI method. + * + * Opt-in an escrow account to assets + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + arc58OptinEscrow(params?: CallParams): AbstractedAccountComposer<[...TReturns, AbstractedAccountReturns['arc58_optinEscrow(string,uint64[])void'] | undefined]> + + /** + * Calls the arc58_pluginOptinEscrow(uint64,address,string,uint64[],pay)void ABI method. + * + * Opt-in an escrow account to assets via a plugin / allowed caller + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + arc58PluginOptinEscrow(params?: CallParams): AbstractedAccountComposer<[...TReturns, AbstractedAccountReturns['arc58_pluginOptinEscrow(uint64,address,string,uint64[],pay)void'] | undefined]> + + /** + * Calls the arc58_addAllowances(string,(uint64,uint8,uint64,uint64,uint64,bool)[])void ABI method. + * + * Add an allowance for an escrow account + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + arc58AddAllowances(params?: CallParams): AbstractedAccountComposer<[...TReturns, AbstractedAccountReturns['arc58_addAllowances(string,(uint64,uint8,uint64,uint64,uint64,bool)[])void'] | undefined]> + + /** + * Calls the arc58_removeAllowances(string,uint64[])void ABI method. + * + * Remove an allowances for an escrow account + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + arc58RemoveAllowances(params?: CallParams): AbstractedAccountComposer<[...TReturns, AbstractedAccountReturns['arc58_removeAllowances(string,uint64[])void'] | undefined]> + + /** + * Calls the arc58_addExecutionKey(byte[32],byte[32][],uint64,uint64)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + arc58AddExecutionKey(params?: CallParams): AbstractedAccountComposer<[...TReturns, AbstractedAccountReturns['arc58_addExecutionKey(byte[32],byte[32][],uint64,uint64)void'] | undefined]> + + /** + * Calls the arc58_removeExecutionKey(byte[32])void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + arc58RemoveExecutionKey(params?: CallParams): AbstractedAccountComposer<[...TReturns, AbstractedAccountReturns['arc58_removeExecutionKey(byte[32])void'] | undefined]> + + /** + * Calls the arc58_getPlugins((uint64,address,string)[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[] ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + arc58GetPlugins(params?: CallParams): AbstractedAccountComposer<[...TReturns, AbstractedAccountReturns['arc58_getPlugins((uint64,address,string)[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]'] | undefined]> + + /** + * Calls the arc58_getNamedPlugins(string[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[] ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + arc58GetNamedPlugins(params?: CallParams): AbstractedAccountComposer<[...TReturns, AbstractedAccountReturns['arc58_getNamedPlugins(string[])(uint64,uint8,uint64,uint64,(byte[4],uint64,uint64)[],bool,bool,bool,uint64,uint64)[]'] | undefined]> + + /** + * Calls the arc58_getEscrows(string[])(uint64,bool)[] ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + arc58GetEscrows(params?: CallParams): AbstractedAccountComposer<[...TReturns, AbstractedAccountReturns['arc58_getEscrows(string[])(uint64,bool)[]'] | undefined]> + + /** + * Calls the arc58_getAllowances(string,uint64[])(uint8,uint64,uint64,uint64,uint64,uint64,uint64,bool)[] ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + arc58GetAllowances(params?: CallParams): AbstractedAccountComposer<[...TReturns, AbstractedAccountReturns['arc58_getAllowances(string,uint64[])(uint8,uint64,uint64,uint64,uint64,uint64,uint64,bool)[]'] | undefined]> + + /** + * Calls the arc58_getExecutions(byte[32][])(byte[32][],uint64,uint64)[] ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + arc58GetExecutions(params?: CallParams): AbstractedAccountComposer<[...TReturns, AbstractedAccountReturns['arc58_getExecutions(byte[32][])(byte[32][],uint64,uint64)[]'] | undefined]> + + /** + * Calls the mbr(string,uint64,string,uint64)(uint64,uint64,uint64,uint64,uint64,bool,uint64) ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + mbr(params?: CallParams): AbstractedAccountComposer<[...TReturns, AbstractedAccountReturns['mbr(string,uint64,string,uint64)(uint64,uint64,uint64,uint64,uint64,bool,uint64)'] | undefined]> + + /** + * Makes a clear_state call to an existing instance of the AbstractedAccount smart contract. + * + * @param args The arguments for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): AbstractedAccountComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): AbstractedAccountComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: modelsv2.SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: modelsv2.SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: modelsv2.SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type AbstractedAccountComposerResults = Expand + diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/Escrow.approval.puya.map b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/Escrow.approval.puya.map new file mode 100644 index 000000000..23aa4f391 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/Escrow.approval.puya.map @@ -0,0 +1,620 @@ +{ + "version": 3, + "sources": [ + "../../escrow/contract.algo.ts" + ], + "mappings": ";;;;;AAKA;;;;;;AAAA;;;AAAA;;;;AAAA;;AAAA;AAAA;AAAA;;AAAA;;;AAAA;;;;;;AAAA;;;AAAA;;;;AAAA;AAAA;;;;;;AAAA;;;AAAA;;;;AAAA;AAqBG;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAjBA;;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAFS;;;;;;;;;AAIR;AAAA;AAFD;AAAA;AAKD;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AACS;;AAAe;;AAAf;AAAP;AAEA;AAGc;;;;;;AADF;;;AAFZ;;;AAAA;;;AAAA;AAHF;AAAA;AAcS;;AAAe;;AAAf;AAAP;AAEA;AAC+B;;;;AAD/B;;;AAAA;;;AAAA;AAJD;AAAA", + "op_pc_offset": 0, + "pc_events": { + "1": { + "subroutine": "@algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram", + "params": {}, + "block": "main", + "stack_in": [], + "op": "intcblock 1 0" + }, + "5": { + "op": "pushbytes 0x24378d3c // method \"delete()void\"", + "defined_out": [ + "Method(delete()void)" + ], + "stack_out": [ + "Method(delete()void)" + ] + }, + "11": { + "op": "txna ApplicationArgs 0", + "defined_out": [ + "Method(delete()void)", + "tmp%0#1" + ], + "stack_out": [ + "Method(delete()void)", + "tmp%0#1" + ] + }, + "14": { + "op": "match main_delete_route@2", + "stack_out": [] + }, + "18": { + "block": "main_switch_case_next@3", + "stack_in": [], + "op": "txn OnCompletion", + "defined_out": [ + "tmp%6#0" + ], + "stack_out": [ + "tmp%6#0" + ] + }, + "20": { + "op": "!", + "defined_out": [ + "tmp%7#0" + ], + "stack_out": [ + "tmp%7#0" + ] + }, + "21": { + "error": "OnCompletion must be NoOp", + "op": "assert // OnCompletion must be NoOp", + "stack_out": [] + }, + "22": { + "op": "txn ApplicationID", + "defined_out": [ + "tmp%8#0" + ], + "stack_out": [ + "tmp%8#0" + ] + }, + "24": { + "op": "bz main_create_NoOp@7", + "stack_out": [] + }, + "27": { + "op": "pushbytes 0x65a97bcc // method \"rekey(address)void\"", + "defined_out": [ + "Method(rekey(address)void)" + ], + "stack_out": [ + "Method(rekey(address)void)" + ] + }, + "33": { + "op": "txna ApplicationArgs 0", + "defined_out": [ + "Method(rekey(address)void)", + "tmp%10#0" + ], + "stack_out": [ + "Method(rekey(address)void)", + "tmp%10#0" + ] + }, + "36": { + "op": "match rekey", + "stack_out": [] + }, + "40": { + "op": "err" + }, + "41": { + "block": "main_create_NoOp@7", + "stack_in": [], + "op": "pushbytes 0x8e79358d // method \"create(byte[])void\"", + "defined_out": [ + "Method(create(byte[])void)" + ], + "stack_out": [ + "Method(create(byte[])void)" + ] + }, + "47": { + "op": "txna ApplicationArgs 0", + "defined_out": [ + "Method(create(byte[])void)", + "tmp%11#0" + ], + "stack_out": [ + "Method(create(byte[])void)", + "tmp%11#0" + ] + }, + "50": { + "op": "match create", + "stack_out": [] + }, + "54": { + "op": "err" + }, + "55": { + "block": "main_delete_route@2", + "stack_in": [], + "op": "txn OnCompletion", + "defined_out": [ + "tmp%1#0" + ], + "stack_out": [ + "tmp%1#0" + ] + }, + "57": { + "op": "pushint 5 // DeleteApplication", + "defined_out": [ + "DeleteApplication", + "tmp%1#0" + ], + "stack_out": [ + "tmp%1#0", + "DeleteApplication" + ] + }, + "59": { + "op": "==", + "defined_out": [ + "tmp%2#0" + ], + "stack_out": [ + "tmp%2#0" + ] + }, + "60": { + "op": "txn ApplicationID", + "defined_out": [ + "tmp%2#0", + "tmp%3#0" + ], + "stack_out": [ + "tmp%2#0", + "tmp%3#0" + ] + }, + "62": { + "op": "&&", + "defined_out": [ + "tmp%5#0" + ], + "stack_out": [ + "tmp%5#0" + ] + }, + "63": { + "error": "OnCompletion must be DeleteApplication && can only call when not creating", + "op": "assert // OnCompletion must be DeleteApplication && can only call when not creating", + "stack_out": [] + }, + "64": { + "op": "b delete" + }, + "67": { + "subroutine": "smart_contracts/escrow/contract.algo.ts::Escrow.create[routing]", + "params": {}, + "block": "create", + "stack_in": [], + "op": "txna ApplicationArgs 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] + }, + "70": { + "op": "dup", + "defined_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ] + }, + "71": { + "op": "intc_1 // 0", + "defined_out": [ + "0", + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "tmp%0#0", + "tmp%0#0 (copy)", + "0" + ] + }, + "72": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "aggregate%array_length%0#0" + ] + }, + "73": { + "op": "pushint 2 // 2", + "defined_out": [ + "2", + "aggregate%array_length%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "aggregate%array_length%0#0", + "2" + ] + }, + "75": { + "op": "+", + "defined_out": [ + "add%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "add%0#0" + ] + }, + "76": { + "op": "dig 1", + "stack_out": [ + "tmp%0#0", + "add%0#0", + "tmp%0#0 (copy)" + ] + }, + "78": { + "op": "len", + "defined_out": [ + "add%0#0", + "len%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "add%0#0", + "len%0#0" + ] + }, + "79": { + "op": "==", + "defined_out": [ + "eq%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "eq%0#0" + ] + }, + "80": { + "error": "invalid number of bytes for (len+uint8[])", + "op": "assert // invalid number of bytes for (len+uint8[])", + "stack_out": [ + "tmp%0#0" + ] + }, + "81": { + "op": "extract 2 0", + "defined_out": [ + "creator#0" + ], + "stack_out": [ + "creator#0" + ] + }, + "84": { + "op": "pushbytes \"creator\"", + "defined_out": [ + "\"creator\"", + "creator#0" + ], + "stack_out": [ + "creator#0", + "\"creator\"" + ] + }, + "93": { + "op": "swap", + "stack_out": [ + "\"creator\"", + "creator#0" + ] + }, + "94": { + "op": "app_global_put", + "stack_out": [] + }, + "95": { + "op": "intc_0 // 1", + "defined_out": [ + "1" + ], + "stack_out": [ + "1" + ] + }, + "96": { + "op": "return", + "stack_out": [] + }, + "97": { + "subroutine": "smart_contracts/escrow/contract.algo.ts::Escrow.rekey[routing]", + "params": {}, + "block": "rekey", + "stack_in": [], + "op": "txna ApplicationArgs 1", + "defined_out": [ + "rekeyTo#0" + ], + "stack_out": [ + "rekeyTo#0" + ] + }, + "100": { + "op": "dup", + "defined_out": [ + "rekeyTo#0", + "rekeyTo#0 (copy)" + ], + "stack_out": [ + "rekeyTo#0", + "rekeyTo#0 (copy)" + ] + }, + "101": { + "op": "len", + "defined_out": [ + "len%0#0", + "rekeyTo#0" + ], + "stack_out": [ + "rekeyTo#0", + "len%0#0" + ] + }, + "102": { + "op": "pushint 32 // 32", + "defined_out": [ + "32", + "len%0#0", + "rekeyTo#0" + ], + "stack_out": [ + "rekeyTo#0", + "len%0#0", + "32" + ] + }, + "104": { + "op": "==", + "defined_out": [ + "eq%0#0", + "rekeyTo#0" + ], + "stack_out": [ + "rekeyTo#0", + "eq%0#0" + ] + }, + "105": { + "error": "invalid number of bytes for uint8[32]", + "op": "assert // invalid number of bytes for uint8[32]", + "stack_out": [ + "rekeyTo#0" + ] + }, + "106": { + "op": "txn Sender", + "defined_out": [ + "rekeyTo#0", + "tmp%0#1" + ], + "stack_out": [ + "rekeyTo#0", + "tmp%0#1" + ] + }, + "108": { + "op": "global CreatorAddress", + "defined_out": [ + "rekeyTo#0", + "tmp%0#1", + "tmp%1#1" + ], + "stack_out": [ + "rekeyTo#0", + "tmp%0#1", + "tmp%1#1" + ] + }, + "110": { + "op": "==", + "defined_out": [ + "rekeyTo#0", + "tmp%2#0" + ], + "stack_out": [ + "rekeyTo#0", + "tmp%2#0" + ] + }, + "111": { + "error": "only the creator can rekey an escrow contract", + "op": "assert // only the creator can rekey an escrow contract", + "stack_out": [ + "rekeyTo#0" + ] + }, + "112": { + "op": "itxn_begin" + }, + "113": { + "op": "global CurrentApplicationAddress", + "defined_out": [ + "inner_txn_params%0%%param_Receiver_idx_0#0", + "rekeyTo#0" + ], + "stack_out": [ + "rekeyTo#0", + "inner_txn_params%0%%param_Receiver_idx_0#0" + ] + }, + "115": { + "op": "itxn_field Receiver" + }, + "117": { + "op": "itxn_field RekeyTo", + "stack_out": [] + }, + "119": { + "op": "intc_1 // 0", + "defined_out": [ + "0" + ], + "stack_out": [ + "0" + ] + }, + "120": { + "op": "itxn_field Amount", + "stack_out": [] + }, + "122": { + "op": "intc_0 // 1", + "defined_out": [ + "1" + ], + "stack_out": [ + "1" + ] + }, + "123": { + "op": "itxn_field TypeEnum", + "stack_out": [] + }, + "125": { + "op": "intc_1 // 0", + "stack_out": [ + "0" + ] + }, + "126": { + "op": "itxn_field Fee", + "stack_out": [] + }, + "128": { + "op": "itxn_submit" + }, + "129": { + "op": "intc_0 // 1", + "stack_out": [ + "1" + ] + }, + "130": { + "op": "return", + "stack_out": [] + }, + "131": { + "subroutine": "smart_contracts/escrow/contract.algo.ts::Escrow.delete[routing]", + "params": {}, + "block": "delete", + "stack_in": [], + "op": "txn Sender", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] + }, + "133": { + "op": "global CreatorAddress", + "defined_out": [ + "tmp%0#0", + "tmp%1#0" + ], + "stack_out": [ + "tmp%0#0", + "tmp%1#0" + ] + }, + "135": { + "op": "==", + "defined_out": [ + "tmp%2#0" + ], + "stack_out": [ + "tmp%2#0" + ] + }, + "136": { + "error": "only the factory can delete an escrow contract", + "op": "assert // only the factory can delete an escrow contract", + "stack_out": [] + }, + "137": { + "op": "itxn_begin" + }, + "138": { + "op": "global CreatorAddress", + "defined_out": [ + "inner_txn_params%0%%param_CloseRemainderTo_idx_0#0" + ], + "stack_out": [ + "inner_txn_params%0%%param_CloseRemainderTo_idx_0#0" + ] + }, + "140": { + "op": "itxn_field CloseRemainderTo", + "stack_out": [] + }, + "142": { + "op": "intc_0 // 1", + "defined_out": [ + "1" + ], + "stack_out": [ + "1" + ] + }, + "143": { + "op": "itxn_field TypeEnum", + "stack_out": [] + }, + "145": { + "op": "intc_1 // 0", + "defined_out": [ + "0" + ], + "stack_out": [ + "0" + ] + }, + "146": { + "op": "itxn_field Fee", + "stack_out": [] + }, + "148": { + "op": "itxn_submit" + }, + "149": { + "op": "intc_0 // 1", + "stack_out": [ + "1" + ] + }, + "150": { + "op": "return", + "stack_out": [] + } + } +} \ No newline at end of file diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/Escrow.approval.teal b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/Escrow.approval.teal new file mode 100644 index 000000000..10e193922 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/Escrow.approval.teal @@ -0,0 +1,166 @@ +#pragma version 11 +#pragma typetrack false + +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: + intcblock 1 0 + // smart_contracts/escrow/contract.algo.ts:6 + // export class Escrow extends Contract { + pushbytes 0x24378d3c // method "delete()void" + txna ApplicationArgs 0 + match main_delete_route@2 + +main_switch_case_next@3: + // smart_contracts/escrow/contract.algo.ts:6 + // export class Escrow extends Contract { + txn OnCompletion + ! + assert // OnCompletion must be NoOp + txn ApplicationID + bz main_create_NoOp@7 + pushbytes 0x65a97bcc // method "rekey(address)void" + txna ApplicationArgs 0 + match rekey + err + +main_create_NoOp@7: + // smart_contracts/escrow/contract.algo.ts:6 + // export class Escrow extends Contract { + pushbytes 0x8e79358d // method "create(byte[])void" + txna ApplicationArgs 0 + match create + err + +main_delete_route@2: + // smart_contracts/escrow/contract.algo.ts:27 + // @abimethod({ allowActions: 'DeleteApplication' }) + txn OnCompletion + pushint 5 // DeleteApplication + == + txn ApplicationID + && + assert // OnCompletion must be DeleteApplication && can only call when not creating + b delete + + +// smart_contracts/escrow/contract.algo.ts::Escrow.create[routing]() -> void: +create: + // smart_contracts/escrow/contract.algo.ts:10 + // @abimethod({ onCreate: 'require' }) + txna ApplicationArgs 1 + dup + intc_1 // 0 + extract_uint16 + pushint 2 // 2 + + + dig 1 + len + == + assert // invalid number of bytes for (len+uint8[]) + extract 2 0 + // smart_contracts/escrow/contract.algo.ts:8 + // creator = GlobalState({ key: EscrowGlobalStateKeysCreator }) + pushbytes "creator" + // smart_contracts/escrow/contract.algo.ts:12 + // this.creator.value = creator + swap + app_global_put + // smart_contracts/escrow/contract.algo.ts:10 + // @abimethod({ onCreate: 'require' }) + intc_0 // 1 + return + + +// smart_contracts/escrow/contract.algo.ts::Escrow.rekey[routing]() -> void: +rekey: + // smart_contracts/escrow/contract.algo.ts:15 + // rekey(rekeyTo: Account): void { + txna ApplicationArgs 1 + dup + len + pushint 32 // 32 + == + assert // invalid number of bytes for uint8[32] + // smart_contracts/escrow/contract.algo.ts:16 + // assert(Txn.sender === Global.creatorAddress, ERR_ONLY_CREATOR_CAN_REKEY) + txn Sender + global CreatorAddress + == + assert // only the creator can rekey an escrow contract + // smart_contracts/escrow/contract.algo.ts:18-24 + // itxn + // .payment({ + // amount: 0, + // receiver: Global.currentApplicationAddress, + // rekeyTo + // }) + // .submit() + itxn_begin + // smart_contracts/escrow/contract.algo.ts:21 + // receiver: Global.currentApplicationAddress, + global CurrentApplicationAddress + itxn_field Receiver + itxn_field RekeyTo + // smart_contracts/escrow/contract.algo.ts:20 + // amount: 0, + intc_1 // 0 + itxn_field Amount + // smart_contracts/escrow/contract.algo.ts:18-23 + // itxn + // .payment({ + // amount: 0, + // receiver: Global.currentApplicationAddress, + // rekeyTo + // }) + intc_0 // 1 + itxn_field TypeEnum + intc_1 // 0 + itxn_field Fee + // smart_contracts/escrow/contract.algo.ts:18-24 + // itxn + // .payment({ + // amount: 0, + // receiver: Global.currentApplicationAddress, + // rekeyTo + // }) + // .submit() + itxn_submit + // smart_contracts/escrow/contract.algo.ts:15 + // rekey(rekeyTo: Account): void { + intc_0 // 1 + return + + +// smart_contracts/escrow/contract.algo.ts::Escrow.delete[routing]() -> void: +delete: + // smart_contracts/escrow/contract.algo.ts:29 + // assert(Txn.sender === Global.creatorAddress, ERR_ONLY_FACTORY_CAN_DELETE) + txn Sender + global CreatorAddress + == + assert // only the factory can delete an escrow contract + // smart_contracts/escrow/contract.algo.ts:31-33 + // itxn + // .payment({ closeRemainderTo: Global.creatorAddress }) + // .submit() + itxn_begin + // smart_contracts/escrow/contract.algo.ts:32 + // .payment({ closeRemainderTo: Global.creatorAddress }) + global CreatorAddress + itxn_field CloseRemainderTo + // smart_contracts/escrow/contract.algo.ts:31-32 + // itxn + // .payment({ closeRemainderTo: Global.creatorAddress }) + intc_0 // 1 + itxn_field TypeEnum + intc_1 // 0 + itxn_field Fee + // smart_contracts/escrow/contract.algo.ts:31-33 + // itxn + // .payment({ closeRemainderTo: Global.creatorAddress }) + // .submit() + itxn_submit + // smart_contracts/escrow/contract.algo.ts:27 + // @abimethod({ allowActions: 'DeleteApplication' }) + intc_0 // 1 + return diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/Escrow.arc32.json b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/Escrow.arc32.json new file mode 100644 index 000000000..558d81ae4 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/Escrow.arc32.json @@ -0,0 +1,89 @@ +{ + "hints": { + "create(byte[])void": { + "call_config": { + "no_op": "CREATE" + } + }, + "rekey(address)void": { + "call_config": { + "no_op": "CALL" + } + }, + "delete()void": { + "call_config": { + "delete_application": "CALL" + } + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEVzY3JvdyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHB1c2hieXRlcyAweDI0Mzc4ZDNjIC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9kZWxldGVfcm91dGVAMgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEVzY3JvdyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYnogbWFpbl9jcmVhdGVfTm9PcEA3CiAgICBwdXNoYnl0ZXMgMHg2NWE5N2JjYyAvLyBtZXRob2QgInJla2V5KGFkZHJlc3Mpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIHJla2V5CiAgICBlcnIKCm1haW5fY3JlYXRlX05vT3BANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgRXNjcm93IGV4dGVuZHMgQ29udHJhY3QgewogICAgcHVzaGJ5dGVzIDB4OGU3OTM1OGQgLy8gbWV0aG9kICJjcmVhdGUoYnl0ZVtdKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBjcmVhdGUKICAgIGVycgoKbWFpbl9kZWxldGVfcm91dGVAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QuYWxnby50czoyNwogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ0RlbGV0ZUFwcGxpY2F0aW9uJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICA9PQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgRGVsZXRlQXBwbGljYXRpb24gJiYgY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYiBkZWxldGUKCgovLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6OkVzY3Jvdy5jcmVhdGVbcm91dGluZ10oKSAtPiB2b2lkOgpjcmVhdGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MTAKICAgIC8vIEBhYmltZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgcHVzaGludCAyIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdWludDhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6OAogICAgLy8gY3JlYXRvciA9IEdsb2JhbFN0YXRlPGJ5dGVzPih7IGtleTogRXNjcm93R2xvYmFsU3RhdGVLZXlzQ3JlYXRvciB9KQogICAgcHVzaGJ5dGVzICJjcmVhdG9yIgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjEyCiAgICAvLyB0aGlzLmNyZWF0b3IudmFsdWUgPSBjcmVhdG9yCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjEwCiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QuYWxnby50czo6RXNjcm93LnJla2V5W3JvdXRpbmddKCkgLT4gdm9pZDoKcmVrZXk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MTUKICAgIC8vIHJla2V5KHJla2V5VG86IEFjY291bnQpOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDMyIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50OFszMl0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QuYWxnby50czoxNgogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IEdsb2JhbC5jcmVhdG9yQWRkcmVzcywgRVJSX09OTFlfQ1JFQVRPUl9DQU5fUkVLRVkpCiAgICB0eG4gU2VuZGVyCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gb25seSB0aGUgY3JlYXRvciBjYW4gcmVrZXkgYW4gZXNjcm93IGNvbnRyYWN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MTgtMjQKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIGFtb3VudDogMCwKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgcmVrZXlUbwogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QuYWxnby50czoyMQogICAgLy8gcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgUmVrZXlUbwogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyBhbW91bnQ6IDAsCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QuYWxnby50czoxOC0yMwogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgYW1vdW50OiAwLAogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICByZWtleVRvCiAgICAvLyAgIH0pCiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MTgtMjQKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIGFtb3VudDogMCwKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgcmVrZXlUbwogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MTUKICAgIC8vIHJla2V5KHJla2V5VG86IEFjY291bnQpOiB2b2lkIHsKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6OkVzY3Jvdy5kZWxldGVbcm91dGluZ10oKSAtPiB2b2lkOgpkZWxldGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MjkKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSBHbG9iYWwuY3JlYXRvckFkZHJlc3MsIEVSUl9PTkxZX0ZBQ1RPUllfQ0FOX0RFTEVURSkKICAgIHR4biBTZW5kZXIKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBvbmx5IHRoZSBmYWN0b3J5IGNhbiBkZWxldGUgYW4gZXNjcm93IGNvbnRyYWN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MzEtMzMKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoeyBjbG9zZVJlbWFpbmRlclRvOiBHbG9iYWwuY3JlYXRvckFkZHJlc3MgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MzIKICAgIC8vIC5wYXltZW50KHsgY2xvc2VSZW1haW5kZXJUbzogR2xvYmFsLmNyZWF0b3JBZGRyZXNzIH0pCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgIGl0eG5fZmllbGQgQ2xvc2VSZW1haW5kZXJUbwogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjMxLTMyCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsgY2xvc2VSZW1haW5kZXJUbzogR2xvYmFsLmNyZWF0b3JBZGRyZXNzIH0pCiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MzEtMzMKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoeyBjbG9zZVJlbWFpbmRlclRvOiBHbG9iYWwuY3JlYXRvckFkZHJlc3MgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnRGVsZXRlQXBwbGljYXRpb24nIH0pCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "state": { + "global": { + "num_byte_slices": 1, + "num_uints": 0 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "schema": { + "global": { + "declared": { + "creator": { + "type": "bytes", + "key": "creator" + } + }, + "reserved": {} + }, + "local": { + "declared": {}, + "reserved": {} + } + }, + "contract": { + "name": "Escrow", + "methods": [ + { + "name": "create", + "args": [ + { + "type": "byte[]", + "name": "creator" + } + ], + "readonly": false, + "returns": { + "type": "void" + } + }, + { + "name": "rekey", + "args": [ + { + "type": "address", + "name": "rekeyTo" + } + ], + "readonly": false, + "returns": { + "type": "void" + } + }, + { + "name": "delete", + "args": [], + "readonly": false, + "returns": { + "type": "void" + } + } + ], + "networks": {} + }, + "bare_call_config": {} +} \ No newline at end of file diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/Escrow.arc56.json b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/Escrow.arc56.json new file mode 100644 index 000000000..4cd98b76e --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/Escrow.arc56.json @@ -0,0 +1,166 @@ +{ + "name": "Escrow", + "structs": {}, + "methods": [ + { + "name": "create", + "args": [ + { + "type": "byte[]", + "name": "creator" + } + ], + "returns": { + "type": "void" + }, + "actions": { + "create": [ + "NoOp" + ], + "call": [] + }, + "readonly": false, + "events": [], + "recommendations": {} + }, + { + "name": "rekey", + "args": [ + { + "type": "address", + "name": "rekeyTo" + } + ], + "returns": { + "type": "void" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + }, + { + "name": "delete", + "args": [], + "returns": { + "type": "void" + }, + "actions": { + "create": [], + "call": [ + "DeleteApplication" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + } + ], + "arcs": [ + 22, + 28 + ], + "networks": {}, + "state": { + "schema": { + "global": { + "ints": 0, + "bytes": 1 + }, + "local": { + "ints": 0, + "bytes": 0 + } + }, + "keys": { + "global": { + "creator": { + "keyType": "AVMString", + "valueType": "AVMBytes", + "key": "Y3JlYXRvcg==" + } + }, + "local": {}, + "box": {} + }, + "maps": { + "global": {}, + "local": {}, + "box": {} + } + }, + "bareActions": { + "create": [], + "call": [] + }, + "sourceInfo": { + "approval": { + "sourceInfo": [ + { + "pc": [ + 63 + ], + "errorMessage": "OnCompletion must be DeleteApplication && can only call when not creating" + }, + { + "pc": [ + 21 + ], + "errorMessage": "OnCompletion must be NoOp" + }, + { + "pc": [ + 80 + ], + "errorMessage": "invalid number of bytes for (len+uint8[])" + }, + { + "pc": [ + 105 + ], + "errorMessage": "invalid number of bytes for uint8[32]" + }, + { + "pc": [ + 111 + ], + "errorMessage": "only the creator can rekey an escrow contract" + }, + { + "pc": [ + 136 + ], + "errorMessage": "only the factory can delete an escrow contract" + } + ], + "pcOffsetMethod": "none" + }, + "clear": { + "sourceInfo": [], + "pcOffsetMethod": "none" + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEVzY3JvdyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHB1c2hieXRlcyAweDI0Mzc4ZDNjIC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9kZWxldGVfcm91dGVAMgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEVzY3JvdyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYnogbWFpbl9jcmVhdGVfTm9PcEA3CiAgICBwdXNoYnl0ZXMgMHg2NWE5N2JjYyAvLyBtZXRob2QgInJla2V5KGFkZHJlc3Mpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIHJla2V5CiAgICBlcnIKCm1haW5fY3JlYXRlX05vT3BANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgRXNjcm93IGV4dGVuZHMgQ29udHJhY3QgewogICAgcHVzaGJ5dGVzIDB4OGU3OTM1OGQgLy8gbWV0aG9kICJjcmVhdGUoYnl0ZVtdKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBjcmVhdGUKICAgIGVycgoKbWFpbl9kZWxldGVfcm91dGVAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QuYWxnby50czoyNwogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ0RlbGV0ZUFwcGxpY2F0aW9uJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICA9PQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgRGVsZXRlQXBwbGljYXRpb24gJiYgY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYiBkZWxldGUKCgovLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6OkVzY3Jvdy5jcmVhdGVbcm91dGluZ10oKSAtPiB2b2lkOgpjcmVhdGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MTAKICAgIC8vIEBhYmltZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgcHVzaGludCAyIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdWludDhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6OAogICAgLy8gY3JlYXRvciA9IEdsb2JhbFN0YXRlPGJ5dGVzPih7IGtleTogRXNjcm93R2xvYmFsU3RhdGVLZXlzQ3JlYXRvciB9KQogICAgcHVzaGJ5dGVzICJjcmVhdG9yIgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjEyCiAgICAvLyB0aGlzLmNyZWF0b3IudmFsdWUgPSBjcmVhdG9yCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjEwCiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QuYWxnby50czo6RXNjcm93LnJla2V5W3JvdXRpbmddKCkgLT4gdm9pZDoKcmVrZXk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MTUKICAgIC8vIHJla2V5KHJla2V5VG86IEFjY291bnQpOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDMyIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50OFszMl0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QuYWxnby50czoxNgogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IEdsb2JhbC5jcmVhdG9yQWRkcmVzcywgRVJSX09OTFlfQ1JFQVRPUl9DQU5fUkVLRVkpCiAgICB0eG4gU2VuZGVyCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gb25seSB0aGUgY3JlYXRvciBjYW4gcmVrZXkgYW4gZXNjcm93IGNvbnRyYWN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MTgtMjQKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIGFtb3VudDogMCwKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgcmVrZXlUbwogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QuYWxnby50czoyMQogICAgLy8gcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgUmVrZXlUbwogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyBhbW91bnQ6IDAsCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QuYWxnby50czoxOC0yMwogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgYW1vdW50OiAwLAogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICByZWtleVRvCiAgICAvLyAgIH0pCiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MTgtMjQKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIGFtb3VudDogMCwKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgcmVrZXlUbwogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MTUKICAgIC8vIHJla2V5KHJla2V5VG86IEFjY291bnQpOiB2b2lkIHsKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6OkVzY3Jvdy5kZWxldGVbcm91dGluZ10oKSAtPiB2b2lkOgpkZWxldGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MjkKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSBHbG9iYWwuY3JlYXRvckFkZHJlc3MsIEVSUl9PTkxZX0ZBQ1RPUllfQ0FOX0RFTEVURSkKICAgIHR4biBTZW5kZXIKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBvbmx5IHRoZSBmYWN0b3J5IGNhbiBkZWxldGUgYW4gZXNjcm93IGNvbnRyYWN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MzEtMzMKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoeyBjbG9zZVJlbWFpbmRlclRvOiBHbG9iYWwuY3JlYXRvckFkZHJlc3MgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MzIKICAgIC8vIC5wYXltZW50KHsgY2xvc2VSZW1haW5kZXJUbzogR2xvYmFsLmNyZWF0b3JBZGRyZXNzIH0pCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgIGl0eG5fZmllbGQgQ2xvc2VSZW1haW5kZXJUbwogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjMxLTMyCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsgY2xvc2VSZW1haW5kZXJUbzogR2xvYmFsLmNyZWF0b3JBZGRyZXNzIH0pCiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MzEtMzMKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoeyBjbG9zZVJlbWFpbmRlclRvOiBHbG9iYWwuY3JlYXRvckFkZHJlc3MgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnRGVsZXRlQXBwbGljYXRpb24nIH0pCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CyACAQCABCQ3jTw2GgCOAQAlMRkURDEYQQAOgARlqXvMNhoAjgEAOQCABI55NY02GgCOAQANADEZgQUSMRgQREIAQDYaAUkjWYECCEsBFRJEVwIAgAdjcmVhdG9yTGciQzYaAUkVgSASRDEAMgkSRLEyCrIHsiAjsggishAjsgGzIkMxADIJEkSxMgmyCSKyECOyAbMiQw==", + "clear": "C4EBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 5, + "minor": 2, + "patch": 0 + } + }, + "events": [], + "templateVariables": {} +} \ No newline at end of file diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/Escrow.clear.puya.map b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/Escrow.clear.puya.map new file mode 100644 index 000000000..bf29998bd --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/Escrow.clear.puya.map @@ -0,0 +1,25 @@ +{ + "version": 3, + "sources": [], + "mappings": ";;;", + "op_pc_offset": 0, + "pc_events": { + "1": { + "subroutine": "@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram", + "params": {}, + "block": "main", + "stack_in": [], + "op": "pushint 1 // 1", + "defined_out": [ + "1" + ], + "stack_out": [ + "1" + ] + }, + "3": { + "op": "return", + "stack_out": [] + } + } +} \ No newline at end of file diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/Escrow.clear.teal b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/Escrow.clear.teal new file mode 100644 index 000000000..42f81b0f1 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/Escrow.clear.teal @@ -0,0 +1,7 @@ +#pragma version 11 +#pragma typetrack false + +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: + pushint 1 // 1 + return diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/EscrowClient.ts b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/EscrowClient.ts new file mode 100644 index 000000000..5032bee46 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/EscrowClient.ts @@ -0,0 +1,780 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^7 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, AppReturn, SendAppTransactionResult } from '@algorandfoundation/algokit-utils/types/app' +import { Arc56Contract, getArc56ReturnValue, getABIStructFromABITuple } from '@algorandfoundation/algokit-utils/types/app-arc56' +import { + AppClient as _AppClient, + AppClientMethodCallParams, + AppClientParams, + AppClientBareCallParams, + CallOnComplete, + AppClientCompilationParams, + ResolveAppClientByCreatorAndName, + ResolveAppClientByNetwork, + CloneAppClientParams, +} from '@algorandfoundation/algokit-utils/types/app-client' +import { AppFactory as _AppFactory, AppFactoryAppClientParams, AppFactoryResolveAppClientByCreatorAndNameParams, AppFactoryDeployParams, AppFactoryParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, AppCallMethodCall, AppMethodCallTransactionArgument, SimulateOptions, RawSimulateOptions, SkipSignaturesSimulateOptions } from '@algorandfoundation/algokit-utils/types/composer' +import { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { Address, encodeAddress, modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk' + +export const APP_SPEC: Arc56Contract = {"name":"Escrow","structs":{},"methods":[{"name":"create","args":[{"type":"byte[]","name":"creator"}],"returns":{"type":"void"},"actions":{"create":["NoOp"],"call":[]},"readonly":false,"events":[],"recommendations":{}},{"name":"rekey","args":[{"type":"address","name":"rekeyTo"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"delete","args":[],"returns":{"type":"void"},"actions":{"create":[],"call":["DeleteApplication"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":1},"local":{"ints":0,"bytes":0}},"keys":{"global":{"creator":{"keyType":"AVMString","valueType":"AVMBytes","key":"Y3JlYXRvcg=="}},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":[],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[63],"errorMessage":"OnCompletion must be DeleteApplication && can only call when not creating"},{"pc":[21],"errorMessage":"OnCompletion must be NoOp"},{"pc":[80],"errorMessage":"invalid number of bytes for (len+uint8[])"},{"pc":[105],"errorMessage":"invalid number of bytes for uint8[32]"},{"pc":[111],"errorMessage":"only the creator can rekey an escrow contract"},{"pc":[136],"errorMessage":"only the factory can delete an escrow contract"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEVzY3JvdyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHB1c2hieXRlcyAweDI0Mzc4ZDNjIC8vIG1ldGhvZCAiZGVsZXRlKCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9kZWxldGVfcm91dGVAMgoKbWFpbl9zd2l0Y2hfY2FzZV9uZXh0QDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIEVzY3JvdyBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYnogbWFpbl9jcmVhdGVfTm9PcEA3CiAgICBwdXNoYnl0ZXMgMHg2NWE5N2JjYyAvLyBtZXRob2QgInJla2V5KGFkZHJlc3Mpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIHJla2V5CiAgICBlcnIKCm1haW5fY3JlYXRlX05vT3BANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QuYWxnby50czo2CiAgICAvLyBleHBvcnQgY2xhc3MgRXNjcm93IGV4dGVuZHMgQ29udHJhY3QgewogICAgcHVzaGJ5dGVzIDB4OGU3OTM1OGQgLy8gbWV0aG9kICJjcmVhdGUoYnl0ZVtdKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBjcmVhdGUKICAgIGVycgoKbWFpbl9kZWxldGVfcm91dGVAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QuYWxnby50czoyNwogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogJ0RlbGV0ZUFwcGxpY2F0aW9uJyB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICA9PQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgRGVsZXRlQXBwbGljYXRpb24gJiYgY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYiBkZWxldGUKCgovLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6OkVzY3Jvdy5jcmVhdGVbcm91dGluZ10oKSAtPiB2b2lkOgpjcmVhdGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MTAKICAgIC8vIEBhYmltZXRob2QoeyBvbkNyZWF0ZTogJ3JlcXVpcmUnIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgcHVzaGludCAyIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdWludDhbXSkKICAgIGV4dHJhY3QgMiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6OAogICAgLy8gY3JlYXRvciA9IEdsb2JhbFN0YXRlPGJ5dGVzPih7IGtleTogRXNjcm93R2xvYmFsU3RhdGVLZXlzQ3JlYXRvciB9KQogICAgcHVzaGJ5dGVzICJjcmVhdG9yIgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjEyCiAgICAvLyB0aGlzLmNyZWF0b3IudmFsdWUgPSBjcmVhdG9yCiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjEwCiAgICAvLyBAYWJpbWV0aG9kKHsgb25DcmVhdGU6ICdyZXF1aXJlJyB9KQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QuYWxnby50czo6RXNjcm93LnJla2V5W3JvdXRpbmddKCkgLT4gdm9pZDoKcmVrZXk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MTUKICAgIC8vIHJla2V5KHJla2V5VG86IEFjY291bnQpOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDMyIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50OFszMl0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QuYWxnby50czoxNgogICAgLy8gYXNzZXJ0KFR4bi5zZW5kZXIgPT09IEdsb2JhbC5jcmVhdG9yQWRkcmVzcywgRVJSX09OTFlfQ1JFQVRPUl9DQU5fUkVLRVkpCiAgICB0eG4gU2VuZGVyCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gb25seSB0aGUgY3JlYXRvciBjYW4gcmVrZXkgYW4gZXNjcm93IGNvbnRyYWN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MTgtMjQKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIGFtb3VudDogMCwKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgcmVrZXlUbwogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QuYWxnby50czoyMQogICAgLy8gcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgUmVrZXlUbwogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyBhbW91bnQ6IDAsCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvY29udHJhY3QuYWxnby50czoxOC0yMwogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgYW1vdW50OiAwLAogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICByZWtleVRvCiAgICAvLyAgIH0pCiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MTgtMjQKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIGFtb3VudDogMCwKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgcmVrZXlUbwogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MTUKICAgIC8vIHJla2V5KHJla2V5VG86IEFjY291bnQpOiB2b2lkIHsKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6OkVzY3Jvdy5kZWxldGVbcm91dGluZ10oKSAtPiB2b2lkOgpkZWxldGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MjkKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSBHbG9iYWwuY3JlYXRvckFkZHJlc3MsIEVSUl9PTkxZX0ZBQ1RPUllfQ0FOX0RFTEVURSkKICAgIHR4biBTZW5kZXIKICAgIGdsb2JhbCBDcmVhdG9yQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBvbmx5IHRoZSBmYWN0b3J5IGNhbiBkZWxldGUgYW4gZXNjcm93IGNvbnRyYWN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MzEtMzMKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoeyBjbG9zZVJlbWFpbmRlclRvOiBHbG9iYWwuY3JlYXRvckFkZHJlc3MgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MzIKICAgIC8vIC5wYXltZW50KHsgY2xvc2VSZW1haW5kZXJUbzogR2xvYmFsLmNyZWF0b3JBZGRyZXNzIH0pCiAgICBnbG9iYWwgQ3JlYXRvckFkZHJlc3MKICAgIGl0eG5fZmllbGQgQ2xvc2VSZW1haW5kZXJUbwogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjMxLTMyCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsgY2xvc2VSZW1haW5kZXJUbzogR2xvYmFsLmNyZWF0b3JBZGRyZXNzIH0pCiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2NvbnRyYWN0LmFsZ28udHM6MzEtMzMKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoeyBjbG9zZVJlbWFpbmRlclRvOiBHbG9iYWwuY3JlYXRvckFkZHJlc3MgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiAnRGVsZXRlQXBwbGljYXRpb24nIH0pCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCg==","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CyACAQCABCQ3jTw2GgCOAQAlMRkURDEYQQAOgARlqXvMNhoAjgEAOQCABI55NY02GgCOAQANADEZgQUSMRgQREIAQDYaAUkjWYECCEsBFRJEVwIAgAdjcmVhdG9yTGciQzYaAUkVgSASRDEAMgkSRLEyCrIHsiAjsggishAjsgGzIkMxADIJEkSxMgmyCSKyECOyAbMiQw==","clear":"C4EBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * The argument types for the Escrow contract + */ +export type EscrowArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'create(byte[])void': { + creator: Uint8Array + } + 'rekey(address)void': { + rekeyTo: string + } + 'delete()void': Record + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'create(byte[])void': [creator: Uint8Array] + 'rekey(address)void': [rekeyTo: string] + 'delete()void': [] + } +} + +/** + * The return type for each method + */ +export type EscrowReturns = { + 'create(byte[])void': void + 'rekey(address)void': void + 'delete()void': void +} + +/** + * Defines the types of available calls and state of the Escrow smart contract. + */ +export type EscrowTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'create(byte[])void' | 'create', { + argsObj: EscrowArgs['obj']['create(byte[])void'] + argsTuple: EscrowArgs['tuple']['create(byte[])void'] + returns: EscrowReturns['create(byte[])void'] + }> + & Record<'rekey(address)void' | 'rekey', { + argsObj: EscrowArgs['obj']['rekey(address)void'] + argsTuple: EscrowArgs['tuple']['rekey(address)void'] + returns: EscrowReturns['rekey(address)void'] + }> + & Record<'delete()void' | 'delete', { + argsObj: EscrowArgs['obj']['delete()void'] + argsTuple: EscrowArgs['tuple']['delete()void'] + returns: EscrowReturns['delete()void'] + }> + /** + * Defines the shape of the state of the application. + */ + state: { + global: { + keys: { + creator: BinaryState + } + maps: {} + } + } +} + +/** + * Defines the possible abi call signatures. + */ +export type EscrowSignatures = keyof EscrowTypes['methods'] +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the Escrow smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = EscrowTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the Escrow smart contract to the method's return type + */ +export type MethodReturn = EscrowTypes['methods'][TSignature]['returns'] + +/** + * Defines the shape of the keyed global state of the application. + */ +export type GlobalKeysState = EscrowTypes['state']['global']['keys'] + + +/** + * Defines supported create method params for this smart contract + */ +export type EscrowCreateCallParams = + | Expand & {method: 'create'} & {onComplete?: OnApplicationComplete.NoOpOC} & CreateSchema> + | Expand & {method: 'create(byte[])void'} & {onComplete?: OnApplicationComplete.NoOpOC} & CreateSchema> +/** + * Defines supported delete method params for this smart contract + */ +export type EscrowDeleteCallParams = + | Expand & {method: 'delete'}> + | Expand & {method: 'delete()void'}> +/** + * Defines arguments required for the deploy method. + */ +export type EscrowDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: EscrowCreateCallParams + /** + * Delete transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + deleteParams?: EscrowDeleteCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the Escrow smart contract + */ +export abstract class EscrowParamsFactory { + /** + * Gets available create ABI call param factories + */ + static get create() { + return { + _resolveByMethod(params: TParams) { + switch(params.method) { + case 'create': + case 'create(byte[])void': + return EscrowParamsFactory.create.create(params) + } + throw new Error(`Unknown ' + verb + ' method`) + }, + + /** + * Constructs create ABI call params for the Escrow smart contract using the create(byte[])void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + create(params: CallParams & AppClientCompilationParams & {onComplete?: OnApplicationComplete.NoOpOC}): AppClientMethodCallParams & AppClientCompilationParams & {onComplete?: OnApplicationComplete.NoOpOC} { + return { + ...params, + method: 'create(byte[])void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.creator], + } + }, + } + } + + /** + * Gets available delete ABI call param factories + */ + static get delete() { + return { + _resolveByMethod(params: TParams) { + switch(params.method) { + case 'delete': + case 'delete()void': + return EscrowParamsFactory.delete.delete(params) + } + throw new Error(`Unknown ' + verb + ' method`) + }, + + /** + * Constructs delete ABI call params for the Escrow smart contract using the delete()void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + delete(params: CallParams): AppClientMethodCallParams { + return { + ...params, + method: 'delete()void' as const, + args: Array.isArray(params.args) ? params.args : [], + } + }, + } + } + + /** + * Constructs a no op call for the rekey(address)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static rekey(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'rekey(address)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.rekeyTo], + } + } +} + +/** + * A factory to create and deploy one or more instance of the Escrow smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class EscrowFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `EscrowFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new EscrowClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new EscrowClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the Escrow smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: EscrowDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + createParams: params.createParams?.method ? EscrowParamsFactory.create._resolveByMethod(params.createParams) : params.createParams ? params.createParams as (EscrowCreateCallParams & { args: Uint8Array[] }) : undefined, + deleteParams: params.deleteParams?.method ? EscrowParamsFactory.delete._resolveByMethod(params.deleteParams) : params.deleteParams ? params.deleteParams as (EscrowDeleteCallParams & { args: Uint8Array[] }) : undefined, + }) + return { result: result.result, appClient: new EscrowClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the Escrow smart contract using the create(byte[])void ABI method. + * + * @param params The params for the smart contract call + * @returns The create params + */ + create: (params: CallParams & AppClientCompilationParams & CreateSchema & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appFactory.params.create(EscrowParamsFactory.create.create(params)) + }, + }, + + /** + * Gets available deployDelete methods + */ + deployDelete: { + /** + * Deletes an existing instance of the Escrow smart contract using the delete()void ABI method. + * + * @param params The params for the smart contract call + * @returns The deployDelete params + */ + delete: (params: CallParams = {args: []}) => { + return this.appFactory.params.deployDelete(EscrowParamsFactory.delete.delete(params)) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the Escrow smart contract using the create(byte[])void ABI method. + * + * @param params The params for the smart contract call + * @returns The create transaction + */ + create: (params: CallParams & AppClientCompilationParams & CreateSchema & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appFactory.createTransaction.create(EscrowParamsFactory.create.create(params)) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the Escrow smart contract using an ABI method call using the create(byte[])void ABI method. + * + * @param params The params for the smart contract call + * @returns The create result + */ + create: async (params: CallParams & AppClientCompilationParams & CreateSchema & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appFactory.send.create(EscrowParamsFactory.create.create(params)) + return { result: { ...result.result, return: result.result.return as unknown as (undefined | EscrowReturns['create(byte[])void']) }, appClient: new EscrowClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the Escrow smart contract + */ +export class EscrowClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `EscrowClient` + * + * @param appClient An `AppClient` instance which has been created with the Escrow app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `EscrowClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `EscrowClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new EscrowClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `EscrowClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new EscrowClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available delete methods + */ + delete: { + /** + * Deletes an existing instance of the Escrow smart contract using the `delete()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The delete params + */ + delete: (params: CallParams = {args: []}) => { + return this.appClient.params.delete(EscrowParamsFactory.delete.delete(params)) + }, + + }, + + /** + * Makes a clear_state call to an existing instance of the Escrow smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the Escrow smart contract using the `rekey(address)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + rekey: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(EscrowParamsFactory.rekey(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available delete methods + */ + delete: { + /** + * Deletes an existing instance of the Escrow smart contract using the `delete()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The delete transaction + */ + delete: (params: CallParams = {args: []}) => { + return this.appClient.createTransaction.delete(EscrowParamsFactory.delete.delete(params)) + }, + + }, + + /** + * Makes a clear_state call to an existing instance of the Escrow smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the Escrow smart contract using the `rekey(address)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + rekey: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(EscrowParamsFactory.rekey(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available delete methods + */ + delete: { + /** + * Deletes an existing instance of the Escrow smart contract using the `delete()void` ABI method. + * + * @param params The params for the smart contract call + * @returns The delete result + */ + delete: async (params: CallParams & SendParams = {args: []}) => { + const result = await this.appClient.send.delete(EscrowParamsFactory.delete.delete(params)) + return {...result, return: result.return as unknown as (undefined | EscrowReturns['delete()void'])} + }, + + }, + + /** + * Makes a clear_state call to an existing instance of the Escrow smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the Escrow smart contract using the `rekey(address)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + rekey: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(EscrowParamsFactory.rekey(params)) + return {...result, return: result.return as unknown as (undefined | EscrowReturns['rekey(address)void'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new EscrowClient(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current Escrow app + */ + state = { + /** + * Methods to access global state for the current Escrow app + */ + global: { + /** + * Get all current keyed values from global state + */ + getAll: async (): Promise>> => { + const result = await this.appClient.state.global.getAll() + return { + creator: new BinaryStateValue(result.creator), + } + }, + /** + * Get the current value of the creator key in global state + */ + creator: async (): Promise => { return new BinaryStateValue((await this.appClient.state.global.getValue("creator")) as Uint8Array | undefined) }, + }, + } + + public newGroup(): EscrowComposer { + const client = this + const composer = this.algorand.newGroup() + let promiseChain:Promise = Promise.resolve() + const resultMappers: Array any)> = [] + return { + /** + * Add a rekey(address)void method call against the Escrow contract + */ + rekey(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.rekey(params))) + resultMappers.push(undefined) + return this + }, + get delete() { + return { + delete: (params: CallParams) => { + promiseChain = promiseChain.then(async () => composer.addAppDeleteMethodCall(await client.params.delete.delete(params))) + resultMappers.push(undefined) + return this + }, + } + }, + /** + * Add a clear state call to the Escrow contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue) + } + } + } as unknown as EscrowComposer + } +} +export type EscrowComposer = { + /** + * Calls the rekey(address)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + rekey(params?: CallParams): EscrowComposer<[...TReturns, EscrowReturns['rekey(address)void'] | undefined]> + + /** + * Gets available delete methods + */ + readonly delete: { + /** + * Deletes an existing instance of the Escrow smart contract using the delete()void ABI method. + * + * @param args The arguments for the smart contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + delete(params?: CallParams): EscrowComposer<[...TReturns, EscrowReturns['delete()void'] | undefined]> + } + + /** + * Makes a clear_state call to an existing instance of the Escrow smart contract. + * + * @param args The arguments for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): EscrowComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): EscrowComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: modelsv2.SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: modelsv2.SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: modelsv2.SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type EscrowComposerResults = Expand + diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/EscrowFactory.approval.puya.map b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/EscrowFactory.approval.puya.map new file mode 100644 index 000000000..b0e65e012 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/EscrowFactory.approval.puya.map @@ -0,0 +1,7153 @@ +{ + "version": 3, + "sources": [ + "../../escrow/factory.algo.ts" + ], + "mappings": ";;;;;;;;;;;;;;;;;;;;;AAaA;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;AAAA;;;;;;;;;;;;;;;;;;;;;;AAAA;AAqIG;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AArIH;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAJA;;;AACS;;AAAA;AAAgB;AAAhB;;AAAA;AAAgB;AAAhB;;AAAA;;AAAA;AAAmB;;AAAnB;;AAAA;AAAmB;;AAAnB;;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAP;;AAmBA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AACuB;;AAPA;AACd;;;AACW;;AAAR;;;AAeV;;AAAA;AAAA;;AAGc;;AAHd;AAAA;AAAA;;AAIY;;AAAc;;AAAd;AAJZ;AAAA;AAAA;AASkB;AAEP;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAFO;;;;;;;;;;AAhBH;;;AAAA;;;;;;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBG;;;AAAA;;;;AAAA;;;AAAA;AAAA;;;AAAA;AAAA;;AAMlB;AAEc;;AAAA;AACF;;;;;;AAHZ;;;AAAA;;;AAAA;AAOA;AAGI;AAAA;;;AAAe;;AAHnB;;;;;;;;;;AAAA;;;;;;;;AAAA;;;;AAAA;;;AAAA;AAjCF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoCkC;;;;;AAvCjB;;AAAL;;;;AA8CZ;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAES;;AAAP;AAGO;;;AAAa;AAAA;;AAAA;AAA6B;;AAA7B;AAAb;;;;AAAP;AAGI;AAAA;;AAAA;AAA6B;;AAA7B;AAAJ;;;AACY;AAAmC;;;;;;;;;AAAnC;AAAA;AAAA;AACH;AAAkB;;AAAlB;AAAP;AAMyB;;AAAA;;AAAA;AAAR;;;AACX;AAAA;AAAA;;AAAD;AAAP;AAEA;;AAAA;AAAA;;AAGc;;AAHd;AAAA;AAAA;;AAIqB;;AAAA;AAAA;;AAAA;AA5EwB;;;AAAT;AAA7B;;;AAAA;AAwEP;AAAA;AAAA;AASA;;AAAA;;AAAA;AA5BF;AAAA;AAYyB;;AAAL;AACV;;AAAA;;;;;;;;;;AAkBV;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AACiB;;AAAA;AACK;;AAAA;AAAR;;;AAAA;;AACL;AAAA;;AAAP;AAEgB;AAAA;AAAA;AACZ;AAAA;AAAA;;AAAmB;;AAAnB;AAAA;AAAA;;AAAJ;;;AACoB;AAAX;;AAAA;AAAP;AA3FkC;;AAAS;;;AAAT;AAmGlC;;;;AAAA;AAAA;;AAKF;AAAA;;;;;;;;AAAA;;;;;;;;AAAA;;;;AAAA;;;AAAA;AAEA;;AAAA;;AAEA;AAEc;AAAA;;;AAAuB;;;;;;;;AAFrC;;;AAAA;;;AAAA;AAxBF;AAAA;AA0ByE;;;;;AAjBhD;;AAAR;;;AAAN;AAAP;;;;AA2BA;;AAEA;;AAFA;AAHH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEiC;;;AAAzB;AAAA;;AAFR;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAE+B;;;AAAzB;AAAA;;AAAD;;;AACW;AAHhB;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKiC;AAAA;;;AAAzB;AAAA;AALR;;;AASA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEiC;AAAA;;;AAAzB;AAAA;;AAAP;AACgC;;;AAAzB;AAAA;AAHR;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAOA;;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEc;AACQ;AAAG;AAAA;;AAAA;AAAxB;;;AACkB;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACa;;;AAAzB;AAAA;;AAAJ;;;AACsD;;AAAA;;;AAAzB;AAAA;AAAjB;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAV;;AAAA;AAAA;AAAA;;;AAAA;;AAH0C;AAAA;AAAA;AAAA;;;;;AAK1C;;AAAU;AAAV;AAAA;;;AAAA;;;;;AARL;AAAA;;AAAA;AAAA;AAAA;AAAA;AAeA;;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEc;AACQ;AAAG;AAAA;;AAAA;AAAxB;;;AACkB;;AAAA;;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AACgB;AAAA;;;AAAzB;AAAA;;AAAP;AACoD;;;AAAzB;AAAA;AAAjB;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAV;;AAAA;AAAA;AAAA;;;AAAA;;AAH4C;AAAA;AAAA;;;;;AAH/C;AAAA;;AAAA;AAAA;AAAA;AAAA", + "op_pc_offset": 0, + "pc_events": { + "1": { + "subroutine": "@algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram", + "params": {}, + "block": "main", + "stack_in": [], + "op": "intcblock 1 0 2 32 150000" + }, + "10": { + "op": "bytecblock 0x151f7c75 \"\" 0x0000" + }, + "21": { + "op": "txn NumAppArgs", + "defined_out": [ + "tmp%0#1" + ], + "stack_out": [ + "tmp%0#1" + ] + }, + "23": { + "op": "bz main___algots__.defaultCreate@17", + "stack_out": [] + }, + "26": { + "op": "txn OnCompletion", + "defined_out": [ + "tmp%2#0" + ], + "stack_out": [ + "tmp%2#0" + ] + }, + "28": { + "op": "!", + "defined_out": [ + "tmp%3#0" + ], + "stack_out": [ + "tmp%3#0" + ] + }, + "29": { + "error": "OnCompletion must be NoOp", + "op": "assert // OnCompletion must be NoOp", + "stack_out": [] + }, + "30": { + "op": "txn ApplicationID", + "defined_out": [ + "tmp%4#0" + ], + "stack_out": [ + "tmp%4#0" + ] + }, + "32": { + "op": "assert", + "stack_out": [] + }, + "33": { + "op": "pushbytess 0xd85cf184 0x607e7046 0x8a39e79f 0x9b67fa6d 0x3c754120 0x4c9fb656 0x3c1a6f33 0x2b5602a3 0x13dc508a 0x475d3773 // method \"new(pay)uint64\", method \"register(pay,uint64)void\", method \"delete(uint64)void\", method \"cost()uint64\", method \"registerCost()uint64\", method \"exists(address)bool\", method \"get(address)byte[]\", method \"mustGet(address)byte[]\", method \"getList(address[])byte[][]\", method \"mustGetList(address[])byte[][]\"", + "defined_out": [ + "Method(cost()uint64)", + "Method(delete(uint64)void)", + "Method(exists(address)bool)", + "Method(get(address)byte[])", + "Method(getList(address[])byte[][])", + "Method(mustGet(address)byte[])", + "Method(mustGetList(address[])byte[][])", + "Method(new(pay)uint64)", + "Method(register(pay,uint64)void)", + "Method(registerCost()uint64)" + ], + "stack_out": [ + "Method(new(pay)uint64)", + "Method(register(pay,uint64)void)", + "Method(delete(uint64)void)", + "Method(cost()uint64)", + "Method(registerCost()uint64)", + "Method(exists(address)bool)", + "Method(get(address)byte[])", + "Method(mustGet(address)byte[])", + "Method(getList(address[])byte[][])", + "Method(mustGetList(address[])byte[][])" + ] + }, + "85": { + "op": "txna ApplicationArgs 0", + "defined_out": [ + "Method(cost()uint64)", + "Method(delete(uint64)void)", + "Method(exists(address)bool)", + "Method(get(address)byte[])", + "Method(getList(address[])byte[][])", + "Method(mustGet(address)byte[])", + "Method(mustGetList(address[])byte[][])", + "Method(new(pay)uint64)", + "Method(register(pay,uint64)void)", + "Method(registerCost()uint64)", + "tmp%6#0" + ], + "stack_out": [ + "Method(new(pay)uint64)", + "Method(register(pay,uint64)void)", + "Method(delete(uint64)void)", + "Method(cost()uint64)", + "Method(registerCost()uint64)", + "Method(exists(address)bool)", + "Method(get(address)byte[])", + "Method(mustGet(address)byte[])", + "Method(getList(address[])byte[][])", + "Method(mustGetList(address[])byte[][])", + "tmp%6#0" + ] + }, + "88": { + "op": "match new register delete cost main_registerCost_route@8 exists get mustGet getList mustGetList", + "stack_out": [] + }, + "110": { + "op": "err" + }, + "111": { + "block": "main_registerCost_route@8", + "stack_in": [], + "op": "pushbytes 0x151f7c750000000000002f44", + "defined_out": [ + "0x151f7c750000000000002f44" + ], + "stack_out": [ + "0x151f7c750000000000002f44" + ] + }, + "125": { + "op": "log", + "stack_out": [] + }, + "126": { + "op": "intc_0 // 1", + "defined_out": [ + "1" + ], + "stack_out": [ + "1" + ] + }, + "127": { + "op": "return", + "stack_out": [] + }, + "128": { + "block": "main___algots__.defaultCreate@17", + "stack_in": [], + "op": "txn OnCompletion", + "defined_out": [ + "tmp%7#0" + ], + "stack_out": [ + "tmp%7#0" + ] + }, + "130": { + "op": "!", + "defined_out": [ + "tmp%8#0" + ], + "stack_out": [ + "tmp%8#0" + ] + }, + "131": { + "op": "txn ApplicationID", + "defined_out": [ + "tmp%8#0", + "tmp%9#0" + ], + "stack_out": [ + "tmp%8#0", + "tmp%9#0" + ] + }, + "133": { + "op": "!", + "defined_out": [ + "tmp%10#0", + "tmp%8#0" + ], + "stack_out": [ + "tmp%8#0", + "tmp%10#0" + ] + }, + "134": { + "op": "&&", + "defined_out": [ + "tmp%11#0" + ], + "stack_out": [ + "tmp%11#0" + ] + }, + "135": { + "error": "OnCompletion must be NoOp && can only call when creating", + "op": "return // on error: OnCompletion must be NoOp && can only call when creating", + "defined_out": [], + "stack_out": [] + }, + "136": { + "subroutine": "_puya_lib.arc4.dynamic_array_concat_byte_length_head", + "params": { + "array#0": "bytes", + "new_items_bytes#0": "bytes", + "new_items_count#0": "uint64" + }, + "block": "dynamic_array_concat_byte_length_head", + "stack_in": [], + "op": "proto 3 1" + }, + "139": { + "op": "frame_dig -3", + "defined_out": [ + "array#0 (copy)" + ], + "stack_out": [ + "array#0 (copy)" + ] + }, + "141": { + "op": "intc_1 // 0", + "defined_out": [ + "0", + "array#0 (copy)" + ], + "stack_out": [ + "array#0 (copy)", + "0" + ] + }, + "142": { + "op": "extract_uint16", + "defined_out": [ + "array_length#0" + ], + "stack_out": [ + "array_length#0" + ] + }, + "143": { + "op": "dup", + "defined_out": [ + "array_length#0", + "array_length#0 (copy)" + ], + "stack_out": [ + "array_length#0", + "array_length#0 (copy)" + ] + }, + "144": { + "op": "frame_dig -1", + "defined_out": [ + "array_length#0", + "array_length#0 (copy)", + "new_items_count#0 (copy)" + ], + "stack_out": [ + "array_length#0", + "array_length#0 (copy)", + "new_items_count#0 (copy)" + ] + }, + "146": { + "op": "+", + "defined_out": [ + "array_length#0", + "new_length#0" + ], + "stack_out": [ + "array_length#0", + "new_length#0" + ] + }, + "147": { + "op": "swap", + "stack_out": [ + "new_length#0", + "array_length#0" + ] + }, + "148": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "array_length#0", + "new_length#0" + ], + "stack_out": [ + "new_length#0", + "array_length#0", + "2" + ] + }, + "149": { + "op": "*", + "defined_out": [ + "new_length#0", + "tmp%2#0" + ], + "stack_out": [ + "new_length#0", + "tmp%2#0" + ] + }, + "150": { + "op": "intc_2 // 2", + "stack_out": [ + "new_length#0", + "tmp%2#0", + "2" + ] + }, + "151": { + "op": "+", + "defined_out": [ + "header_end#0", + "new_length#0" + ], + "stack_out": [ + "new_length#0", + "header_end#0" + ] + }, + "152": { + "op": "dig 1", + "defined_out": [ + "header_end#0", + "new_length#0", + "new_length#0 (copy)" + ], + "stack_out": [ + "new_length#0", + "header_end#0", + "new_length#0 (copy)" + ] + }, + "154": { + "op": "itob", + "defined_out": [ + "header_end#0", + "new_length#0", + "tmp%4#0" + ], + "stack_out": [ + "new_length#0", + "header_end#0", + "tmp%4#0" + ] + }, + "155": { + "op": "extract 6 2", + "defined_out": [ + "header_end#0", + "new_length#0", + "tmp%5#0" + ], + "stack_out": [ + "new_length#0", + "header_end#0", + "tmp%5#0" + ] + }, + "158": { + "op": "cover 2", + "defined_out": [ + "header_end#0", + "new_length#0", + "tmp%5#0" + ], + "stack_out": [ + "tmp%5#0", + "new_length#0", + "header_end#0" + ] + }, + "160": { + "op": "frame_dig -3", + "stack_out": [ + "tmp%5#0", + "new_length#0", + "header_end#0", + "array#0 (copy)" + ] + }, + "162": { + "op": "intc_2 // 2", + "stack_out": [ + "tmp%5#0", + "new_length#0", + "header_end#0", + "array#0 (copy)", + "2" + ] + }, + "163": { + "op": "dig 2", + "defined_out": [ + "2", + "array#0 (copy)", + "header_end#0", + "header_end#0 (copy)", + "new_length#0", + "tmp%5#0" + ], + "stack_out": [ + "tmp%5#0", + "new_length#0", + "header_end#0", + "array#0 (copy)", + "2", + "header_end#0 (copy)" + ] + }, + "165": { + "op": "substring3", + "defined_out": [ + "header_end#0", + "new_length#0", + "tmp%5#0", + "tmp%6#0" + ], + "stack_out": [ + "tmp%5#0", + "new_length#0", + "header_end#0", + "tmp%6#0" + ] + }, + "166": { + "op": "frame_dig -1", + "stack_out": [ + "tmp%5#0", + "new_length#0", + "header_end#0", + "tmp%6#0", + "new_items_count#0 (copy)" + ] + }, + "168": { + "op": "intc_2 // 2", + "stack_out": [ + "tmp%5#0", + "new_length#0", + "header_end#0", + "tmp%6#0", + "new_items_count#0 (copy)", + "2" + ] + }, + "169": { + "op": "*", + "defined_out": [ + "header_end#0", + "new_length#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0" + ], + "stack_out": [ + "tmp%5#0", + "new_length#0", + "header_end#0", + "tmp%6#0", + "tmp%7#0" + ] + }, + "170": { + "op": "bzero", + "defined_out": [ + "header_end#0", + "new_length#0", + "tmp%5#0", + "tmp%6#0", + "tmp%8#0" + ], + "stack_out": [ + "tmp%5#0", + "new_length#0", + "header_end#0", + "tmp%6#0", + "tmp%8#0" + ] + }, + "171": { + "op": "concat", + "defined_out": [ + "header_end#0", + "new_length#0", + "tmp%5#0", + "tmp%9#0" + ], + "stack_out": [ + "tmp%5#0", + "new_length#0", + "header_end#0", + "tmp%9#0" + ] + }, + "172": { + "op": "frame_dig -3", + "stack_out": [ + "tmp%5#0", + "new_length#0", + "header_end#0", + "tmp%9#0", + "array#0 (copy)" + ] + }, + "174": { + "op": "len", + "defined_out": [ + "header_end#0", + "new_length#0", + "tmp%10#0", + "tmp%5#0", + "tmp%9#0" + ], + "stack_out": [ + "tmp%5#0", + "new_length#0", + "header_end#0", + "tmp%9#0", + "tmp%10#0" + ] + }, + "175": { + "op": "frame_dig -3", + "stack_out": [ + "tmp%5#0", + "new_length#0", + "header_end#0", + "tmp%9#0", + "tmp%10#0", + "array#0 (copy)" + ] + }, + "177": { + "op": "uncover 3", + "stack_out": [ + "tmp%5#0", + "new_length#0", + "tmp%9#0", + "tmp%10#0", + "array#0 (copy)", + "header_end#0" + ] + }, + "179": { + "op": "uncover 2", + "stack_out": [ + "tmp%5#0", + "new_length#0", + "tmp%9#0", + "array#0 (copy)", + "header_end#0", + "tmp%10#0" + ] + }, + "181": { + "op": "substring3", + "defined_out": [ + "new_length#0", + "tmp%11#0", + "tmp%5#0", + "tmp%9#0" + ], + "stack_out": [ + "tmp%5#0", + "new_length#0", + "tmp%9#0", + "tmp%11#0" + ] + }, + "182": { + "op": "concat", + "defined_out": [ + "new_length#0", + "tmp%12#0", + "tmp%5#0" + ], + "stack_out": [ + "tmp%5#0", + "new_length#0", + "tmp%12#0" + ] + }, + "183": { + "op": "frame_dig -2", + "defined_out": [ + "new_items_bytes#0 (copy)", + "new_length#0", + "tmp%12#0", + "tmp%5#0" + ], + "stack_out": [ + "tmp%5#0", + "new_length#0", + "tmp%12#0", + "new_items_bytes#0 (copy)" + ] + }, + "185": { + "op": "concat", + "defined_out": [ + "array_head_and_tail#0", + "new_length#0", + "tmp%5#0" + ], + "stack_out": [ + "tmp%5#0", + "new_length#0", + "array_head_and_tail#0" + ] + }, + "186": { + "op": "swap", + "defined_out": [ + "array_head_and_tail#0", + "new_length#0", + "tmp%5#0" + ], + "stack_out": [ + "tmp%5#0", + "array_head_and_tail#0", + "new_length#0" + ] + }, + "187": { + "op": "intc_2 // 2", + "stack_out": [ + "tmp%5#0", + "array_head_and_tail#0", + "new_length#0", + "2" + ] + }, + "188": { + "op": "*", + "defined_out": [ + "array_head_and_tail#0", + "tail_offset#0", + "tmp%5#0" + ], + "stack_out": [ + "tmp%5#0", + "array_head_and_tail#0", + "tail_offset#0" + ] + }, + "189": { + "op": "dup", + "defined_out": [ + "array_head_and_tail#0", + "tail_offset#0", + "tmp%5#0" + ], + "stack_out": [ + "tmp%5#0", + "array_head_and_tail#0", + "tail_offset#0", + "tail_offset#0" + ] + }, + "190": { + "op": "intc_1 // 0", + "defined_out": [ + "array_head_and_tail#0", + "head_offset#0", + "tail_offset#0", + "tail_offset#1", + "tmp%5#0" + ], + "stack_out": [ + "tmp%5#0", + "array_head_and_tail#0", + "tail_offset#0", + "tail_offset#1", + "head_offset#0" + ] + }, + "191": { + "block": "dynamic_array_concat_byte_length_head_for_header@2", + "stack_in": [ + "tmp%5#0", + "array_head_and_tail#0", + "tail_offset#0", + "tail_offset#1", + "head_offset#0" + ], + "op": "frame_dig 4", + "defined_out": [ + "head_offset#0" + ], + "stack_out": [ + "tmp%5#0", + "array_head_and_tail#0", + "tail_offset#0", + "tail_offset#1", + "head_offset#0", + "head_offset#0" + ] + }, + "193": { + "op": "frame_dig 2", + "defined_out": [ + "head_offset#0", + "tail_offset#0" + ], + "stack_out": [ + "tmp%5#0", + "array_head_and_tail#0", + "tail_offset#0", + "tail_offset#1", + "head_offset#0", + "head_offset#0", + "tail_offset#0" + ] + }, + "195": { + "op": "<", + "defined_out": [ + "continue_looping%0#0", + "head_offset#0", + "tail_offset#0" + ], + "stack_out": [ + "tmp%5#0", + "array_head_and_tail#0", + "tail_offset#0", + "tail_offset#1", + "head_offset#0", + "continue_looping%0#0" + ] + }, + "196": { + "op": "bz dynamic_array_concat_byte_length_head_after_for@5", + "stack_out": [ + "tmp%5#0", + "array_head_and_tail#0", + "tail_offset#0", + "tail_offset#1", + "head_offset#0" + ] + }, + "199": { + "op": "frame_dig 3", + "defined_out": [ + "head_offset#0", + "tail_offset#0", + "tail_offset#1" + ], + "stack_out": [ + "tmp%5#0", + "array_head_and_tail#0", + "tail_offset#0", + "tail_offset#1", + "head_offset#0", + "tail_offset#1" + ] + }, + "201": { + "op": "dup", + "defined_out": [ + "head_offset#0", + "tail_offset#0", + "tail_offset#1", + "tail_offset#1 (copy)" + ], + "stack_out": [ + "tmp%5#0", + "array_head_and_tail#0", + "tail_offset#0", + "tail_offset#1", + "head_offset#0", + "tail_offset#1", + "tail_offset#1 (copy)" + ] + }, + "202": { + "op": "itob", + "defined_out": [ + "head_offset#0", + "tail_offset#0", + "tail_offset#1", + "tmp%6#0" + ], + "stack_out": [ + "tmp%5#0", + "array_head_and_tail#0", + "tail_offset#0", + "tail_offset#1", + "head_offset#0", + "tail_offset#1", + "tmp%6#0" + ] + }, + "203": { + "op": "extract 6 2", + "defined_out": [ + "head_offset#0", + "tail_offset#0", + "tail_offset#1", + "tail_offset_bytes#0" + ], + "stack_out": [ + "tmp%5#0", + "array_head_and_tail#0", + "tail_offset#0", + "tail_offset#1", + "head_offset#0", + "tail_offset#1", + "tail_offset_bytes#0" + ] + }, + "206": { + "op": "frame_dig 1", + "defined_out": [ + "array_head_and_tail#0", + "head_offset#0", + "tail_offset#0", + "tail_offset#1", + "tail_offset_bytes#0" + ], + "stack_out": [ + "tmp%5#0", + "array_head_and_tail#0", + "tail_offset#0", + "tail_offset#1", + "head_offset#0", + "tail_offset#1", + "tail_offset_bytes#0", + "array_head_and_tail#0" + ] + }, + "208": { + "op": "frame_dig 4", + "stack_out": [ + "tmp%5#0", + "array_head_and_tail#0", + "tail_offset#0", + "tail_offset#1", + "head_offset#0", + "tail_offset#1", + "tail_offset_bytes#0", + "array_head_and_tail#0", + "head_offset#0" + ] + }, + "210": { + "op": "dup", + "defined_out": [ + "array_head_and_tail#0", + "head_offset#0", + "head_offset#0 (copy)", + "tail_offset#0", + "tail_offset#1", + "tail_offset_bytes#0" + ], + "stack_out": [ + "tmp%5#0", + "array_head_and_tail#0", + "tail_offset#0", + "tail_offset#1", + "head_offset#0", + "tail_offset#1", + "tail_offset_bytes#0", + "array_head_and_tail#0", + "head_offset#0 (copy)", + "head_offset#0 (copy)" + ] + }, + "211": { + "op": "cover 4", + "stack_out": [ + "tmp%5#0", + "array_head_and_tail#0", + "tail_offset#0", + "tail_offset#1", + "head_offset#0", + "head_offset#0", + "tail_offset#1", + "tail_offset_bytes#0", + "array_head_and_tail#0", + "head_offset#0 (copy)" + ] + }, + "213": { + "op": "uncover 2", + "stack_out": [ + "tmp%5#0", + "array_head_and_tail#0", + "tail_offset#0", + "tail_offset#1", + "head_offset#0", + "head_offset#0", + "tail_offset#1", + "array_head_and_tail#0", + "head_offset#0 (copy)", + "tail_offset_bytes#0" + ] + }, + "215": { + "op": "replace3", + "stack_out": [ + "tmp%5#0", + "array_head_and_tail#0", + "tail_offset#0", + "tail_offset#1", + "head_offset#0", + "head_offset#0", + "tail_offset#1", + "array_head_and_tail#0" + ] + }, + "216": { + "op": "dup", + "stack_out": [ + "tmp%5#0", + "array_head_and_tail#0", + "tail_offset#0", + "tail_offset#1", + "head_offset#0", + "head_offset#0", + "tail_offset#1", + "array_head_and_tail#0", + "array_head_and_tail#0" + ] + }, + "217": { + "op": "frame_bury 1", + "defined_out": [ + "array_head_and_tail#0", + "head_offset#0", + "tail_offset#0", + "tail_offset#1" + ], + "stack_out": [ + "tmp%5#0", + "array_head_and_tail#0", + "tail_offset#0", + "tail_offset#1", + "head_offset#0", + "head_offset#0", + "tail_offset#1", + "array_head_and_tail#0" + ] + }, + "219": { + "op": "dig 1", + "stack_out": [ + "tmp%5#0", + "array_head_and_tail#0", + "tail_offset#0", + "tail_offset#1", + "head_offset#0", + "head_offset#0", + "tail_offset#1", + "array_head_and_tail#0", + "tail_offset#1 (copy)" + ] + }, + "221": { + "op": "extract_uint16", + "defined_out": [ + "array_head_and_tail#0", + "head_offset#0", + "tail_offset#0", + "tail_offset#1", + "tmp%9#1" + ], + "stack_out": [ + "tmp%5#0", + "array_head_and_tail#0", + "tail_offset#0", + "tail_offset#1", + "head_offset#0", + "head_offset#0", + "tail_offset#1", + "tmp%9#1" + ] + }, + "222": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "array_head_and_tail#0", + "head_offset#0", + "tail_offset#0", + "tail_offset#1", + "tmp%9#1" + ], + "stack_out": [ + "tmp%5#0", + "array_head_and_tail#0", + "tail_offset#0", + "tail_offset#1", + "head_offset#0", + "head_offset#0", + "tail_offset#1", + "tmp%9#1", + "2" + ] + }, + "223": { + "op": "+", + "defined_out": [ + "array_head_and_tail#0", + "head_offset#0", + "tail_offset#0", + "tail_offset#1", + "tmp%10#0" + ], + "stack_out": [ + "tmp%5#0", + "array_head_and_tail#0", + "tail_offset#0", + "tail_offset#1", + "head_offset#0", + "head_offset#0", + "tail_offset#1", + "tmp%10#0" + ] + }, + "224": { + "op": "+", + "stack_out": [ + "tmp%5#0", + "array_head_and_tail#0", + "tail_offset#0", + "tail_offset#1", + "head_offset#0", + "head_offset#0", + "tail_offset#1" + ] + }, + "225": { + "op": "frame_bury 3", + "defined_out": [ + "array_head_and_tail#0", + "head_offset#0", + "tail_offset#0", + "tail_offset#1" + ], + "stack_out": [ + "tmp%5#0", + "array_head_and_tail#0", + "tail_offset#0", + "tail_offset#1", + "head_offset#0", + "head_offset#0" + ] + }, + "227": { + "op": "intc_2 // 2", + "stack_out": [ + "tmp%5#0", + "array_head_and_tail#0", + "tail_offset#0", + "tail_offset#1", + "head_offset#0", + "head_offset#0", + "2" + ] + }, + "228": { + "op": "+", + "stack_out": [ + "tmp%5#0", + "array_head_and_tail#0", + "tail_offset#0", + "tail_offset#1", + "head_offset#0", + "head_offset#0" + ] + }, + "229": { + "op": "frame_bury 4", + "stack_out": [ + "tmp%5#0", + "array_head_and_tail#0", + "tail_offset#0", + "tail_offset#1", + "head_offset#0" + ] + }, + "231": { + "op": "b dynamic_array_concat_byte_length_head_for_header@2" + }, + "234": { + "block": "dynamic_array_concat_byte_length_head_after_for@5", + "stack_in": [ + "tmp%5#0", + "array_head_and_tail#0", + "tail_offset#0", + "tail_offset#1", + "head_offset#0" + ], + "op": "frame_dig 0", + "defined_out": [ + "tmp%5#0" + ], + "stack_out": [ + "tmp%5#0", + "array_head_and_tail#0", + "tail_offset#0", + "tail_offset#1", + "head_offset#0", + "tmp%5#0" + ] + }, + "236": { + "op": "frame_dig 1", + "defined_out": [ + "array_head_and_tail#0", + "tmp%5#0" + ], + "stack_out": [ + "tmp%5#0", + "array_head_and_tail#0", + "tail_offset#0", + "tail_offset#1", + "head_offset#0", + "tmp%5#0", + "array_head_and_tail#0" + ] + }, + "238": { + "op": "concat", + "defined_out": [ + "array_head_and_tail#0", + "tmp%15#0", + "tmp%5#0" + ], + "stack_out": [ + "tmp%5#0", + "array_head_and_tail#0", + "tail_offset#0", + "tail_offset#1", + "head_offset#0", + "tmp%15#0" + ] + }, + "239": { + "op": "frame_bury 0" + }, + "241": { + "retsub": true, + "op": "retsub" + }, + "242": { + "subroutine": "smart_contracts/escrow/factory.algo.ts::bytes16", + "params": { + "acc#0": "bytes" + }, + "block": "bytes16", + "stack_in": [], + "op": "proto 1 1" + }, + "245": { + "op": "frame_dig -1", + "defined_out": [ + "acc#0 (copy)" + ], + "stack_out": [ + "acc#0 (copy)" + ] + }, + "247": { + "op": "len", + "defined_out": [ + "length%0#0" + ], + "stack_out": [ + "length%0#0" + ] + }, + "248": { + "op": "intc_1 // 0", + "defined_out": [ + "0", + "length%0#0" + ], + "stack_out": [ + "length%0#0", + "0" + ] + }, + "249": { + "op": "dig 1", + "defined_out": [ + "0", + "length%0#0", + "length%0#0 (copy)" + ], + "stack_out": [ + "length%0#0", + "0", + "length%0#0 (copy)" + ] + }, + "251": { + "op": ">=", + "defined_out": [ + "is_out_of_bounds%0#0", + "length%0#0" + ], + "stack_out": [ + "length%0#0", + "is_out_of_bounds%0#0" + ] + }, + "252": { + "op": "intc_1 // 0", + "stack_out": [ + "length%0#0", + "is_out_of_bounds%0#0", + "0" + ] + }, + "253": { + "op": "dig 2", + "stack_out": [ + "length%0#0", + "is_out_of_bounds%0#0", + "0", + "length%0#0 (copy)" + ] + }, + "255": { + "op": "uncover 2", + "stack_out": [ + "length%0#0", + "0", + "length%0#0 (copy)", + "is_out_of_bounds%0#0" + ] + }, + "257": { + "op": "select", + "defined_out": [ + "bounded_index%0#0", + "length%0#0" + ], + "stack_out": [ + "length%0#0", + "bounded_index%0#0" + ] + }, + "258": { + "op": "pushint 16 // 16", + "defined_out": [ + "16", + "bounded_index%0#0", + "length%0#0" + ], + "stack_out": [ + "length%0#0", + "bounded_index%0#0", + "16" + ] + }, + "260": { + "op": "dig 2", + "stack_out": [ + "length%0#0", + "bounded_index%0#0", + "16", + "length%0#0 (copy)" + ] + }, + "262": { + "op": ">=", + "defined_out": [ + "bounded_index%0#0", + "is_out_of_bounds%1#0", + "length%0#0" + ], + "stack_out": [ + "length%0#0", + "bounded_index%0#0", + "is_out_of_bounds%1#0" + ] + }, + "263": { + "op": "pushint 16 // 16", + "stack_out": [ + "length%0#0", + "bounded_index%0#0", + "is_out_of_bounds%1#0", + "16" + ] + }, + "265": { + "op": "uncover 3", + "stack_out": [ + "bounded_index%0#0", + "is_out_of_bounds%1#0", + "16", + "length%0#0" + ] + }, + "267": { + "op": "uncover 2", + "stack_out": [ + "bounded_index%0#0", + "16", + "length%0#0", + "is_out_of_bounds%1#0" + ] + }, + "269": { + "op": "select", + "defined_out": [ + "bounded_index%0#0", + "bounded_index%1#0" + ], + "stack_out": [ + "bounded_index%0#0", + "bounded_index%1#0" + ] + }, + "270": { + "op": "frame_dig -1", + "stack_out": [ + "bounded_index%0#0", + "bounded_index%1#0", + "acc#0 (copy)" + ] + }, + "272": { + "op": "cover 2", + "stack_out": [ + "acc#0 (copy)", + "bounded_index%0#0", + "bounded_index%1#0" + ] + }, + "274": { + "op": "substring3", + "defined_out": [ + "awst_tmp%0#0" + ], + "stack_out": [ + "awst_tmp%0#0" + ] + }, + "275": { + "op": "dup", + "defined_out": [ + "awst_tmp%0#0", + "awst_tmp%0#0 (copy)" + ], + "stack_out": [ + "awst_tmp%0#0", + "awst_tmp%0#0 (copy)" + ] + }, + "276": { + "op": "len", + "defined_out": [ + "awst_tmp%0#0", + "tmp%0#0" + ], + "stack_out": [ + "awst_tmp%0#0", + "tmp%0#0" + ] + }, + "277": { + "op": "pushint 16 // 16", + "stack_out": [ + "awst_tmp%0#0", + "tmp%0#0", + "16" + ] + }, + "279": { + "op": "==", + "defined_out": [ + "awst_tmp%0#0", + "tmp%1#0" + ], + "stack_out": [ + "awst_tmp%0#0", + "tmp%1#0" + ] + }, + "280": { + "error": "Length must be 16", + "op": "assert // Length must be 16", + "stack_out": [ + "awst_tmp%0#0" + ] + }, + "281": { + "retsub": true, + "op": "retsub" + }, + "282": { + "subroutine": "smart_contracts/escrow/factory.algo.ts::EscrowFactory.new[routing]", + "params": {}, + "block": "new", + "stack_in": [], + "op": "bytec_1 // \"\"", + "stack_out": [ + "newEscrow#0" + ] + }, + "283": { + "op": "txn GroupIndex", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "newEscrow#0", + "tmp%0#0" + ] + }, + "285": { + "op": "intc_0 // 1", + "defined_out": [ + "1", + "tmp%0#0" + ], + "stack_out": [ + "newEscrow#0", + "tmp%0#0", + "1" + ] + }, + "286": { + "op": "-", + "defined_out": [ + "payment#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0" + ] + }, + "287": { + "op": "dup", + "defined_out": [ + "payment#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "payment#0" + ] + }, + "288": { + "op": "gtxns TypeEnum", + "defined_out": [ + "gtxn_type%0#0", + "payment#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "gtxn_type%0#0" + ] + }, + "290": { + "op": "intc_0 // pay", + "defined_out": [ + "gtxn_type%0#0", + "pay", + "payment#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "gtxn_type%0#0", + "pay" + ] + }, + "291": { + "op": "==", + "defined_out": [ + "gtxn_type_matches%0#0", + "payment#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "gtxn_type_matches%0#0" + ] + }, + "292": { + "error": "transaction type is pay", + "op": "assert // transaction type is pay", + "stack_out": [ + "newEscrow#0", + "payment#0" + ] + }, + "293": { + "op": "global CallerApplicationID" + }, + "295": { + "op": "dup", + "defined_out": [ + "payment#0", + "tmp%0#0", + "tmp%0#2" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "tmp%0#2" + ] + }, + "296": { + "op": "bnz new_ternary_false@9", + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0" + ] + }, + "299": { + "op": "txn Sender", + "defined_out": [ + "payment#0", + "tmp%0#0", + "tmp%2#1" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "tmp%2#1" + ] + }, + "301": { + "callsub": "smart_contracts/escrow/factory.algo.ts::bytes16", + "op": "callsub bytes16", + "defined_out": [ + "creator#0", + "payment#0", + "tmp%0#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "creator#0" + ] + }, + "304": { + "block": "new_ternary_merge@10", + "stack_in": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "creator#0" + ], + "op": "dig 2", + "defined_out": [ + "payment#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "creator#0", + "payment#0" + ] + }, + "306": { + "op": "dup", + "defined_out": [ + "payment#0", + "payment#0 (copy)" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "creator#0", + "payment#0", + "payment#0 (copy)" + ] + }, + "307": { + "op": "gtxns Receiver", + "defined_out": [ + "payment#0", + "tmp%3#1" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "creator#0", + "payment#0", + "tmp%3#1" + ] + }, + "309": { + "op": "global CurrentApplicationAddress", + "defined_out": [ + "payment#0", + "tmp%3#1", + "tmp%4#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "creator#0", + "payment#0", + "tmp%3#1", + "tmp%4#0" + ] + }, + "311": { + "op": "==", + "defined_out": [ + "payment#0", + "tmp%5#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "creator#0", + "payment#0", + "tmp%5#0" + ] + }, + "312": { + "op": "swap", + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "creator#0", + "tmp%5#0", + "payment#0" + ] + }, + "313": { + "op": "gtxns Amount", + "defined_out": [ + "payment#0", + "tmp%5#0", + "tmp%6#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "creator#0", + "tmp%5#0", + "tmp%6#0" + ] + }, + "315": { + "op": "intc 4 // 150000", + "defined_out": [ + "150000", + "payment#0", + "tmp%5#0", + "tmp%6#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "creator#0", + "tmp%5#0", + "tmp%6#0", + "150000" + ] + }, + "317": { + "op": "global MinBalance", + "defined_out": [ + "150000", + "payment#0", + "tmp%5#0", + "tmp%6#0", + "tmp%7#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "creator#0", + "tmp%5#0", + "tmp%6#0", + "150000", + "tmp%7#0" + ] + }, + "319": { + "op": "+", + "defined_out": [ + "payment#0", + "tmp%5#0", + "tmp%6#0", + "tmp%8#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "creator#0", + "tmp%5#0", + "tmp%6#0", + "tmp%8#0" + ] + }, + "320": { + "op": "==", + "defined_out": [ + "payment#0", + "tmp%5#0", + "tmp%9#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "creator#0", + "tmp%5#0", + "tmp%9#0" + ] + }, + "321": { + "op": "&&", + "defined_out": [ + "payment#0", + "tmp%10#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "creator#0", + "tmp%10#0" + ] + }, + "322": { + "error": "invalid payment", + "op": "assert // invalid payment", + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "creator#0" + ] + }, + "323": { + "op": "itxn_begin", + "defined_out": [ + "creator#0", + "payment#0" + ] + }, + "324": { + "op": "dup", + "defined_out": [ + "creator#0", + "creator#0 (copy)", + "payment#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "creator#0", + "creator#0 (copy)" + ] + }, + "325": { + "op": "len", + "defined_out": [ + "aggregate%length%0#0", + "creator#0", + "payment#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "creator#0", + "aggregate%length%0#0" + ] + }, + "326": { + "op": "itob", + "defined_out": [ + "aggregate%as_bytes%0#0", + "creator#0", + "payment#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "creator#0", + "aggregate%as_bytes%0#0" + ] + }, + "327": { + "op": "extract 6 2", + "defined_out": [ + "aggregate%length_uint16%0#0", + "creator#0", + "payment#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "creator#0", + "aggregate%length_uint16%0#0" + ] + }, + "330": { + "op": "swap", + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "aggregate%length_uint16%0#0", + "creator#0" + ] + }, + "331": { + "op": "concat", + "defined_out": [ + "aggregate%encoded_value%0#0", + "payment#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "aggregate%encoded_value%0#0" + ] + }, + "332": { + "op": "pushbytes 0x8e79358d // method \"create(byte[])void\"", + "defined_out": [ + "Method(create(byte[])void)", + "aggregate%encoded_value%0#0", + "payment#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "aggregate%encoded_value%0#0", + "Method(create(byte[])void)" + ] + }, + "338": { + "op": "itxn_field ApplicationArgs", + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "aggregate%encoded_value%0#0" + ] + }, + "340": { + "op": "itxn_field ApplicationArgs", + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0" + ] + }, + "342": { + "op": "intc_0 // 1", + "defined_out": [ + "1", + "payment#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "1" + ] + }, + "343": { + "op": "itxn_field GlobalNumByteSlice", + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0" + ] + }, + "345": { + "op": "pushbytes base64(C4EBQw==)", + "defined_out": [ + "C4EBQw==", + "payment#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "C4EBQw==" + ] + }, + "351": { + "op": "itxn_field ClearStateProgramPages", + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0" + ] + }, + "353": { + "op": "pushbytes base64(CyACAQCABCQ3jTw2GgCOAQAlMRkURDEYQQAOgARlqXvMNhoAjgEAOQCABI55NY02GgCOAQANADEZgQUSMRgQREIAQDYaAUkjWYECCEsBFRJEVwIAgAdjcmVhdG9yTGciQzYaAUkVgSASRDEAMgkSRLEyCrIHsiAjsggishAjsgGzIkMxADIJEkSxMgmyCSKyECOyAbMiQw==)", + "defined_out": [ + "CyACAQCABCQ3jTw2GgCOAQAlMRkURDEYQQAOgARlqXvMNhoAjgEAOQCABI55NY02GgCOAQANADEZgQUSMRgQREIAQDYaAUkjWYECCEsBFRJEVwIAgAdjcmVhdG9yTGciQzYaAUkVgSASRDEAMgkSRLEyCrIHsiAjsggishAjsgGzIkMxADIJEkSxMgmyCSKyECOyAbMiQw==", + "payment#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "CyACAQCABCQ3jTw2GgCOAQAlMRkURDEYQQAOgARlqXvMNhoAjgEAOQCABI55NY02GgCOAQANADEZgQUSMRgQREIAQDYaAUkjWYECCEsBFRJEVwIAgAdjcmVhdG9yTGciQzYaAUkVgSASRDEAMgkSRLEyCrIHsiAjsggishAjsgGzIkMxADIJEkSxMgmyCSKyECOyAbMiQw==" + ] + }, + "507": { + "op": "itxn_field ApprovalProgramPages", + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0" + ] + }, + "509": { + "op": "intc_1 // 0", + "defined_out": [ + "0", + "payment#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "0" + ] + }, + "510": { + "op": "itxn_field OnCompletion", + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0" + ] + }, + "512": { + "op": "pushint 6 // appl", + "defined_out": [ + "appl", + "payment#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "appl" + ] + }, + "514": { + "op": "itxn_field TypeEnum", + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0" + ] + }, + "516": { + "op": "intc_1 // 0", + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "0" + ] + }, + "517": { + "op": "itxn_field Fee", + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0" + ] + }, + "519": { + "op": "itxn_submit" + }, + "520": { + "op": "gitxn 0 CreatedApplicationID" + }, + "523": { + "op": "dup", + "defined_out": [ + "newEscrow#0", + "payment#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "newEscrow#0", + "newEscrow#0" + ] + }, + "524": { + "op": "bury 4", + "defined_out": [ + "newEscrow#0", + "payment#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "newEscrow#0" + ] + }, + "526": { + "op": "itxn_begin" + }, + "527": { + "op": "app_params_get AppAddress", + "defined_out": [ + "check%0#0", + "newEscrow#0", + "payment#0", + "value%0#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "value%0#0", + "check%0#0" + ] + }, + "529": { + "error": "application exists", + "op": "assert // application exists", + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "value%0#0" + ] + }, + "530": { + "op": "global MinBalance", + "defined_out": [ + "inner_txn_params%1%%param_Amount_idx_0#0", + "newEscrow#0", + "payment#0", + "value%0#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "value%0#0", + "inner_txn_params%1%%param_Amount_idx_0#0" + ] + }, + "532": { + "op": "itxn_field Amount", + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "value%0#0" + ] + }, + "534": { + "op": "itxn_field Receiver", + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0" + ] + }, + "536": { + "op": "intc_0 // 1", + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "1" + ] + }, + "537": { + "op": "itxn_field TypeEnum", + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0" + ] + }, + "539": { + "op": "intc_1 // 0", + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "0" + ] + }, + "540": { + "op": "itxn_field Fee", + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0" + ] + }, + "542": { + "op": "itxn_submit" + }, + "543": { + "op": "itxn_begin" + }, + "544": { + "op": "dup", + "defined_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "tmp%0#0" + ] + }, + "545": { + "op": "bnz new_ternary_false@5", + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0" + ] + }, + "548": { + "op": "txn Sender", + "defined_out": [ + "newEscrow#0", + "payment#0", + "ternary_result%0#0", + "tmp%0#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "ternary_result%0#0" + ] + }, + "550": { + "block": "new_ternary_merge@6", + "stack_in": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "ternary_result%0#0" + ], + "op": "pushbytes 0x65a97bcc // method \"rekey(address)void\"", + "defined_out": [ + "Method(rekey(address)void)" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "ternary_result%0#0", + "Method(rekey(address)void)" + ] + }, + "556": { + "op": "itxn_field ApplicationArgs", + "defined_out": [ + "ternary_result%0#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "ternary_result%0#0" + ] + }, + "558": { + "op": "itxn_field ApplicationArgs", + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0" + ] + }, + "560": { + "op": "intc_1 // 0", + "defined_out": [ + "0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "0" + ] + }, + "561": { + "op": "itxn_field OnCompletion", + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0" + ] + }, + "563": { + "op": "dig 2", + "defined_out": [ + "newEscrow#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "newEscrow#0" + ] + }, + "565": { + "op": "dup", + "defined_out": [ + "newEscrow#0", + "newEscrow#0 (copy)" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "newEscrow#0", + "newEscrow#0 (copy)" + ] + }, + "566": { + "op": "itxn_field ApplicationID", + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "newEscrow#0" + ] + }, + "568": { + "op": "pushint 6 // appl", + "defined_out": [ + "appl", + "newEscrow#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "newEscrow#0", + "appl" + ] + }, + "570": { + "op": "itxn_field TypeEnum", + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "newEscrow#0" + ] + }, + "572": { + "op": "intc_1 // 0", + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "newEscrow#0", + "0" + ] + }, + "573": { + "op": "itxn_field Fee", + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "newEscrow#0" + ] + }, + "575": { + "op": "itxn_submit" + }, + "576": { + "op": "itob", + "defined_out": [ + "aggregate%val_as_bytes%0#0", + "newEscrow#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "aggregate%val_as_bytes%0#0" + ] + }, + "577": { + "op": "bytec_0 // 0x151f7c75", + "defined_out": [ + "0x151f7c75", + "aggregate%val_as_bytes%0#0", + "newEscrow#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "aggregate%val_as_bytes%0#0", + "0x151f7c75" + ] + }, + "578": { + "op": "swap", + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "0x151f7c75", + "aggregate%val_as_bytes%0#0" + ] + }, + "579": { + "op": "concat", + "defined_out": [ + "newEscrow#0", + "tmp%3#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "tmp%3#0" + ] + }, + "580": { + "op": "log", + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0" + ] + }, + "581": { + "op": "intc_0 // 1", + "defined_out": [ + "1", + "newEscrow#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "1" + ] + }, + "582": { + "op": "return", + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0" + ] + }, + "583": { + "block": "new_ternary_false@5", + "stack_in": [ + "newEscrow#0", + "payment#0", + "tmp%0#0" + ], + "op": "global CallerApplicationAddress", + "defined_out": [ + "ternary_result%0#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "ternary_result%0#0" + ] + }, + "585": { + "op": "b new_ternary_merge@6" + }, + "588": { + "block": "new_ternary_false@9", + "stack_in": [ + "newEscrow#0", + "payment#0", + "tmp%0#0" + ], + "op": "global CallerApplicationID", + "defined_out": [ + "tmp%3#2" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "tmp%3#2" + ] + }, + "590": { + "op": "itob", + "defined_out": [ + "creator#0" + ], + "stack_out": [ + "newEscrow#0", + "payment#0", + "tmp%0#0", + "creator#0" + ] + }, + "591": { + "op": "b new_ternary_merge@10" + }, + "594": { + "subroutine": "smart_contracts/escrow/factory.algo.ts::EscrowFactory.register[routing]", + "params": {}, + "block": "register", + "stack_in": [], + "op": "txn GroupIndex", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] + }, + "596": { + "op": "intc_0 // 1", + "defined_out": [ + "1", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "1" + ] + }, + "597": { + "op": "-", + "defined_out": [ + "payment#0" + ], + "stack_out": [ + "payment#0" + ] + }, + "598": { + "op": "dup", + "defined_out": [ + "payment#0" + ], + "stack_out": [ + "payment#0", + "payment#0" + ] + }, + "599": { + "op": "gtxns TypeEnum", + "defined_out": [ + "gtxn_type%0#0", + "payment#0" + ], + "stack_out": [ + "payment#0", + "gtxn_type%0#0" + ] + }, + "601": { + "op": "intc_0 // pay", + "defined_out": [ + "gtxn_type%0#0", + "pay", + "payment#0" + ], + "stack_out": [ + "payment#0", + "gtxn_type%0#0", + "pay" + ] + }, + "602": { + "op": "==", + "defined_out": [ + "gtxn_type_matches%0#0", + "payment#0" + ], + "stack_out": [ + "payment#0", + "gtxn_type_matches%0#0" + ] + }, + "603": { + "error": "transaction type is pay", + "op": "assert // transaction type is pay", + "stack_out": [ + "payment#0" + ] + }, + "604": { + "op": "txna ApplicationArgs 1", + "defined_out": [ + "payment#0", + "tmp%1#0" + ], + "stack_out": [ + "payment#0", + "tmp%1#0" + ] + }, + "607": { + "op": "dup", + "defined_out": [ + "payment#0", + "tmp%1#0", + "tmp%1#0 (copy)" + ], + "stack_out": [ + "payment#0", + "tmp%1#0", + "tmp%1#0 (copy)" + ] + }, + "608": { + "op": "len", + "defined_out": [ + "len%0#0", + "payment#0", + "tmp%1#0" + ], + "stack_out": [ + "payment#0", + "tmp%1#0", + "len%0#0" + ] + }, + "609": { + "op": "pushint 8 // 8", + "defined_out": [ + "8", + "len%0#0", + "payment#0", + "tmp%1#0" + ], + "stack_out": [ + "payment#0", + "tmp%1#0", + "len%0#0", + "8" + ] + }, + "611": { + "op": "==", + "defined_out": [ + "eq%0#0", + "payment#0", + "tmp%1#0" + ], + "stack_out": [ + "payment#0", + "tmp%1#0", + "eq%0#0" + ] + }, + "612": { + "error": "invalid number of bytes for uint64", + "op": "assert // invalid number of bytes for uint64", + "stack_out": [ + "payment#0", + "tmp%1#0" + ] + }, + "613": { + "op": "btoi", + "defined_out": [ + "app#0", + "payment#0" + ], + "stack_out": [ + "payment#0", + "app#0" + ] + }, + "614": { + "op": "dup", + "stack_out": [ + "payment#0", + "app#0", + "app#0" + ] + }, + "615": { + "op": "global CallerApplicationID", + "stack_out": [ + "payment#0", + "app#0", + "app#0", + "tmp%0#0" + ] + }, + "617": { + "op": "assert", + "stack_out": [ + "payment#0", + "app#0", + "app#0" + ] + }, + "618": { + "op": "bz register_bool_true@3", + "stack_out": [ + "payment#0", + "app#0" + ] + }, + "621": { + "op": "dup", + "stack_out": [ + "payment#0", + "app#0", + "app#0" + ] + }, + "622": { + "op": "app_params_get AppCreator", + "defined_out": [ + "app#0", + "check%0#0", + "payment#0", + "value%0#0" + ], + "stack_out": [ + "payment#0", + "app#0", + "value%0#0", + "check%0#0" + ] + }, + "624": { + "error": "application exists", + "op": "assert // application exists", + "stack_out": [ + "payment#0", + "app#0", + "value%0#0" + ] + }, + "625": { + "op": "global CurrentApplicationAddress", + "defined_out": [ + "app#0", + "payment#0", + "tmp%3#0", + "value%0#0" + ], + "stack_out": [ + "payment#0", + "app#0", + "value%0#0", + "tmp%3#0" + ] + }, + "627": { + "op": "==", + "defined_out": [ + "app#0", + "payment#0", + "tmp%4#0" + ], + "stack_out": [ + "payment#0", + "app#0", + "tmp%4#0" + ] + }, + "628": { + "op": "bz register_bool_false@4", + "stack_out": [ + "payment#0", + "app#0" + ] + }, + "631": { + "block": "register_bool_true@3", + "stack_in": [ + "payment#0", + "app#0" + ], + "op": "intc_0 // 1", + "defined_out": [ + "or_result%0#0" + ], + "stack_out": [ + "payment#0", + "app#0", + "or_result%0#0" + ] + }, + "632": { + "error": "invalid app to register", + "block": "register_bool_merge@5", + "stack_in": [ + "payment#0", + "app#0", + "or_result%0#0" + ], + "op": "assert // invalid app to register", + "defined_out": [], + "stack_out": [ + "payment#0", + "app#0" + ] + }, + "633": { + "op": "dup", + "defined_out": [ + "app#0" + ], + "stack_out": [ + "payment#0", + "app#0", + "app#0" + ] + }, + "634": { + "op": "app_params_get AppCreator", + "defined_out": [ + "app#0", + "check%1#0", + "value%1#0" + ], + "stack_out": [ + "payment#0", + "app#0", + "value%1#0", + "check%1#0" + ] + }, + "636": { + "error": "application exists", + "op": "assert // application exists", + "stack_out": [ + "payment#0", + "app#0", + "value%1#0" + ] + }, + "637": { + "op": "global CurrentApplicationAddress", + "defined_out": [ + "app#0", + "tmp%5#0", + "value%1#0" + ], + "stack_out": [ + "payment#0", + "app#0", + "value%1#0", + "tmp%5#0" + ] + }, + "639": { + "op": "==", + "defined_out": [ + "app#0", + "tmp%6#0" + ], + "stack_out": [ + "payment#0", + "app#0", + "tmp%6#0" + ] + }, + "640": { + "op": "bz register_else_body@7", + "stack_out": [ + "payment#0", + "app#0" + ] + }, + "643": { + "op": "dup", + "stack_out": [ + "payment#0", + "app#0", + "app#0" + ] + }, + "644": { + "op": "pushbytes \"creator\"", + "defined_out": [ + "\"creator\"", + "app#0" + ], + "stack_out": [ + "payment#0", + "app#0", + "app#0", + "\"creator\"" + ] + }, + "653": { + "op": "app_global_get_ex", + "defined_out": [ + "app#0", + "creator#1", + "tmp%8#0" + ], + "stack_out": [ + "payment#0", + "app#0", + "creator#1", + "tmp%8#0" + ] + }, + "654": { + "op": "pop", + "stack_out": [ + "payment#0", + "app#0", + "creator#1" + ] + }, + "655": { + "op": "dup", + "defined_out": [ + "app#0", + "creator#1" + ], + "stack_out": [ + "payment#0", + "app#0", + "creator#1", + "creator#1" + ] + }, + "656": { + "op": "btoi", + "defined_out": [ + "app#0", + "creator#1", + "tmp%9#0" + ], + "stack_out": [ + "payment#0", + "app#0", + "creator#1", + "tmp%9#0" + ] + }, + "657": { + "op": "global CallerApplicationID", + "defined_out": [ + "app#0", + "creator#1", + "tmp%10#0", + "tmp%9#0" + ], + "stack_out": [ + "payment#0", + "app#0", + "creator#1", + "tmp%9#0", + "tmp%10#0" + ] + }, + "659": { + "op": "==", + "defined_out": [ + "app#0", + "creator#1", + "tmp%11#0" + ], + "stack_out": [ + "payment#0", + "app#0", + "creator#1", + "tmp%11#0" + ] + }, + "660": { + "error": "invalid creator", + "op": "assert // invalid creator", + "stack_out": [ + "payment#0", + "app#0", + "creator#1" + ] + }, + "661": { + "block": "register_after_if_else@8", + "stack_in": [ + "payment#0", + "app#0", + "creator#1" + ], + "op": "dig 1", + "defined_out": [ + "app#0" + ], + "stack_out": [ + "payment#0", + "app#0", + "creator#1", + "app#0" + ] + }, + "663": { + "op": "app_params_get AppAddress", + "defined_out": [ + "app#0", + "check%2#0", + "value%2#0" + ], + "stack_out": [ + "payment#0", + "app#0", + "creator#1", + "value%2#0", + "check%2#0" + ] + }, + "665": { + "error": "application exists", + "op": "assert // application exists", + "stack_out": [ + "payment#0", + "app#0", + "creator#1", + "value%2#0" + ] + }, + "666": { + "callsub": "smart_contracts/escrow/factory.algo.ts::bytes16", + "op": "callsub bytes16", + "defined_out": [ + "app#0", + "appAddress#0" + ], + "stack_out": [ + "payment#0", + "app#0", + "creator#1", + "appAddress#0" + ] + }, + "669": { + "op": "dup", + "defined_out": [ + "app#0", + "appAddress#0", + "appAddress#0 (copy)" + ], + "stack_out": [ + "payment#0", + "app#0", + "creator#1", + "appAddress#0", + "appAddress#0 (copy)" + ] + }, + "670": { + "op": "box_len", + "defined_out": [ + "_%0#0", + "app#0", + "appAddress#0", + "maybe_exists%0#0" + ], + "stack_out": [ + "payment#0", + "app#0", + "creator#1", + "appAddress#0", + "_%0#0", + "maybe_exists%0#0" + ] + }, + "671": { + "op": "bury 1", + "stack_out": [ + "payment#0", + "app#0", + "creator#1", + "appAddress#0", + "maybe_exists%0#0" + ] + }, + "673": { + "op": "!", + "defined_out": [ + "app#0", + "appAddress#0", + "tmp%16#0" + ], + "stack_out": [ + "payment#0", + "app#0", + "creator#1", + "appAddress#0", + "tmp%16#0" + ] + }, + "674": { + "error": "already registered", + "op": "assert // already registered", + "stack_out": [ + "payment#0", + "app#0", + "creator#1", + "appAddress#0" + ] + }, + "675": { + "op": "dig 3", + "defined_out": [ + "app#0", + "appAddress#0", + "payment#0" + ], + "stack_out": [ + "payment#0", + "app#0", + "creator#1", + "appAddress#0", + "payment#0" + ] + }, + "677": { + "op": "dup", + "defined_out": [ + "app#0", + "appAddress#0", + "payment#0", + "payment#0 (copy)" + ], + "stack_out": [ + "payment#0", + "app#0", + "creator#1", + "appAddress#0", + "payment#0", + "payment#0 (copy)" + ] + }, + "678": { + "op": "gtxns Receiver", + "defined_out": [ + "app#0", + "appAddress#0", + "payment#0", + "tmp%17#0" + ], + "stack_out": [ + "payment#0", + "app#0", + "creator#1", + "appAddress#0", + "payment#0", + "tmp%17#0" + ] + }, + "680": { + "op": "global CurrentApplicationAddress", + "defined_out": [ + "app#0", + "appAddress#0", + "payment#0", + "tmp%17#0", + "tmp%18#0" + ], + "stack_out": [ + "payment#0", + "app#0", + "creator#1", + "appAddress#0", + "payment#0", + "tmp%17#0", + "tmp%18#0" + ] + }, + "682": { + "op": "==", + "defined_out": [ + "app#0", + "appAddress#0", + "payment#0", + "tmp%19#0" + ], + "stack_out": [ + "payment#0", + "app#0", + "creator#1", + "appAddress#0", + "payment#0", + "tmp%19#0" + ] + }, + "683": { + "op": "swap", + "stack_out": [ + "payment#0", + "app#0", + "creator#1", + "appAddress#0", + "tmp%19#0", + "payment#0" + ] + }, + "684": { + "op": "gtxns Amount", + "defined_out": [ + "app#0", + "appAddress#0", + "payment#0", + "tmp%19#0", + "tmp%20#0" + ], + "stack_out": [ + "payment#0", + "app#0", + "creator#1", + "appAddress#0", + "tmp%19#0", + "tmp%20#0" + ] + }, + "686": { + "op": "uncover 3", + "defined_out": [ + "app#0", + "appAddress#0", + "creator#1", + "payment#0", + "tmp%19#0", + "tmp%20#0" + ], + "stack_out": [ + "payment#0", + "app#0", + "appAddress#0", + "tmp%19#0", + "tmp%20#0", + "creator#1" + ] + }, + "688": { + "op": "dup", + "defined_out": [ + "app#0", + "appAddress#0", + "creator#1 (copy)", + "payment#0", + "tmp%19#0", + "tmp%20#0" + ], + "stack_out": [ + "payment#0", + "app#0", + "appAddress#0", + "tmp%19#0", + "tmp%20#0", + "creator#1 (copy)", + "creator#1 (copy)" + ] + }, + "689": { + "op": "cover 3", + "stack_out": [ + "payment#0", + "app#0", + "appAddress#0", + "creator#1", + "tmp%19#0", + "tmp%20#0", + "creator#1 (copy)" + ] + }, + "691": { + "op": "len", + "defined_out": [ + "app#0", + "appAddress#0", + "creator#1", + "length#0", + "payment#0", + "tmp%19#0", + "tmp%20#0" + ], + "stack_out": [ + "payment#0", + "app#0", + "appAddress#0", + "creator#1", + "tmp%19#0", + "tmp%20#0", + "length#0" + ] + }, + "692": { + "op": "pushint 400 // 400", + "defined_out": [ + "400", + "app#0", + "appAddress#0", + "creator#1", + "length#0", + "payment#0", + "tmp%19#0", + "tmp%20#0" + ], + "stack_out": [ + "payment#0", + "app#0", + "appAddress#0", + "creator#1", + "tmp%19#0", + "tmp%20#0", + "length#0", + "400" + ] + }, + "695": { + "op": "*", + "defined_out": [ + "app#0", + "appAddress#0", + "creator#1", + "payment#0", + "tmp%0#0", + "tmp%19#0", + "tmp%20#0" + ], + "stack_out": [ + "payment#0", + "app#0", + "appAddress#0", + "creator#1", + "tmp%19#0", + "tmp%20#0", + "tmp%0#0" + ] + }, + "696": { + "op": "pushint 8900 // 8900", + "defined_out": [ + "8900", + "app#0", + "appAddress#0", + "creator#1", + "payment#0", + "tmp%0#0", + "tmp%19#0", + "tmp%20#0" + ], + "stack_out": [ + "payment#0", + "app#0", + "appAddress#0", + "creator#1", + "tmp%19#0", + "tmp%20#0", + "tmp%0#0", + "8900" + ] + }, + "699": { + "op": "+", + "defined_out": [ + "app#0", + "appAddress#0", + "creator#1", + "payment#0", + "tmp%1#1", + "tmp%19#0", + "tmp%20#0" + ], + "stack_out": [ + "payment#0", + "app#0", + "appAddress#0", + "creator#1", + "tmp%19#0", + "tmp%20#0", + "tmp%1#1" + ] + }, + "700": { + "op": "==", + "defined_out": [ + "app#0", + "appAddress#0", + "creator#1", + "payment#0", + "tmp%19#0", + "tmp%23#0" + ], + "stack_out": [ + "payment#0", + "app#0", + "appAddress#0", + "creator#1", + "tmp%19#0", + "tmp%23#0" + ] + }, + "701": { + "op": "&&", + "defined_out": [ + "app#0", + "appAddress#0", + "creator#1", + "payment#0", + "tmp%24#0" + ], + "stack_out": [ + "payment#0", + "app#0", + "appAddress#0", + "creator#1", + "tmp%24#0" + ] + }, + "702": { + "error": "invalid payment", + "op": "assert // invalid payment", + "stack_out": [ + "payment#0", + "app#0", + "appAddress#0", + "creator#1" + ] + }, + "703": { + "op": "dig 1", + "stack_out": [ + "payment#0", + "app#0", + "appAddress#0", + "creator#1", + "appAddress#0 (copy)" + ] + }, + "705": { + "op": "box_del", + "defined_out": [ + "app#0", + "appAddress#0", + "creator#1", + "payment#0", + "{box_del}" + ], + "stack_out": [ + "payment#0", + "app#0", + "appAddress#0", + "creator#1", + "{box_del}" + ] + }, + "706": { + "op": "pop", + "stack_out": [ + "payment#0", + "app#0", + "appAddress#0", + "creator#1" + ] + }, + "707": { + "op": "box_put", + "stack_out": [ + "payment#0", + "app#0" + ] + }, + "708": { + "op": "intc_0 // 1", + "defined_out": [ + "1", + "app#0", + "payment#0" + ], + "stack_out": [ + "payment#0", + "app#0", + "1" + ] + }, + "709": { + "op": "return", + "stack_out": [ + "payment#0", + "app#0" + ] + }, + "710": { + "block": "register_else_body@7", + "stack_in": [ + "payment#0", + "app#0" + ], + "op": "global CallerApplicationID", + "defined_out": [ + "tmp%12#0" + ], + "stack_out": [ + "payment#0", + "app#0", + "tmp%12#0" + ] + }, + "712": { + "op": "itob", + "defined_out": [ + "creator#1" + ], + "stack_out": [ + "payment#0", + "app#0", + "creator#1" + ] + }, + "713": { + "op": "global CallerApplicationID", + "defined_out": [ + "app#0", + "creator#1" + ], + "stack_out": [ + "payment#0", + "app#0", + "creator#1", + "app#0" + ] + }, + "715": { + "op": "bury 2", + "defined_out": [ + "app#0", + "creator#1" + ], + "stack_out": [ + "payment#0", + "app#0", + "creator#1" + ] + }, + "717": { + "op": "b register_after_if_else@8" + }, + "720": { + "block": "register_bool_false@4", + "stack_in": [ + "payment#0", + "app#0" + ], + "op": "intc_1 // 0", + "defined_out": [ + "or_result%0#0" + ], + "stack_out": [ + "payment#0", + "app#0", + "or_result%0#0" + ] + }, + "721": { + "op": "b register_bool_merge@5" + }, + "724": { + "subroutine": "smart_contracts/escrow/factory.algo.ts::EscrowFactory.delete[routing]", + "params": {}, + "block": "delete", + "stack_in": [], + "op": "bytec_1 // \"\"", + "stack_out": [ + "refundAmount#0" + ] + }, + "725": { + "op": "txna ApplicationArgs 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "refundAmount#0", + "tmp%0#0" + ] + }, + "728": { + "op": "dup", + "defined_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "refundAmount#0", + "tmp%0#0", + "tmp%0#0 (copy)" + ] + }, + "729": { + "op": "len", + "defined_out": [ + "len%0#0", + "tmp%0#0" + ], + "stack_out": [ + "refundAmount#0", + "tmp%0#0", + "len%0#0" + ] + }, + "730": { + "op": "pushint 8 // 8", + "defined_out": [ + "8", + "len%0#0", + "tmp%0#0" + ], + "stack_out": [ + "refundAmount#0", + "tmp%0#0", + "len%0#0", + "8" + ] + }, + "732": { + "op": "==", + "defined_out": [ + "eq%0#0", + "tmp%0#0" + ], + "stack_out": [ + "refundAmount#0", + "tmp%0#0", + "eq%0#0" + ] + }, + "733": { + "error": "invalid number of bytes for uint64", + "op": "assert // invalid number of bytes for uint64", + "stack_out": [ + "refundAmount#0", + "tmp%0#0" + ] + }, + "734": { + "op": "btoi", + "defined_out": [ + "id#0" + ], + "stack_out": [ + "refundAmount#0", + "id#0" + ] + }, + "735": { + "op": "dup", + "defined_out": [ + "id#0" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "id#0" + ] + }, + "736": { + "op": "global CallerApplicationID", + "defined_out": [ + "caller#0", + "id#0" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "id#0", + "caller#0" + ] + }, + "738": { + "op": "swap", + "defined_out": [ + "caller#0", + "id#0" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "id#0" + ] + }, + "739": { + "op": "app_params_get AppAddress", + "defined_out": [ + "caller#0", + "check%0#0", + "id#0", + "value%0#0" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "value%0#0", + "check%0#0" + ] + }, + "741": { + "error": "application exists", + "op": "assert // application exists", + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "value%0#0" + ] + }, + "742": { + "callsub": "smart_contracts/escrow/factory.algo.ts::bytes16", + "op": "callsub bytes16", + "defined_out": [ + "caller#0", + "id#0", + "key#0" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0" + ] + }, + "745": { + "op": "dupn 2", + "defined_out": [ + "caller#0", + "id#0", + "key#0", + "key#0 (copy)" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "key#0", + "key#0 (copy)" + ] + }, + "747": { + "op": "box_len", + "defined_out": [ + "_%0#0", + "caller#0", + "id#0", + "key#0", + "maybe_exists%0#0" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "key#0", + "_%0#0", + "maybe_exists%0#0" + ] + }, + "748": { + "op": "bury 1", + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "key#0", + "maybe_exists%0#0" + ] + }, + "750": { + "error": "does not exist", + "op": "assert // does not exist", + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "key#0" + ] + }, + "751": { + "op": "box_get", + "defined_out": [ + "aggregate%box_get%1#0", + "caller#0", + "creator#0", + "id#0", + "key#0" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "creator#0", + "aggregate%box_get%1#0" + ] + }, + "752": { + "op": "pop", + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "creator#0" + ] + }, + "753": { + "op": "dup", + "defined_out": [ + "caller#0", + "creator#0", + "id#0", + "key#0" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "creator#0", + "creator#0" + ] + }, + "754": { + "op": "len", + "defined_out": [ + "caller#0", + "creator#0", + "id#0", + "key#0", + "length#0" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "creator#0", + "length#0" + ] + }, + "755": { + "op": "dup", + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "creator#0", + "length#0", + "length#0" + ] + }, + "756": { + "op": "cover 2", + "defined_out": [ + "caller#0", + "creator#0", + "id#0", + "key#0", + "length#0" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "creator#0", + "length#0" + ] + }, + "758": { + "op": "pushint 8 // 8", + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "creator#0", + "length#0", + "8" + ] + }, + "760": { + "op": "==", + "defined_out": [ + "caller#0", + "creator#0", + "id#0", + "key#0", + "length#0", + "tmp%3#0" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "creator#0", + "tmp%3#0" + ] + }, + "761": { + "op": "dup", + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "creator#0", + "tmp%3#0", + "tmp%3#0" + ] + }, + "762": { + "op": "cover 2", + "defined_out": [ + "caller#0", + "creator#0", + "id#0", + "key#0", + "length#0", + "tmp%3#0" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0", + "creator#0", + "tmp%3#0" + ] + }, + "764": { + "op": "bz delete_else_body@3", + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0", + "creator#0" + ] + }, + "767": { + "op": "btoi", + "defined_out": [ + "caller#0", + "id#0", + "key#0", + "length#0", + "tmp%3#0", + "tmp%4#0" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0", + "tmp%4#0" + ] + }, + "768": { + "op": "dig 4", + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0", + "tmp%4#0", + "caller#0" + ] + }, + "770": { + "op": "==", + "defined_out": [ + "caller#0", + "id#0", + "key#0", + "length#0", + "tmp%3#0", + "tmp%5#0" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0", + "tmp%5#0" + ] + }, + "771": { + "error": "forbidden", + "op": "assert // forbidden", + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0" + ] + }, + "772": { + "block": "delete_after_if_else@4", + "stack_in": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0" + ], + "op": "dig 1", + "defined_out": [ + "length#0" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0", + "length#0" + ] + }, + "774": { + "op": "pushint 400 // 400", + "defined_out": [ + "400", + "length#0" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0", + "length#0", + "400" + ] + }, + "777": { + "op": "*", + "defined_out": [ + "length#0", + "tmp%0#1" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0", + "tmp%0#1" + ] + }, + "778": { + "op": "pushint 158900 // 158900", + "defined_out": [ + "158900", + "length#0", + "tmp%0#1" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0", + "tmp%0#1", + "158900" + ] + }, + "782": { + "op": "+", + "defined_out": [ + "length#0", + "refundAmount#0" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0", + "refundAmount#0" + ] + }, + "783": { + "op": "bury 6", + "defined_out": [ + "length#0", + "refundAmount#0" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0" + ] + }, + "785": { + "op": "itxn_begin" + }, + "786": { + "op": "pushbytes 0x24378d3c // method \"delete()void\"", + "defined_out": [ + "Method(delete()void)", + "length#0", + "refundAmount#0" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0", + "Method(delete()void)" + ] + }, + "792": { + "op": "itxn_field ApplicationArgs", + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0" + ] + }, + "794": { + "op": "pushint 5 // 5", + "defined_out": [ + "5", + "length#0", + "refundAmount#0" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0", + "5" + ] + }, + "796": { + "op": "itxn_field OnCompletion", + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0" + ] + }, + "798": { + "op": "dig 4", + "defined_out": [ + "id#0", + "length#0", + "refundAmount#0" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0", + "id#0" + ] + }, + "800": { + "op": "itxn_field ApplicationID", + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0" + ] + }, + "802": { + "op": "pushint 6 // appl", + "defined_out": [ + "appl", + "id#0", + "length#0", + "refundAmount#0" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0", + "appl" + ] + }, + "804": { + "op": "itxn_field TypeEnum", + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0" + ] + }, + "806": { + "op": "intc_1 // 0", + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0", + "0" + ] + }, + "807": { + "op": "itxn_field Fee", + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0" + ] + }, + "809": { + "op": "itxn_submit" + }, + "810": { + "op": "dig 2", + "defined_out": [ + "id#0", + "key#0", + "length#0", + "refundAmount#0" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0", + "key#0" + ] + }, + "812": { + "op": "box_del", + "defined_out": [ + "id#0", + "key#0", + "length#0", + "refundAmount#0", + "{box_del}" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0", + "{box_del}" + ] + }, + "813": { + "op": "pop", + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0" + ] + }, + "814": { + "op": "itxn_begin" + }, + "815": { + "op": "dup", + "defined_out": [ + "id#0", + "key#0", + "length#0", + "refundAmount#0", + "tmp%3#0" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0", + "tmp%3#0" + ] + }, + "816": { + "op": "bz delete_ternary_false@7", + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0" + ] + }, + "819": { + "op": "global CallerApplicationAddress", + "defined_out": [ + "id#0", + "key#0", + "length#0", + "refundAmount#0", + "ternary_result%0#0", + "tmp%3#0" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0", + "ternary_result%0#0" + ] + }, + "821": { + "block": "delete_ternary_merge@8", + "stack_in": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0", + "ternary_result%0#0" + ], + "op": "dig 6", + "defined_out": [ + "refundAmount#0" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0", + "ternary_result%0#0", + "refundAmount#0" + ] + }, + "823": { + "op": "itxn_field Amount", + "defined_out": [ + "refundAmount#0", + "ternary_result%0#0" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0", + "ternary_result%0#0" + ] + }, + "825": { + "op": "itxn_field Receiver", + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0" + ] + }, + "827": { + "op": "intc_0 // 1", + "defined_out": [ + "1", + "refundAmount#0" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0", + "1" + ] + }, + "828": { + "op": "itxn_field TypeEnum", + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0" + ] + }, + "830": { + "op": "intc_1 // 0", + "defined_out": [ + "0", + "refundAmount#0" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0", + "0" + ] + }, + "831": { + "op": "itxn_field Fee", + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0" + ] + }, + "833": { + "op": "itxn_submit" + }, + "834": { + "op": "intc_0 // 1", + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0", + "1" + ] + }, + "835": { + "op": "return", + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0" + ] + }, + "836": { + "block": "delete_ternary_false@7", + "stack_in": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0" + ], + "op": "txn Sender", + "defined_out": [ + "ternary_result%0#0" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0", + "ternary_result%0#0" + ] + }, + "838": { + "op": "b delete_ternary_merge@8" + }, + "841": { + "block": "delete_else_body@3", + "stack_in": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0", + "creator#0" + ], + "op": "txn Sender", + "defined_out": [ + "tmp%6#0" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0", + "creator#0", + "tmp%6#0" + ] + }, + "843": { + "callsub": "smart_contracts/escrow/factory.algo.ts::bytes16", + "op": "callsub bytes16", + "defined_out": [ + "tmp%7#0" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0", + "creator#0", + "tmp%7#0" + ] + }, + "846": { + "op": "==", + "defined_out": [ + "tmp%8#0" + ], + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0", + "tmp%8#0" + ] + }, + "847": { + "error": "forbidden", + "op": "assert // forbidden", + "stack_out": [ + "refundAmount#0", + "id#0", + "caller#0", + "key#0", + "length#0", + "tmp%3#0" + ] + }, + "848": { + "op": "b delete_after_if_else@4" + }, + "851": { + "subroutine": "smart_contracts/escrow/factory.algo.ts::EscrowFactory.cost[routing]", + "params": {}, + "block": "cost", + "stack_in": [], + "op": "intc 4 // 150000", + "defined_out": [ + "150000" + ], + "stack_out": [ + "150000" + ] + }, + "853": { + "op": "global MinBalance", + "defined_out": [ + "150000", + "tmp%0#1" + ], + "stack_out": [ + "150000", + "tmp%0#1" + ] + }, + "855": { + "op": "+", + "defined_out": [ + "tmp%1#1" + ], + "stack_out": [ + "tmp%1#1" + ] + }, + "856": { + "op": "itob", + "defined_out": [ + "aggregate%val_as_bytes%0#0" + ], + "stack_out": [ + "aggregate%val_as_bytes%0#0" + ] + }, + "857": { + "op": "bytec_0 // 0x151f7c75", + "defined_out": [ + "0x151f7c75", + "aggregate%val_as_bytes%0#0" + ], + "stack_out": [ + "aggregate%val_as_bytes%0#0", + "0x151f7c75" + ] + }, + "858": { + "op": "swap", + "stack_out": [ + "0x151f7c75", + "aggregate%val_as_bytes%0#0" + ] + }, + "859": { + "op": "concat", + "defined_out": [ + "tmp%2#0" + ], + "stack_out": [ + "tmp%2#0" + ] + }, + "860": { + "op": "log", + "stack_out": [] + }, + "861": { + "op": "intc_0 // 1", + "defined_out": [ + "1" + ], + "stack_out": [ + "1" + ] + }, + "862": { + "op": "return", + "stack_out": [] + }, + "863": { + "subroutine": "smart_contracts/escrow/factory.algo.ts::EscrowFactory.exists[routing]", + "params": {}, + "block": "exists", + "stack_in": [], + "op": "txna ApplicationArgs 1", + "defined_out": [ + "address#0" + ], + "stack_out": [ + "address#0" + ] + }, + "866": { + "op": "dup", + "defined_out": [ + "address#0", + "address#0 (copy)" + ], + "stack_out": [ + "address#0", + "address#0 (copy)" + ] + }, + "867": { + "op": "len", + "defined_out": [ + "address#0", + "len%0#0" + ], + "stack_out": [ + "address#0", + "len%0#0" + ] + }, + "868": { + "op": "intc_3 // 32", + "defined_out": [ + "32", + "address#0", + "len%0#0" + ], + "stack_out": [ + "address#0", + "len%0#0", + "32" + ] + }, + "869": { + "op": "==", + "defined_out": [ + "address#0", + "eq%0#0" + ], + "stack_out": [ + "address#0", + "eq%0#0" + ] + }, + "870": { + "error": "invalid number of bytes for uint8[32]", + "op": "assert // invalid number of bytes for uint8[32]", + "stack_out": [ + "address#0" + ] + }, + "871": { + "callsub": "smart_contracts/escrow/factory.algo.ts::bytes16", + "op": "callsub bytes16", + "defined_out": [ + "materialized_values%0#0" + ], + "stack_out": [ + "materialized_values%0#0" + ] + }, + "874": { + "op": "box_len", + "defined_out": [ + "_%0#0", + "maybe_exists%0#0" + ], + "stack_out": [ + "_%0#0", + "maybe_exists%0#0" + ] + }, + "875": { + "op": "bury 1", + "stack_out": [ + "maybe_exists%0#0" + ] + }, + "877": { + "op": "pushbytes 0x00", + "defined_out": [ + "0x00", + "maybe_exists%0#0" + ], + "stack_out": [ + "maybe_exists%0#0", + "0x00" + ] + }, + "880": { + "op": "intc_1 // 0", + "defined_out": [ + "0", + "0x00", + "maybe_exists%0#0" + ], + "stack_out": [ + "maybe_exists%0#0", + "0x00", + "0" + ] + }, + "881": { + "op": "uncover 2", + "stack_out": [ + "0x00", + "0", + "maybe_exists%0#0" + ] + }, + "883": { + "op": "setbit", + "defined_out": [ + "aggregate%encoded_bool%0#0" + ], + "stack_out": [ + "aggregate%encoded_bool%0#0" + ] + }, + "884": { + "op": "bytec_0 // 0x151f7c75", + "defined_out": [ + "0x151f7c75", + "aggregate%encoded_bool%0#0" + ], + "stack_out": [ + "aggregate%encoded_bool%0#0", + "0x151f7c75" + ] + }, + "885": { + "op": "swap", + "stack_out": [ + "0x151f7c75", + "aggregate%encoded_bool%0#0" + ] + }, + "886": { + "op": "concat", + "defined_out": [ + "tmp%3#0" + ], + "stack_out": [ + "tmp%3#0" + ] + }, + "887": { + "op": "log", + "stack_out": [] + }, + "888": { + "op": "intc_0 // 1", + "defined_out": [ + "1" + ], + "stack_out": [ + "1" + ] + }, + "889": { + "op": "return", + "stack_out": [] + }, + "890": { + "subroutine": "smart_contracts/escrow/factory.algo.ts::EscrowFactory.get[routing]", + "params": {}, + "block": "get", + "stack_in": [], + "op": "txna ApplicationArgs 1" + }, + "893": { + "op": "dupn 2", + "defined_out": [ + "address#0", + "address#0 (copy)" + ], + "stack_out": [ + "address#0", + "address#0", + "address#0 (copy)" + ] + }, + "895": { + "op": "len", + "defined_out": [ + "address#0", + "len%0#0" + ], + "stack_out": [ + "address#0", + "address#0", + "len%0#0" + ] + }, + "896": { + "op": "intc_3 // 32", + "defined_out": [ + "32", + "address#0", + "len%0#0" + ], + "stack_out": [ + "address#0", + "address#0", + "len%0#0", + "32" + ] + }, + "897": { + "op": "==", + "defined_out": [ + "address#0", + "eq%0#0" + ], + "stack_out": [ + "address#0", + "address#0", + "eq%0#0" + ] + }, + "898": { + "error": "invalid number of bytes for uint8[32]", + "op": "assert // invalid number of bytes for uint8[32]", + "stack_out": [ + "address#0", + "address#0" + ] + }, + "899": { + "callsub": "smart_contracts/escrow/factory.algo.ts::bytes16", + "op": "callsub bytes16", + "defined_out": [ + "address#0", + "materialized_values%0#0" + ], + "stack_out": [ + "address#0", + "materialized_values%0#0" + ] + }, + "902": { + "op": "box_len", + "defined_out": [ + "_%0#0", + "address#0", + "maybe_exists%0#0" + ], + "stack_out": [ + "address#0", + "_%0#0", + "maybe_exists%0#0" + ] + }, + "903": { + "op": "bury 1", + "stack_out": [ + "address#0", + "maybe_exists%0#0" + ] + }, + "905": { + "op": "bnz get_after_if_else@3", + "stack_out": [ + "address#0" + ] + }, + "908": { + "op": "bytec_1 // \"\"", + "defined_out": [ + "address#0", + "tmp%1#0" + ], + "stack_out": [ + "address#0", + "tmp%1#0" + ] + }, + "909": { + "block": "get_after_inlined_smart_contracts/escrow/factory.algo.ts::EscrowFactory.get@4", + "stack_in": [ + "address#0", + "tmp%1#0" + ], + "op": "dup", + "defined_out": [ + "tmp%1#0", + "tmp%1#0 (copy)" + ], + "stack_out": [ + "address#0", + "tmp%1#0", + "tmp%1#0 (copy)" + ] + }, + "910": { + "op": "len", + "defined_out": [ + "aggregate%length%0#0", + "tmp%1#0" + ], + "stack_out": [ + "address#0", + "tmp%1#0", + "aggregate%length%0#0" + ] + }, + "911": { + "op": "itob", + "defined_out": [ + "aggregate%as_bytes%0#0", + "tmp%1#0" + ], + "stack_out": [ + "address#0", + "tmp%1#0", + "aggregate%as_bytes%0#0" + ] + }, + "912": { + "op": "extract 6 2", + "defined_out": [ + "aggregate%length_uint16%0#0", + "tmp%1#0" + ], + "stack_out": [ + "address#0", + "tmp%1#0", + "aggregate%length_uint16%0#0" + ] + }, + "915": { + "op": "swap", + "stack_out": [ + "address#0", + "aggregate%length_uint16%0#0", + "tmp%1#0" + ] + }, + "916": { + "op": "concat", + "defined_out": [ + "aggregate%encoded_value%0#0" + ], + "stack_out": [ + "address#0", + "aggregate%encoded_value%0#0" + ] + }, + "917": { + "op": "bytec_0 // 0x151f7c75", + "defined_out": [ + "0x151f7c75", + "aggregate%encoded_value%0#0" + ], + "stack_out": [ + "address#0", + "aggregate%encoded_value%0#0", + "0x151f7c75" + ] + }, + "918": { + "op": "swap", + "stack_out": [ + "address#0", + "0x151f7c75", + "aggregate%encoded_value%0#0" + ] + }, + "919": { + "op": "concat", + "defined_out": [ + "tmp%3#0" + ], + "stack_out": [ + "address#0", + "tmp%3#0" + ] + }, + "920": { + "op": "log", + "stack_out": [ + "address#0" + ] + }, + "921": { + "op": "intc_0 // 1", + "defined_out": [ + "1" + ], + "stack_out": [ + "address#0", + "1" + ] + }, + "922": { + "op": "return", + "stack_out": [ + "address#0" + ] + }, + "923": { + "block": "get_after_if_else@3", + "stack_in": [ + "address#0" + ], + "op": "dup", + "defined_out": [ + "address#0" + ], + "stack_out": [ + "address#0", + "address#0" + ] + }, + "924": { + "callsub": "smart_contracts/escrow/factory.algo.ts::bytes16", + "op": "callsub bytes16", + "defined_out": [ + "address#0", + "materialized_values%1#0" + ], + "stack_out": [ + "address#0", + "materialized_values%1#0" + ] + }, + "927": { + "op": "box_get", + "defined_out": [ + "address#0", + "aggregate%box_get%0#0", + "aggregate%box_get%1#0" + ], + "stack_out": [ + "address#0", + "aggregate%box_get%0#0", + "aggregate%box_get%1#0" + ] + }, + "928": { + "error": "Box must have value", + "op": "assert // Box must have value", + "defined_out": [ + "address#0", + "tmp%1#0" + ], + "stack_out": [ + "address#0", + "tmp%1#0" + ] + }, + "929": { + "op": "b get_after_inlined_smart_contracts/escrow/factory.algo.ts::EscrowFactory.get@4" + }, + "932": { + "subroutine": "smart_contracts/escrow/factory.algo.ts::EscrowFactory.mustGet[routing]", + "params": {}, + "block": "mustGet", + "stack_in": [], + "op": "txna ApplicationArgs 1", + "defined_out": [ + "address#0" + ], + "stack_out": [ + "address#0" + ] + }, + "935": { + "op": "dup", + "defined_out": [ + "address#0", + "address#0 (copy)" + ], + "stack_out": [ + "address#0", + "address#0 (copy)" + ] + }, + "936": { + "op": "len", + "defined_out": [ + "address#0", + "len%0#0" + ], + "stack_out": [ + "address#0", + "len%0#0" + ] + }, + "937": { + "op": "intc_3 // 32", + "defined_out": [ + "32", + "address#0", + "len%0#0" + ], + "stack_out": [ + "address#0", + "len%0#0", + "32" + ] + }, + "938": { + "op": "==", + "defined_out": [ + "address#0", + "eq%0#0" + ], + "stack_out": [ + "address#0", + "eq%0#0" + ] + }, + "939": { + "error": "invalid number of bytes for uint8[32]", + "op": "assert // invalid number of bytes for uint8[32]", + "stack_out": [ + "address#0" + ] + }, + "940": { + "op": "dup", + "stack_out": [ + "address#0", + "address#0 (copy)" + ] + }, + "941": { + "callsub": "smart_contracts/escrow/factory.algo.ts::bytes16", + "op": "callsub bytes16", + "defined_out": [ + "address#0", + "materialized_values%0#0" + ], + "stack_out": [ + "address#0", + "materialized_values%0#0" + ] + }, + "944": { + "op": "box_len", + "defined_out": [ + "_%0#0", + "address#0", + "maybe_exists%0#0" + ], + "stack_out": [ + "address#0", + "_%0#0", + "maybe_exists%0#0" + ] + }, + "945": { + "op": "bury 1", + "stack_out": [ + "address#0", + "maybe_exists%0#0" + ] + }, + "947": { + "error": "Account not found", + "op": "assert // Account not found", + "stack_out": [ + "address#0" + ] + }, + "948": { + "callsub": "smart_contracts/escrow/factory.algo.ts::bytes16", + "op": "callsub bytes16", + "defined_out": [ + "materialized_values%1#0" + ], + "stack_out": [ + "materialized_values%1#0" + ] + }, + "951": { + "op": "box_get", + "defined_out": [ + "aggregate%box_get%0#0", + "aggregate%box_get%1#0" + ], + "stack_out": [ + "aggregate%box_get%0#0", + "aggregate%box_get%1#0" + ] + }, + "952": { + "error": "Box must have value", + "op": "assert // Box must have value", + "stack_out": [ + "aggregate%box_get%0#0" + ] + }, + "953": { + "op": "dup", + "defined_out": [ + "aggregate%box_get%0#0", + "aggregate%box_get%0#0 (copy)" + ], + "stack_out": [ + "aggregate%box_get%0#0", + "aggregate%box_get%0#0 (copy)" + ] + }, + "954": { + "op": "len", + "defined_out": [ + "aggregate%box_get%0#0", + "aggregate%length%0#0" + ], + "stack_out": [ + "aggregate%box_get%0#0", + "aggregate%length%0#0" + ] + }, + "955": { + "op": "itob", + "defined_out": [ + "aggregate%as_bytes%0#0", + "aggregate%box_get%0#0" + ], + "stack_out": [ + "aggregate%box_get%0#0", + "aggregate%as_bytes%0#0" + ] + }, + "956": { + "op": "extract 6 2", + "defined_out": [ + "aggregate%box_get%0#0", + "aggregate%length_uint16%0#0" + ], + "stack_out": [ + "aggregate%box_get%0#0", + "aggregate%length_uint16%0#0" + ] + }, + "959": { + "op": "swap", + "stack_out": [ + "aggregate%length_uint16%0#0", + "aggregate%box_get%0#0" + ] + }, + "960": { + "op": "concat", + "defined_out": [ + "aggregate%encoded_value%0#0" + ], + "stack_out": [ + "aggregate%encoded_value%0#0" + ] + }, + "961": { + "op": "bytec_0 // 0x151f7c75", + "defined_out": [ + "0x151f7c75", + "aggregate%encoded_value%0#0" + ], + "stack_out": [ + "aggregate%encoded_value%0#0", + "0x151f7c75" + ] + }, + "962": { + "op": "swap", + "stack_out": [ + "0x151f7c75", + "aggregate%encoded_value%0#0" + ] + }, + "963": { + "op": "concat", + "defined_out": [ + "tmp%3#0" + ], + "stack_out": [ + "tmp%3#0" + ] + }, + "964": { + "op": "log", + "stack_out": [] + }, + "965": { + "op": "intc_0 // 1", + "defined_out": [ + "1" + ], + "stack_out": [ + "1" + ] + }, + "966": { + "op": "return", + "stack_out": [] + }, + "967": { + "subroutine": "smart_contracts/escrow/factory.algo.ts::EscrowFactory.getList[routing]", + "params": {}, + "block": "getList", + "stack_in": [], + "op": "intc_1 // 0", + "stack_out": [ + "address#0" + ] + }, + "968": { + "op": "txna ApplicationArgs 1" + }, + "971": { + "op": "dupn 2", + "defined_out": [ + "addresses#0", + "addresses#0 (copy)" + ], + "stack_out": [ + "address#0", + "addresses#0", + "addresses#0", + "addresses#0 (copy)" + ] + }, + "973": { + "op": "intc_1 // 0", + "stack_out": [ + "address#0", + "addresses#0", + "addresses#0", + "addresses#0 (copy)", + "0" + ] + }, + "974": { + "op": "extract_uint16", + "defined_out": [ + "addresses#0", + "aggregate%array_length%0#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "addresses#0", + "aggregate%array_length%0#0" + ] + }, + "975": { + "op": "dup", + "stack_out": [ + "address#0", + "addresses#0", + "addresses#0", + "aggregate%array_length%0#0", + "aggregate%array_length%0#0" + ] + }, + "976": { + "op": "cover 2", + "defined_out": [ + "addresses#0", + "aggregate%array_length%0#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "addresses#0", + "aggregate%array_length%0#0" + ] + }, + "978": { + "op": "intc_3 // 32", + "defined_out": [ + "32", + "addresses#0", + "aggregate%array_length%0#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "addresses#0", + "aggregate%array_length%0#0", + "32" + ] + }, + "979": { + "op": "*", + "defined_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "mul%0#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "addresses#0", + "mul%0#0" + ] + }, + "980": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "addresses#0", + "aggregate%array_length%0#0", + "mul%0#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "addresses#0", + "mul%0#0", + "2" + ] + }, + "981": { + "op": "+", + "defined_out": [ + "add%0#0", + "addresses#0", + "aggregate%array_length%0#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "addresses#0", + "add%0#0" + ] + }, + "982": { + "op": "swap", + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "add%0#0", + "addresses#0" + ] + }, + "983": { + "op": "len", + "defined_out": [ + "add%0#0", + "addresses#0", + "aggregate%array_length%0#0", + "len%0#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "add%0#0", + "len%0#0" + ] + }, + "984": { + "op": "==", + "defined_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "eq%0#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "eq%0#0" + ] + }, + "985": { + "error": "invalid number of bytes for (len+uint8[32][])", + "op": "assert // invalid number of bytes for (len+uint8[32][])", + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0" + ] + }, + "986": { + "op": "bytec_2 // 0x0000" + }, + "987": { + "op": "intc_1 // 0", + "defined_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0" + ] + }, + "988": { + "block": "getList_while_top@2", + "stack_in": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0" + ], + "op": "dup", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "i#0" + ] + }, + "989": { + "op": "dig 3", + "defined_out": [ + "aggregate%array_length%0#0", + "i#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "i#0", + "aggregate%array_length%0#0" + ] + }, + "991": { + "op": "<", + "defined_out": [ + "aggregate%array_length%0#0", + "i#0", + "tmp%1#1" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "tmp%1#1" + ] + }, + "992": { + "op": "bz getList_after_while@7", + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0" + ] + }, + "995": { + "op": "dig 3", + "defined_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "i#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "addresses#0" + ] + }, + "997": { + "op": "extract 2 0", + "defined_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "aggregate%array_trimmed%0#0", + "i#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "aggregate%array_trimmed%0#0" + ] + }, + "1000": { + "op": "dig 1", + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "aggregate%array_trimmed%0#0", + "i#0" + ] + }, + "1002": { + "op": "intc_3 // 32", + "defined_out": [ + "32", + "addresses#0", + "aggregate%array_length%0#0", + "aggregate%array_trimmed%0#0", + "i#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "aggregate%array_trimmed%0#0", + "i#0", + "32" + ] + }, + "1003": { + "op": "*", + "defined_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0", + "i#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0" + ] + }, + "1004": { + "op": "intc_3 // 32", + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0", + "32" + ] + }, + "1005": { + "error": "index access is out of bounds", + "op": "extract3 // on error: index access is out of bounds", + "defined_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "i#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "address#0" + ] + }, + "1006": { + "op": "dup", + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "address#0", + "address#0" + ] + }, + "1007": { + "op": "bury 6", + "defined_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "i#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "address#0" + ] + }, + "1009": { + "callsub": "smart_contracts/escrow/factory.algo.ts::bytes16", + "op": "callsub bytes16", + "defined_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "i#0", + "materialized_values%0#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "materialized_values%0#0" + ] + }, + "1012": { + "op": "box_len", + "defined_out": [ + "_%0#0", + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "i#0", + "maybe_exists%0#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "_%0#0", + "maybe_exists%0#0" + ] + }, + "1013": { + "op": "bury 1", + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "maybe_exists%0#0" + ] + }, + "1015": { + "op": "bz getList_else_body@5", + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0" + ] + }, + "1018": { + "op": "dig 4", + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "address#0" + ] + }, + "1020": { + "callsub": "smart_contracts/escrow/factory.algo.ts::bytes16", + "op": "callsub bytes16", + "defined_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "i#0", + "materialized_values%1#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "materialized_values%1#0" + ] + }, + "1023": { + "op": "box_get", + "defined_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "aggregate%box_get%0#0", + "aggregate%box_get%1#0", + "i#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "aggregate%box_get%0#0", + "aggregate%box_get%1#0" + ] + }, + "1024": { + "error": "Box must have value", + "op": "assert // Box must have value", + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "aggregate%box_get%0#0" + ] + }, + "1025": { + "op": "dup", + "defined_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "aggregate%box_get%0#0", + "aggregate%box_get%0#0 (copy)", + "i#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "aggregate%box_get%0#0", + "aggregate%box_get%0#0 (copy)" + ] + }, + "1026": { + "op": "len", + "defined_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "aggregate%box_get%0#0", + "aggregate%length%0#0", + "i#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "aggregate%box_get%0#0", + "aggregate%length%0#0" + ] + }, + "1027": { + "op": "itob", + "defined_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "aggregate%as_bytes%1#0", + "aggregate%box_get%0#0", + "i#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "aggregate%box_get%0#0", + "aggregate%as_bytes%1#0" + ] + }, + "1028": { + "op": "extract 6 2", + "defined_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "aggregate%box_get%0#0", + "aggregate%length_uint16%0#0", + "i#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "aggregate%box_get%0#0", + "aggregate%length_uint16%0#0" + ] + }, + "1031": { + "op": "swap", + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "aggregate%length_uint16%0#0", + "aggregate%box_get%0#0" + ] + }, + "1032": { + "op": "concat", + "defined_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "aggregate%encoded_value%0#0", + "i#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "aggregate%encoded_value%0#0" + ] + }, + "1033": { + "op": "dig 2", + "defined_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "aggregate%encoded_value%0#0", + "apps#0", + "i#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "aggregate%encoded_value%0#0", + "apps#0" + ] + }, + "1035": { + "op": "swap", + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "apps#0", + "aggregate%encoded_value%0#0" + ] + }, + "1036": { + "op": "intc_0 // 1", + "defined_out": [ + "1", + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "aggregate%encoded_value%0#0", + "apps#0", + "i#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "apps#0", + "aggregate%encoded_value%0#0", + "1" + ] + }, + "1037": { + "callsub": "_puya_lib.arc4.dynamic_array_concat_byte_length_head", + "op": "callsub dynamic_array_concat_byte_length_head", + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "apps#0" + ] + }, + "1040": { + "op": "bury 2", + "defined_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0" + ] + }, + "1042": { + "block": "getList_after_if_else@6", + "stack_in": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0" + ], + "op": "dup", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "i#0" + ] + }, + "1043": { + "op": "intc_0 // 1", + "defined_out": [ + "1", + "i#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "i#0", + "1" + ] + }, + "1044": { + "op": "+", + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "i#0" + ] + }, + "1045": { + "op": "bury 1", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0" + ] + }, + "1047": { + "op": "b getList_while_top@2" + }, + "1050": { + "block": "getList_else_body@5", + "stack_in": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0" + ], + "op": "dig 1", + "defined_out": [ + "apps#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "apps#0" + ] + }, + "1052": { + "op": "bytec_2 // 0x0000", + "defined_out": [ + "0x0000", + "apps#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "apps#0", + "0x0000" + ] + }, + "1053": { + "op": "intc_0 // 1", + "defined_out": [ + "0x0000", + "1", + "apps#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "apps#0", + "0x0000", + "1" + ] + }, + "1054": { + "callsub": "_puya_lib.arc4.dynamic_array_concat_byte_length_head", + "op": "callsub dynamic_array_concat_byte_length_head", + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "apps#0" + ] + }, + "1057": { + "op": "bury 2", + "defined_out": [ + "apps#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0" + ] + }, + "1059": { + "op": "b getList_after_if_else@6" + }, + "1062": { + "block": "getList_after_while@7", + "stack_in": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0" + ], + "op": "bytec_0 // 0x151f7c75", + "defined_out": [ + "0x151f7c75" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "0x151f7c75" + ] + }, + "1063": { + "op": "dig 2", + "defined_out": [ + "0x151f7c75", + "apps#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "0x151f7c75", + "apps#0" + ] + }, + "1065": { + "op": "concat", + "defined_out": [ + "apps#0", + "tmp%2#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "tmp%2#0" + ] + }, + "1066": { + "op": "log", + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0" + ] + }, + "1067": { + "op": "intc_0 // 1", + "defined_out": [ + "1", + "apps#0" + ], + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "1" + ] + }, + "1068": { + "op": "return", + "stack_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0" + ] + }, + "1069": { + "subroutine": "smart_contracts/escrow/factory.algo.ts::EscrowFactory.mustGetList[routing]", + "params": {}, + "block": "mustGetList", + "stack_in": [], + "op": "txna ApplicationArgs 1" + }, + "1072": { + "op": "dupn 2", + "defined_out": [ + "addresses#0", + "addresses#0 (copy)" + ], + "stack_out": [ + "addresses#0", + "addresses#0", + "addresses#0 (copy)" + ] + }, + "1074": { + "op": "intc_1 // 0", + "stack_out": [ + "addresses#0", + "addresses#0", + "addresses#0 (copy)", + "0" + ] + }, + "1075": { + "op": "extract_uint16", + "defined_out": [ + "addresses#0", + "aggregate%array_length%0#0" + ], + "stack_out": [ + "addresses#0", + "addresses#0", + "aggregate%array_length%0#0" + ] + }, + "1076": { + "op": "dup", + "stack_out": [ + "addresses#0", + "addresses#0", + "aggregate%array_length%0#0", + "aggregate%array_length%0#0" + ] + }, + "1077": { + "op": "cover 2", + "defined_out": [ + "addresses#0", + "aggregate%array_length%0#0" + ], + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "addresses#0", + "aggregate%array_length%0#0" + ] + }, + "1079": { + "op": "intc_3 // 32", + "defined_out": [ + "32", + "addresses#0", + "aggregate%array_length%0#0" + ], + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "addresses#0", + "aggregate%array_length%0#0", + "32" + ] + }, + "1080": { + "op": "*", + "defined_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "mul%0#0" + ], + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "addresses#0", + "mul%0#0" + ] + }, + "1081": { + "op": "intc_2 // 2", + "defined_out": [ + "2", + "addresses#0", + "aggregate%array_length%0#0", + "mul%0#0" + ], + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "addresses#0", + "mul%0#0", + "2" + ] + }, + "1082": { + "op": "+", + "defined_out": [ + "add%0#0", + "addresses#0", + "aggregate%array_length%0#0" + ], + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "addresses#0", + "add%0#0" + ] + }, + "1083": { + "op": "swap", + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "add%0#0", + "addresses#0" + ] + }, + "1084": { + "op": "len", + "defined_out": [ + "add%0#0", + "addresses#0", + "aggregate%array_length%0#0", + "len%0#0" + ], + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "add%0#0", + "len%0#0" + ] + }, + "1085": { + "op": "==", + "defined_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "eq%0#0" + ], + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "eq%0#0" + ] + }, + "1086": { + "error": "invalid number of bytes for (len+uint8[32][])", + "op": "assert // invalid number of bytes for (len+uint8[32][])", + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0" + ] + }, + "1087": { + "op": "bytec_2 // 0x0000" + }, + "1088": { + "op": "intc_1 // 0", + "defined_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0" + ], + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0" + ] + }, + "1089": { + "block": "mustGetList_while_top@2", + "stack_in": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0" + ], + "op": "dup", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "i#0" + ] + }, + "1090": { + "op": "dig 3", + "defined_out": [ + "aggregate%array_length%0#0", + "i#0" + ], + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "i#0", + "aggregate%array_length%0#0" + ] + }, + "1092": { + "op": "<", + "defined_out": [ + "aggregate%array_length%0#0", + "i#0", + "tmp%1#1" + ], + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "tmp%1#1" + ] + }, + "1093": { + "op": "bz mustGetList_after_while@4", + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0" + ] + }, + "1096": { + "op": "dig 3", + "defined_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "i#0" + ], + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "addresses#0" + ] + }, + "1098": { + "op": "extract 2 0", + "defined_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "aggregate%array_trimmed%0#0", + "i#0" + ], + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "aggregate%array_trimmed%0#0" + ] + }, + "1101": { + "op": "dig 1", + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "aggregate%array_trimmed%0#0", + "i#0" + ] + }, + "1103": { + "op": "dup", + "defined_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "aggregate%array_trimmed%0#0", + "i#0", + "i#0 (copy)" + ], + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "aggregate%array_trimmed%0#0", + "i#0 (copy)", + "i#0 (copy)" + ] + }, + "1104": { + "op": "cover 2", + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "i#0", + "aggregate%array_trimmed%0#0", + "i#0 (copy)" + ] + }, + "1106": { + "op": "intc_3 // 32", + "defined_out": [ + "32", + "addresses#0", + "aggregate%array_length%0#0", + "aggregate%array_trimmed%0#0", + "i#0", + "i#0 (copy)" + ], + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "i#0", + "aggregate%array_trimmed%0#0", + "i#0 (copy)", + "32" + ] + }, + "1107": { + "op": "*", + "defined_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0", + "i#0" + ], + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "i#0", + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0" + ] + }, + "1108": { + "op": "intc_3 // 32", + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "i#0", + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0", + "32" + ] + }, + "1109": { + "error": "index access is out of bounds", + "op": "extract3 // on error: index access is out of bounds", + "defined_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "i#0" + ], + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "i#0", + "address#0" + ] + }, + "1110": { + "op": "dup", + "defined_out": [ + "address#0", + "address#0 (copy)", + "addresses#0", + "aggregate%array_length%0#0", + "i#0" + ], + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "i#0", + "address#0", + "address#0 (copy)" + ] + }, + "1111": { + "callsub": "smart_contracts/escrow/factory.algo.ts::bytes16", + "op": "callsub bytes16", + "defined_out": [ + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "i#0", + "materialized_values%0#0" + ], + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "i#0", + "address#0", + "materialized_values%0#0" + ] + }, + "1114": { + "op": "box_len", + "defined_out": [ + "_%0#0", + "address#0", + "addresses#0", + "aggregate%array_length%0#0", + "i#0", + "maybe_exists%0#0" + ], + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "i#0", + "address#0", + "_%0#0", + "maybe_exists%0#0" + ] + }, + "1115": { + "op": "bury 1", + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "i#0", + "address#0", + "maybe_exists%0#0" + ] + }, + "1117": { + "error": "Account not found", + "op": "assert // Account not found", + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "i#0", + "address#0" + ] + }, + "1118": { + "callsub": "smart_contracts/escrow/factory.algo.ts::bytes16", + "op": "callsub bytes16", + "defined_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "i#0", + "materialized_values%1#0" + ], + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "i#0", + "materialized_values%1#0" + ] + }, + "1121": { + "op": "box_get", + "defined_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "aggregate%box_get%0#0", + "aggregate%box_get%1#0", + "i#0" + ], + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "i#0", + "aggregate%box_get%0#0", + "aggregate%box_get%1#0" + ] + }, + "1122": { + "error": "Box must have value", + "op": "assert // Box must have value", + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "i#0", + "aggregate%box_get%0#0" + ] + }, + "1123": { + "op": "dup", + "defined_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "aggregate%box_get%0#0", + "aggregate%box_get%0#0 (copy)", + "i#0" + ], + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "i#0", + "aggregate%box_get%0#0", + "aggregate%box_get%0#0 (copy)" + ] + }, + "1124": { + "op": "len", + "defined_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "aggregate%box_get%0#0", + "aggregate%length%0#0", + "i#0" + ], + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "i#0", + "aggregate%box_get%0#0", + "aggregate%length%0#0" + ] + }, + "1125": { + "op": "itob", + "defined_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "aggregate%as_bytes%1#0", + "aggregate%box_get%0#0", + "i#0" + ], + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "i#0", + "aggregate%box_get%0#0", + "aggregate%as_bytes%1#0" + ] + }, + "1126": { + "op": "extract 6 2", + "defined_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "aggregate%box_get%0#0", + "aggregate%length_uint16%0#0", + "i#0" + ], + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "i#0", + "aggregate%box_get%0#0", + "aggregate%length_uint16%0#0" + ] + }, + "1129": { + "op": "swap", + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "i#0", + "aggregate%length_uint16%0#0", + "aggregate%box_get%0#0" + ] + }, + "1130": { + "op": "concat", + "defined_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "aggregate%encoded_value%0#0", + "i#0" + ], + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "i#0", + "aggregate%encoded_value%0#0" + ] + }, + "1131": { + "op": "dig 3", + "defined_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "aggregate%encoded_value%0#0", + "apps#0", + "i#0" + ], + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "i#0", + "aggregate%encoded_value%0#0", + "apps#0" + ] + }, + "1133": { + "op": "swap", + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "i#0", + "apps#0", + "aggregate%encoded_value%0#0" + ] + }, + "1134": { + "op": "intc_0 // 1", + "defined_out": [ + "1", + "addresses#0", + "aggregate%array_length%0#0", + "aggregate%encoded_value%0#0", + "apps#0", + "i#0" + ], + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "i#0", + "apps#0", + "aggregate%encoded_value%0#0", + "1" + ] + }, + "1135": { + "callsub": "_puya_lib.arc4.dynamic_array_concat_byte_length_head", + "op": "callsub dynamic_array_concat_byte_length_head", + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "i#0", + "apps#0" + ] + }, + "1138": { + "op": "bury 3", + "defined_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0" + ], + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "i#0" + ] + }, + "1140": { + "op": "intc_0 // 1", + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "i#0", + "1" + ] + }, + "1141": { + "op": "+", + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "i#0" + ] + }, + "1142": { + "op": "bury 1", + "defined_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0" + ], + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0" + ] + }, + "1144": { + "op": "b mustGetList_while_top@2" + }, + "1147": { + "block": "mustGetList_after_while@4", + "stack_in": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0" + ], + "op": "bytec_0 // 0x151f7c75", + "defined_out": [ + "0x151f7c75" + ], + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "0x151f7c75" + ] + }, + "1148": { + "op": "dig 2", + "defined_out": [ + "0x151f7c75", + "apps#0" + ], + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "0x151f7c75", + "apps#0" + ] + }, + "1150": { + "op": "concat", + "defined_out": [ + "apps#0", + "tmp%2#0" + ], + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "tmp%2#0" + ] + }, + "1151": { + "op": "log", + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0" + ] + }, + "1152": { + "op": "intc_0 // 1", + "defined_out": [ + "1", + "apps#0" + ], + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0", + "1" + ] + }, + "1153": { + "op": "return", + "stack_out": [ + "addresses#0", + "aggregate%array_length%0#0", + "apps#0", + "i#0" + ] + } + } +} \ No newline at end of file diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/EscrowFactory.approval.teal b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/EscrowFactory.approval.teal new file mode 100644 index 000000000..d59d62df6 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/EscrowFactory.approval.teal @@ -0,0 +1,982 @@ +#pragma version 11 +#pragma typetrack false + +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: + intcblock 1 0 2 32 150000 + bytecblock 0x151f7c75 "" 0x0000 + // smart_contracts/escrow/factory.algo.ts:14 + // export class EscrowFactory extends Contract { + txn NumAppArgs + bz main___algots__.defaultCreate@17 + txn OnCompletion + ! + assert // OnCompletion must be NoOp + txn ApplicationID + assert + pushbytess 0xd85cf184 0x607e7046 0x8a39e79f 0x9b67fa6d 0x3c754120 0x4c9fb656 0x3c1a6f33 0x2b5602a3 0x13dc508a 0x475d3773 // method "new(pay)uint64", method "register(pay,uint64)void", method "delete(uint64)void", method "cost()uint64", method "registerCost()uint64", method "exists(address)bool", method "get(address)byte[]", method "mustGet(address)byte[]", method "getList(address[])byte[][]", method "mustGetList(address[])byte[][]" + txna ApplicationArgs 0 + match new register delete cost main_registerCost_route@8 exists get mustGet getList mustGetList + err + +main_registerCost_route@8: + // smart_contracts/escrow/factory.algo.ts:147 + // @abimethod({ readonly: true }) + pushbytes 0x151f7c750000000000002f44 + log + intc_0 // 1 + return + +main___algots__.defaultCreate@17: + // smart_contracts/escrow/factory.algo.ts:14 + // export class EscrowFactory extends Contract { + txn OnCompletion + ! + txn ApplicationID + ! + && + return // on error: OnCompletion must be NoOp && can only call when creating + + +// _puya_lib.arc4.dynamic_array_concat_byte_length_head(array: bytes, new_items_bytes: bytes, new_items_count: uint64) -> bytes: +dynamic_array_concat_byte_length_head: + proto 3 1 + frame_dig -3 + intc_1 // 0 + extract_uint16 + dup + frame_dig -1 + + + swap + intc_2 // 2 + * + intc_2 // 2 + + + dig 1 + itob + extract 6 2 + cover 2 + frame_dig -3 + intc_2 // 2 + dig 2 + substring3 + frame_dig -1 + intc_2 // 2 + * + bzero + concat + frame_dig -3 + len + frame_dig -3 + uncover 3 + uncover 2 + substring3 + concat + frame_dig -2 + concat + swap + intc_2 // 2 + * + dup + intc_1 // 0 + +dynamic_array_concat_byte_length_head_for_header@2: + frame_dig 4 + frame_dig 2 + < + bz dynamic_array_concat_byte_length_head_after_for@5 + frame_dig 3 + dup + itob + extract 6 2 + frame_dig 1 + frame_dig 4 + dup + cover 4 + uncover 2 + replace3 + dup + frame_bury 1 + dig 1 + extract_uint16 + intc_2 // 2 + + + + + frame_bury 3 + intc_2 // 2 + + + frame_bury 4 + b dynamic_array_concat_byte_length_head_for_header@2 + +dynamic_array_concat_byte_length_head_after_for@5: + frame_dig 0 + frame_dig 1 + concat + frame_bury 0 + retsub + + +// smart_contracts/escrow/factory.algo.ts::bytes16(acc: bytes) -> bytes: +bytes16: + // smart_contracts/escrow/factory.algo.ts:10 + // function bytes16(acc: Account): bytes<16> { + proto 1 1 + // smart_contracts/escrow/factory.algo.ts:11 + // return acc.bytes.slice(0, 16).toFixed({ length: 16 }) + frame_dig -1 + len + intc_1 // 0 + dig 1 + >= + intc_1 // 0 + dig 2 + uncover 2 + select + pushint 16 // 16 + dig 2 + >= + pushint 16 // 16 + uncover 3 + uncover 2 + select + frame_dig -1 + cover 2 + substring3 + dup + len + pushint 16 // 16 + == + assert // Length must be 16 + retsub + + +// smart_contracts/escrow/factory.algo.ts::EscrowFactory.new[routing]() -> void: +new: + bytec_1 // "" + // smart_contracts/escrow/factory.algo.ts:30 + // new(payment: gtxn.PaymentTxn): uint64 { + txn GroupIndex + intc_0 // 1 + - + dup + gtxns TypeEnum + intc_0 // pay + == + assert // transaction type is pay + // smart_contracts/escrow/factory.algo.ts:31 + // const nonAppCaller = Global.callerApplicationId === 0 + global CallerApplicationID + // smart_contracts/escrow/factory.algo.ts:24 + // const nonAppCaller = Global.callerApplicationId === 0 + dup + // smart_contracts/escrow/factory.algo.ts:25-27 + // return nonAppCaller + // ? Bytes(bytes16(Txn.sender)) + // : Bytes(itob(Global.callerApplicationId)) + bnz new_ternary_false@9 + // smart_contracts/escrow/factory.algo.ts:26 + // ? Bytes(bytes16(Txn.sender)) + txn Sender + callsub bytes16 + +new_ternary_merge@10: + // smart_contracts/escrow/factory.algo.ts:41-48 + // assertMatch( + // payment, + // { + // receiver: Global.currentApplicationAddress, + // amount: childAppMBR + Global.minBalance, + // }, + // ERR_INVALID_PAYMENT + // ) + dig 2 + dup + gtxns Receiver + // smart_contracts/escrow/factory.algo.ts:44 + // receiver: Global.currentApplicationAddress, + global CurrentApplicationAddress + // smart_contracts/escrow/factory.algo.ts:41-48 + // assertMatch( + // payment, + // { + // receiver: Global.currentApplicationAddress, + // amount: childAppMBR + Global.minBalance, + // }, + // ERR_INVALID_PAYMENT + // ) + == + swap + gtxns Amount + // smart_contracts/escrow/factory.algo.ts:45 + // amount: childAppMBR + Global.minBalance, + intc 4 // 150000 + global MinBalance + + + // smart_contracts/escrow/factory.algo.ts:41-48 + // assertMatch( + // payment, + // { + // receiver: Global.currentApplicationAddress, + // amount: childAppMBR + Global.minBalance, + // }, + // ERR_INVALID_PAYMENT + // ) + == + && + assert // invalid payment + // smart_contracts/escrow/factory.algo.ts:50-54 + // const newEscrow = escrow.call.create( + // { + // args: [creator], + // } + // ).itxn.createdApp + itxn_begin + // smart_contracts/escrow/factory.algo.ts:52 + // args: [creator], + dup + len + itob + extract 6 2 + swap + concat + // smart_contracts/escrow/factory.algo.ts:50-54 + // const newEscrow = escrow.call.create( + // { + // args: [creator], + // } + // ).itxn.createdApp + pushbytes 0x8e79358d // method "create(byte[])void" + itxn_field ApplicationArgs + itxn_field ApplicationArgs + // smart_contracts/escrow/factory.algo.ts:34 + // const escrow = compileArc4(Escrow); + intc_0 // 1 + itxn_field GlobalNumByteSlice + pushbytes base64(C4EBQw==) + itxn_field ClearStateProgramPages + pushbytes base64(CyACAQCABCQ3jTw2GgCOAQAlMRkURDEYQQAOgARlqXvMNhoAjgEAOQCABI55NY02GgCOAQANADEZgQUSMRgQREIAQDYaAUkjWYECCEsBFRJEVwIAgAdjcmVhdG9yTGciQzYaAUkVgSASRDEAMgkSRLEyCrIHsiAjsggishAjsgGzIkMxADIJEkSxMgmyCSKyECOyAbMiQw==) + itxn_field ApprovalProgramPages + // smart_contracts/escrow/factory.algo.ts:50-54 + // const newEscrow = escrow.call.create( + // { + // args: [creator], + // } + // ).itxn.createdApp + intc_1 // 0 + itxn_field OnCompletion + pushint 6 // appl + itxn_field TypeEnum + intc_1 // 0 + itxn_field Fee + itxn_submit + gitxn 0 CreatedApplicationID + dup + bury 4 + // smart_contracts/escrow/factory.algo.ts:56-61 + // itxn + // .payment({ + // receiver: newEscrow.address, + // amount: Global.minBalance + // }) + // .submit() + itxn_begin + // smart_contracts/escrow/factory.algo.ts:58 + // receiver: newEscrow.address, + app_params_get AppAddress + assert // application exists + // smart_contracts/escrow/factory.algo.ts:59 + // amount: Global.minBalance + global MinBalance + itxn_field Amount + itxn_field Receiver + // smart_contracts/escrow/factory.algo.ts:56-60 + // itxn + // .payment({ + // receiver: newEscrow.address, + // amount: Global.minBalance + // }) + intc_0 // 1 + itxn_field TypeEnum + intc_1 // 0 + itxn_field Fee + // smart_contracts/escrow/factory.algo.ts:56-61 + // itxn + // .payment({ + // receiver: newEscrow.address, + // amount: Global.minBalance + // }) + // .submit() + itxn_submit + // smart_contracts/escrow/factory.algo.ts:63-68 + // escrow.call.rekey({ + // appId: newEscrow.id, + // args: [ + // nonAppCaller ? Txn.sender : Global.callerApplicationAddress + // ] + // }) + itxn_begin + // smart_contracts/escrow/factory.algo.ts:66 + // nonAppCaller ? Txn.sender : Global.callerApplicationAddress + dup + bnz new_ternary_false@5 + txn Sender + +new_ternary_merge@6: + // smart_contracts/escrow/factory.algo.ts:63-68 + // escrow.call.rekey({ + // appId: newEscrow.id, + // args: [ + // nonAppCaller ? Txn.sender : Global.callerApplicationAddress + // ] + // }) + pushbytes 0x65a97bcc // method "rekey(address)void" + itxn_field ApplicationArgs + itxn_field ApplicationArgs + intc_1 // 0 + itxn_field OnCompletion + dig 2 + dup + itxn_field ApplicationID + pushint 6 // appl + itxn_field TypeEnum + intc_1 // 0 + itxn_field Fee + itxn_submit + // smart_contracts/escrow/factory.algo.ts:30 + // new(payment: gtxn.PaymentTxn): uint64 { + itob + bytec_0 // 0x151f7c75 + swap + concat + log + intc_0 // 1 + return + +new_ternary_false@5: + // smart_contracts/escrow/factory.algo.ts:66 + // nonAppCaller ? Txn.sender : Global.callerApplicationAddress + global CallerApplicationAddress + b new_ternary_merge@6 + +new_ternary_false@9: + // smart_contracts/escrow/factory.algo.ts:27 + // : Bytes(itob(Global.callerApplicationId)) + global CallerApplicationID + itob + b new_ternary_merge@10 + + +// smart_contracts/escrow/factory.algo.ts::EscrowFactory.register[routing]() -> void: +register: + // smart_contracts/escrow/factory.algo.ts:73 + // register(payment: gtxn.PaymentTxn, app: uint64): void { + txn GroupIndex + intc_0 // 1 + - + dup + gtxns TypeEnum + intc_0 // pay + == + assert // transaction type is pay + txna ApplicationArgs 1 + dup + len + pushint 8 // 8 + == + assert // invalid number of bytes for uint64 + btoi + dup + // smart_contracts/escrow/factory.algo.ts:75 + // assert(Global.callerApplicationId !== 0) + global CallerApplicationID + assert + // smart_contracts/escrow/factory.algo.ts:78 + // assert(app === 0 || Application(app).creator === Global.currentApplicationAddress, ERR_INVALID_APP) + bz register_bool_true@3 + dup + app_params_get AppCreator + assert // application exists + global CurrentApplicationAddress + == + bz register_bool_false@4 + +register_bool_true@3: + intc_0 // 1 + +register_bool_merge@5: + // smart_contracts/escrow/factory.algo.ts:78 + // assert(app === 0 || Application(app).creator === Global.currentApplicationAddress, ERR_INVALID_APP) + assert // invalid app to register + // smart_contracts/escrow/factory.algo.ts:81 + // if (Application(app).creator === Global.currentApplicationAddress) { + dup + app_params_get AppCreator + assert // application exists + global CurrentApplicationAddress + == + bz register_else_body@7 + // smart_contracts/escrow/factory.algo.ts:82 + // creator = op.AppGlobal.getExBytes(app, Bytes(EscrowGlobalStateKeysCreator))[0] + dup + pushbytes "creator" + app_global_get_ex + pop + dup + // smart_contracts/escrow/factory.algo.ts:83 + // assert(btoi(creator) === Global.callerApplicationId, ERR_INVALID_CREATOR) + btoi + global CallerApplicationID + == + assert // invalid creator + +register_after_if_else@8: + // smart_contracts/escrow/factory.algo.ts:89 + // const appAddress = bytes16(Application(app).address) + dig 1 + app_params_get AppAddress + assert // application exists + callsub bytes16 + // smart_contracts/escrow/factory.algo.ts:90 + // assert(!this.walletIDsByAccounts(appAddress).exists, ERR_ALREADY_REGISTERED) + dup + box_len + bury 1 + ! + assert // already registered + // smart_contracts/escrow/factory.algo.ts:92-99 + // assertMatch( + // payment, + // { + // receiver: Global.currentApplicationAddress, + // amount: this.mbr(creator.length), + // }, + // ERR_INVALID_PAYMENT + // ) + dig 3 + dup + gtxns Receiver + // smart_contracts/escrow/factory.algo.ts:95 + // receiver: Global.currentApplicationAddress, + global CurrentApplicationAddress + // smart_contracts/escrow/factory.algo.ts:92-99 + // assertMatch( + // payment, + // { + // receiver: Global.currentApplicationAddress, + // amount: this.mbr(creator.length), + // }, + // ERR_INVALID_PAYMENT + // ) + == + swap + gtxns Amount + // smart_contracts/escrow/factory.algo.ts:96 + // amount: this.mbr(creator.length), + uncover 3 + dup + cover 3 + len + // smart_contracts/escrow/factory.algo.ts:20 + // return MinWalletIDsByAccountsMbr + (length * BoxCostPerByte) + pushint 400 // 400 + * + pushint 8900 // 8900 + + + // smart_contracts/escrow/factory.algo.ts:92-99 + // assertMatch( + // payment, + // { + // receiver: Global.currentApplicationAddress, + // amount: this.mbr(creator.length), + // }, + // ERR_INVALID_PAYMENT + // ) + == + && + assert // invalid payment + // smart_contracts/escrow/factory.algo.ts:101 + // this.walletIDsByAccounts(appAddress).value = creator + dig 1 + box_del + pop + box_put + // smart_contracts/escrow/factory.algo.ts:73 + // register(payment: gtxn.PaymentTxn, app: uint64): void { + intc_0 // 1 + return + +register_else_body@7: + // smart_contracts/escrow/factory.algo.ts:85 + // creator = Bytes(itob(Global.callerApplicationId)) + global CallerApplicationID + itob + // smart_contracts/escrow/factory.algo.ts:86 + // app = Global.callerApplicationId + global CallerApplicationID + bury 2 + b register_after_if_else@8 + +register_bool_false@4: + intc_1 // 0 + b register_bool_merge@5 + + +// smart_contracts/escrow/factory.algo.ts::EscrowFactory.delete[routing]() -> void: +delete: + bytec_1 // "" + // smart_contracts/escrow/factory.algo.ts:104 + // delete(id: uint64): void { + txna ApplicationArgs 1 + dup + len + pushint 8 // 8 + == + assert // invalid number of bytes for uint64 + btoi + dup + // smart_contracts/escrow/factory.algo.ts:105 + // const caller = Global.callerApplicationId + global CallerApplicationID + swap + // smart_contracts/escrow/factory.algo.ts:106 + // const key = bytes16(Application(id).address) + app_params_get AppAddress + assert // application exists + callsub bytes16 + dupn 2 + // smart_contracts/escrow/factory.algo.ts:107 + // assert(this.walletIDsByAccounts(key).exists, ERR_DOESNT_EXIST) + box_len + bury 1 + assert // does not exist + // smart_contracts/escrow/factory.algo.ts:109 + // const creator = this.walletIDsByAccounts(key).value + box_get + pop + dup + // smart_contracts/escrow/factory.algo.ts:110 + // if (creator.length === 8) { + len + dup + cover 2 + pushint 8 // 8 + == + dup + cover 2 + bz delete_else_body@3 + // smart_contracts/escrow/factory.algo.ts:111 + // assert(caller === btoi(creator), ERR_FORBIDDEN); + btoi + dig 4 + == + assert // forbidden + +delete_after_if_else@4: + // smart_contracts/escrow/factory.algo.ts:20 + // return MinWalletIDsByAccountsMbr + (length * BoxCostPerByte) + dig 1 + pushint 400 // 400 + * + // smart_contracts/escrow/factory.algo.ts:119-121 + // MinPages + + // GlobalStateKeyBytesCost + + // this.mbr(creator.length) + pushint 158900 // 158900 + + + bury 6 + // smart_contracts/escrow/factory.algo.ts:124 + // spendingAccount.call.delete({ appId: id }) + itxn_begin + pushbytes 0x24378d3c // method "delete()void" + itxn_field ApplicationArgs + pushint 5 // 5 + itxn_field OnCompletion + dig 4 + itxn_field ApplicationID + pushint 6 // appl + itxn_field TypeEnum + intc_1 // 0 + itxn_field Fee + itxn_submit + // smart_contracts/escrow/factory.algo.ts:126 + // this.walletIDsByAccounts(key).delete() + dig 2 + box_del + pop + // smart_contracts/escrow/factory.algo.ts:128-133 + // itxn + // .payment({ + // receiver: creator.length === 8 ? Global.callerApplicationAddress : Txn.sender, + // amount: refundAmount + // }) + // .submit() + itxn_begin + // smart_contracts/escrow/factory.algo.ts:130 + // receiver: creator.length === 8 ? Global.callerApplicationAddress : Txn.sender, + dup + bz delete_ternary_false@7 + global CallerApplicationAddress + +delete_ternary_merge@8: + dig 6 + itxn_field Amount + itxn_field Receiver + // smart_contracts/escrow/factory.algo.ts:128-132 + // itxn + // .payment({ + // receiver: creator.length === 8 ? Global.callerApplicationAddress : Txn.sender, + // amount: refundAmount + // }) + intc_0 // 1 + itxn_field TypeEnum + intc_1 // 0 + itxn_field Fee + // smart_contracts/escrow/factory.algo.ts:128-133 + // itxn + // .payment({ + // receiver: creator.length === 8 ? Global.callerApplicationAddress : Txn.sender, + // amount: refundAmount + // }) + // .submit() + itxn_submit + // smart_contracts/escrow/factory.algo.ts:104 + // delete(id: uint64): void { + intc_0 // 1 + return + +delete_ternary_false@7: + // smart_contracts/escrow/factory.algo.ts:130 + // receiver: creator.length === 8 ? Global.callerApplicationAddress : Txn.sender, + txn Sender + b delete_ternary_merge@8 + +delete_else_body@3: + // smart_contracts/escrow/factory.algo.ts:113 + // assert(Bytes(bytes16(Txn.sender)) === creator, ERR_FORBIDDEN); + txn Sender + callsub bytes16 + == + assert // forbidden + b delete_after_if_else@4 + + +// smart_contracts/escrow/factory.algo.ts::EscrowFactory.cost[routing]() -> void: +cost: + // smart_contracts/escrow/factory.algo.ts:140-141 + // MinPages + + // GlobalStateKeyBytesCost + + intc 4 // 150000 + // smart_contracts/escrow/factory.algo.ts:142 + // Global.minBalance + global MinBalance + // smart_contracts/escrow/factory.algo.ts:140-142 + // MinPages + + // GlobalStateKeyBytesCost + + // Global.minBalance + + + // smart_contracts/escrow/factory.algo.ts:137 + // @abimethod({ readonly: true }) + itob + bytec_0 // 0x151f7c75 + swap + concat + log + intc_0 // 1 + return + + +// smart_contracts/escrow/factory.algo.ts::EscrowFactory.exists[routing]() -> void: +exists: + // smart_contracts/escrow/factory.algo.ts:153 + // @abimethod({ readonly: true }) + txna ApplicationArgs 1 + dup + len + intc_3 // 32 + == + assert // invalid number of bytes for uint8[32] + // smart_contracts/escrow/factory.algo.ts:155 + // return this.walletIDsByAccounts(bytes16(address.native)).exists + callsub bytes16 + box_len + bury 1 + // smart_contracts/escrow/factory.algo.ts:153 + // @abimethod({ readonly: true }) + pushbytes 0x00 + intc_1 // 0 + uncover 2 + setbit + bytec_0 // 0x151f7c75 + swap + concat + log + intc_0 // 1 + return + + +// smart_contracts/escrow/factory.algo.ts::EscrowFactory.get[routing]() -> void: +get: + // smart_contracts/escrow/factory.algo.ts:159 + // @abimethod({ readonly: true }) + txna ApplicationArgs 1 + dupn 2 + len + intc_3 // 32 + == + assert // invalid number of bytes for uint8[32] + // smart_contracts/escrow/factory.algo.ts:161 + // if (!this.walletIDsByAccounts(bytes16(address.native)).exists) { + callsub bytes16 + box_len + bury 1 + bnz get_after_if_else@3 + // smart_contracts/escrow/factory.algo.ts:162 + // return Bytes('') + bytec_1 // "" + +get_after_inlined_smart_contracts/escrow/factory.algo.ts::EscrowFactory.get@4: + // smart_contracts/escrow/factory.algo.ts:159 + // @abimethod({ readonly: true }) + dup + len + itob + extract 6 2 + swap + concat + bytec_0 // 0x151f7c75 + swap + concat + log + intc_0 // 1 + return + +get_after_if_else@3: + // smart_contracts/escrow/factory.algo.ts:164 + // return this.walletIDsByAccounts(bytes16(address.native)).value + dup + callsub bytes16 + box_get + assert // Box must have value + // smart_contracts/escrow/factory.algo.ts:159 + // @abimethod({ readonly: true }) + b get_after_inlined_smart_contracts/escrow/factory.algo.ts::EscrowFactory.get@4 + + +// smart_contracts/escrow/factory.algo.ts::EscrowFactory.mustGet[routing]() -> void: +mustGet: + // smart_contracts/escrow/factory.algo.ts:168 + // @abimethod({ readonly: true }) + txna ApplicationArgs 1 + dup + len + intc_3 // 32 + == + assert // invalid number of bytes for uint8[32] + // smart_contracts/escrow/factory.algo.ts:170 + // assert(this.walletIDsByAccounts(bytes16(address.native)).exists, 'Account not found') + dup + callsub bytes16 + box_len + bury 1 + assert // Account not found + // smart_contracts/escrow/factory.algo.ts:171 + // return this.walletIDsByAccounts(bytes16(address.native)).value + callsub bytes16 + box_get + assert // Box must have value + // smart_contracts/escrow/factory.algo.ts:168 + // @abimethod({ readonly: true }) + dup + len + itob + extract 6 2 + swap + concat + bytec_0 // 0x151f7c75 + swap + concat + log + intc_0 // 1 + return + + +// smart_contracts/escrow/factory.algo.ts::EscrowFactory.getList[routing]() -> void: +getList: + intc_1 // 0 + // smart_contracts/escrow/factory.algo.ts:175 + // @abimethod({ readonly: true }) + txna ApplicationArgs 1 + dupn 2 + intc_1 // 0 + extract_uint16 + dup + cover 2 + intc_3 // 32 + * + intc_2 // 2 + + + swap + len + == + assert // invalid number of bytes for (len+uint8[32][]) + // smart_contracts/escrow/factory.algo.ts:177 + // const apps = new DynamicArray() + bytec_2 // 0x0000 + // smart_contracts/escrow/factory.algo.ts:178 + // for (let i: uint64 = 0; i < addresses.length; i++) { + intc_1 // 0 + +getList_while_top@2: + // smart_contracts/escrow/factory.algo.ts:178 + // for (let i: uint64 = 0; i < addresses.length; i++) { + dup + dig 3 + < + bz getList_after_while@7 + // smart_contracts/escrow/factory.algo.ts:179 + // const address = addresses[i] + dig 3 + extract 2 0 + dig 1 + intc_3 // 32 + * + intc_3 // 32 + extract3 // on error: index access is out of bounds + dup + bury 6 + // smart_contracts/escrow/factory.algo.ts:180 + // if (this.walletIDsByAccounts(bytes16(address.native)).exists) { + callsub bytes16 + box_len + bury 1 + bz getList_else_body@5 + // smart_contracts/escrow/factory.algo.ts:181 + // apps.push(new DynamicBytes(this.walletIDsByAccounts(bytes16(address.native)).value)) + dig 4 + callsub bytes16 + box_get + assert // Box must have value + dup + len + itob + extract 6 2 + swap + concat + dig 2 + swap + intc_0 // 1 + callsub dynamic_array_concat_byte_length_head + bury 2 + +getList_after_if_else@6: + // smart_contracts/escrow/factory.algo.ts:178 + // for (let i: uint64 = 0; i < addresses.length; i++) { + dup + intc_0 // 1 + + + bury 1 + b getList_while_top@2 + +getList_else_body@5: + // smart_contracts/escrow/factory.algo.ts:183 + // apps.push(new DynamicBytes('')) + dig 1 + bytec_2 // 0x0000 + intc_0 // 1 + callsub dynamic_array_concat_byte_length_head + bury 2 + b getList_after_if_else@6 + +getList_after_while@7: + // smart_contracts/escrow/factory.algo.ts:175 + // @abimethod({ readonly: true }) + bytec_0 // 0x151f7c75 + dig 2 + concat + log + intc_0 // 1 + return + + +// smart_contracts/escrow/factory.algo.ts::EscrowFactory.mustGetList[routing]() -> void: +mustGetList: + // smart_contracts/escrow/factory.algo.ts:190 + // @abimethod({ readonly: true }) + txna ApplicationArgs 1 + dupn 2 + intc_1 // 0 + extract_uint16 + dup + cover 2 + intc_3 // 32 + * + intc_2 // 2 + + + swap + len + == + assert // invalid number of bytes for (len+uint8[32][]) + // smart_contracts/escrow/factory.algo.ts:192 + // const apps = new DynamicArray() + bytec_2 // 0x0000 + // smart_contracts/escrow/factory.algo.ts:193 + // for (let i: uint64 = 0; i < addresses.length; i++) { + intc_1 // 0 + +mustGetList_while_top@2: + // smart_contracts/escrow/factory.algo.ts:193 + // for (let i: uint64 = 0; i < addresses.length; i++) { + dup + dig 3 + < + bz mustGetList_after_while@4 + // smart_contracts/escrow/factory.algo.ts:194 + // const address = addresses[i] + dig 3 + extract 2 0 + dig 1 + dup + cover 2 + intc_3 // 32 + * + intc_3 // 32 + extract3 // on error: index access is out of bounds + // smart_contracts/escrow/factory.algo.ts:195 + // assert(this.walletIDsByAccounts(bytes16(address.native)).exists, 'Account not found') + dup + callsub bytes16 + box_len + bury 1 + assert // Account not found + // smart_contracts/escrow/factory.algo.ts:196 + // apps.push(new DynamicBytes(this.walletIDsByAccounts(bytes16(address.native)).value)) + callsub bytes16 + box_get + assert // Box must have value + dup + len + itob + extract 6 2 + swap + concat + dig 3 + swap + intc_0 // 1 + callsub dynamic_array_concat_byte_length_head + bury 3 + // smart_contracts/escrow/factory.algo.ts:193 + // for (let i: uint64 = 0; i < addresses.length; i++) { + intc_0 // 1 + + + bury 1 + b mustGetList_while_top@2 + +mustGetList_after_while@4: + // smart_contracts/escrow/factory.algo.ts:190 + // @abimethod({ readonly: true }) + bytec_0 // 0x151f7c75 + dig 2 + concat + log + intc_0 // 1 + return diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/EscrowFactory.arc32.json b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/EscrowFactory.arc32.json new file mode 100644 index 000000000..723cf5340 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/EscrowFactory.arc32.json @@ -0,0 +1,218 @@ +{ + "hints": { + "new(pay)uint64": { + "call_config": { + "no_op": "CALL" + } + }, + "register(pay,uint64)void": { + "call_config": { + "no_op": "CALL" + } + }, + "delete(uint64)void": { + "call_config": { + "no_op": "CALL" + } + }, + "cost()uint64": { + "read_only": true, + "call_config": { + "no_op": "CALL" + } + }, + "registerCost()uint64": { + "read_only": true, + "call_config": { + "no_op": "CALL" + } + }, + "exists(address)bool": { + "read_only": true, + "call_config": { + "no_op": "CALL" + } + }, + "get(address)byte[]": { + "read_only": true, + "call_config": { + "no_op": "CALL" + } + }, + "mustGet(address)byte[]": { + "read_only": true, + "call_config": { + "no_op": "CALL" + } + }, + "getList(address[])byte[][]": { + "read_only": true, + "call_config": { + "no_op": "CALL" + } + }, + "mustGetList(address[])byte[][]": { + "read_only": true, + "call_config": { + "no_op": "CALL" + } + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDIgMzIgMTUwMDAwCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgIiIgMHgwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxNAogICAgLy8gZXhwb3J0IGNsYXNzIEVzY3Jvd0ZhY3RvcnkgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTcKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0CiAgICBwdXNoYnl0ZXNzIDB4ZDg1Y2YxODQgMHg2MDdlNzA0NiAweDhhMzllNzlmIDB4OWI2N2ZhNmQgMHgzYzc1NDEyMCAweDRjOWZiNjU2IDB4M2MxYTZmMzMgMHgyYjU2MDJhMyAweDEzZGM1MDhhIDB4NDc1ZDM3NzMgLy8gbWV0aG9kICJuZXcocGF5KXVpbnQ2NCIsIG1ldGhvZCAicmVnaXN0ZXIocGF5LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJkZWxldGUodWludDY0KXZvaWQiLCBtZXRob2QgImNvc3QoKXVpbnQ2NCIsIG1ldGhvZCAicmVnaXN0ZXJDb3N0KCl1aW50NjQiLCBtZXRob2QgImV4aXN0cyhhZGRyZXNzKWJvb2wiLCBtZXRob2QgImdldChhZGRyZXNzKWJ5dGVbXSIsIG1ldGhvZCAibXVzdEdldChhZGRyZXNzKWJ5dGVbXSIsIG1ldGhvZCAiZ2V0TGlzdChhZGRyZXNzW10pYnl0ZVtdW10iLCBtZXRob2QgIm11c3RHZXRMaXN0KGFkZHJlc3NbXSlieXRlW11bXSIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG5ldyByZWdpc3RlciBkZWxldGUgY29zdCBtYWluX3JlZ2lzdGVyQ29zdF9yb3V0ZUA4IGV4aXN0cyBnZXQgbXVzdEdldCBnZXRMaXN0IG11c3RHZXRMaXN0CiAgICBlcnIKCm1haW5fcmVnaXN0ZXJDb3N0X3JvdXRlQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxNDcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUwMDAwMDAwMDAwMDAyZjQ0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDE3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTQKICAgIC8vIGV4cG9ydCBjbGFzcyBFc2Nyb3dGYWN0b3J5IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4gLy8gb24gZXJyb3I6IE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AgJiYgY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCgoKLy8gX3B1eWFfbGliLmFyYzQuZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZChhcnJheTogYnl0ZXMsIG5ld19pdGVtc19ieXRlczogYnl0ZXMsIG5ld19pdGVtc19jb3VudDogdWludDY0KSAtPiBieXRlczoKZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZDoKICAgIHByb3RvIDMgMQogICAgZnJhbWVfZGlnIC0zCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cAogICAgZnJhbWVfZGlnIC0xCiAgICArCiAgICBzd2FwCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY292ZXIgMgogICAgZnJhbWVfZGlnIC0zCiAgICBpbnRjXzIgLy8gMgogICAgZGlnIDIKICAgIHN1YnN0cmluZzMKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGJ6ZXJvCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMwogICAgbGVuCiAgICBmcmFtZV9kaWcgLTMKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgZHVwCiAgICBpbnRjXzEgLy8gMAoKZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZF9mb3JfaGVhZGVyQDI6CiAgICBmcmFtZV9kaWcgNAogICAgZnJhbWVfZGlnIDIKICAgIDwKICAgIGJ6IGR5bmFtaWNfYXJyYXlfY29uY2F0X2J5dGVfbGVuZ3RoX2hlYWRfYWZ0ZXJfZm9yQDUKICAgIGZyYW1lX2RpZyAzCiAgICBkdXAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgY292ZXIgNAogICAgdW5jb3ZlciAyCiAgICByZXBsYWNlMwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDEKICAgIGRpZyAxCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgICsKICAgIGZyYW1lX2J1cnkgMwogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGZyYW1lX2J1cnkgNAogICAgYiBkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkX2Zvcl9oZWFkZXJAMgoKZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZF9hZnRlcl9mb3JANToKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9kaWcgMQogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjpieXRlczE2KGFjYzogYnl0ZXMpIC0+IGJ5dGVzOgpieXRlczE2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTAKICAgIC8vIGZ1bmN0aW9uIGJ5dGVzMTYoYWNjOiBBY2NvdW50KTogYnl0ZXM8MTY+IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTEKICAgIC8vIHJldHVybiBhY2MuYnl0ZXMuc2xpY2UoMCwgMTYpLnRvRml4ZWQoeyBsZW5ndGg6IDE2IH0pCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18xIC8vIDAKICAgIGRpZyAxCiAgICA+PQogICAgaW50Y18xIC8vIDAKICAgIGRpZyAyCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgcHVzaGludCAxNiAvLyAxNgogICAgZGlnIDIKICAgID49CiAgICBwdXNoaW50IDE2IC8vIDE2CiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBmcmFtZV9kaWcgLTEKICAgIGNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDE2IC8vIDE2CiAgICA9PQogICAgYXNzZXJ0IC8vIExlbmd0aCBtdXN0IGJlIDE2CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo6RXNjcm93RmFjdG9yeS5uZXdbcm91dGluZ10oKSAtPiB2b2lkOgpuZXc6CiAgICBieXRlY18xIC8vICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czozMAogICAgLy8gbmV3KHBheW1lbnQ6IGd0eG4uUGF5bWVudFR4bik6IHVpbnQ2NCB7CiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMCAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjMxCiAgICAvLyBjb25zdCBub25BcHBDYWxsZXIgPSBHbG9iYWwuY2FsbGVyQXBwbGljYXRpb25JZCA9PT0gMAogICAgZ2xvYmFsIENhbGxlckFwcGxpY2F0aW9uSUQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjI0CiAgICAvLyBjb25zdCBub25BcHBDYWxsZXIgPSBHbG9iYWwuY2FsbGVyQXBwbGljYXRpb25JZCA9PT0gMAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoyNS0yNwogICAgLy8gcmV0dXJuIG5vbkFwcENhbGxlcgogICAgLy8gICA/IEJ5dGVzKGJ5dGVzMTYoVHhuLnNlbmRlcikpCiAgICAvLyAgIDogQnl0ZXMoaXRvYihHbG9iYWwuY2FsbGVyQXBwbGljYXRpb25JZCkpCiAgICBibnogbmV3X3Rlcm5hcnlfZmFsc2VAOQogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MjYKICAgIC8vID8gQnl0ZXMoYnl0ZXMxNihUeG4uc2VuZGVyKSkKICAgIHR4biBTZW5kZXIKICAgIGNhbGxzdWIgYnl0ZXMxNgoKbmV3X3Rlcm5hcnlfbWVyZ2VAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo0MS00OAogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIHBheW1lbnQsCiAgICAvLyAgIHsKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiBjaGlsZEFwcE1CUiArIEdsb2JhbC5taW5CYWxhbmNlLAogICAgLy8gICB9LAogICAgLy8gICBFUlJfSU5WQUxJRF9QQVlNRU5UCiAgICAvLyApCiAgICBkaWcgMgogICAgZHVwCiAgICBndHhucyBSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6NDQKICAgIC8vIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo0MS00OAogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIHBheW1lbnQsCiAgICAvLyAgIHsKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiBjaGlsZEFwcE1CUiArIEdsb2JhbC5taW5CYWxhbmNlLAogICAgLy8gICB9LAogICAgLy8gICBFUlJfSU5WQUxJRF9QQVlNRU5UCiAgICAvLyApCiAgICA9PQogICAgc3dhcAogICAgZ3R4bnMgQW1vdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo0NQogICAgLy8gYW1vdW50OiBjaGlsZEFwcE1CUiArIEdsb2JhbC5taW5CYWxhbmNlLAogICAgaW50YyA0IC8vIDE1MDAwMAogICAgZ2xvYmFsIE1pbkJhbGFuY2UKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjQxLTQ4CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgcGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IGNoaWxkQXBwTUJSICsgR2xvYmFsLm1pbkJhbGFuY2UsCiAgICAvLyAgIH0sCiAgICAvLyAgIEVSUl9JTlZBTElEX1BBWU1FTlQKICAgIC8vICkKICAgID09CiAgICAmJgogICAgYXNzZXJ0IC8vIGludmFsaWQgcGF5bWVudAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6NTAtNTQKICAgIC8vIGNvbnN0IG5ld0VzY3JvdyA9IGVzY3Jvdy5jYWxsLmNyZWF0ZSgKICAgIC8vICAgewogICAgLy8gICAgIGFyZ3M6IFtjcmVhdG9yXSwKICAgIC8vICAgfQogICAgLy8gKS5pdHhuLmNyZWF0ZWRBcHAKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjUyCiAgICAvLyBhcmdzOiBbY3JlYXRvcl0sCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6NTAtNTQKICAgIC8vIGNvbnN0IG5ld0VzY3JvdyA9IGVzY3Jvdy5jYWxsLmNyZWF0ZSgKICAgIC8vICAgewogICAgLy8gICAgIGFyZ3M6IFtjcmVhdG9yXSwKICAgIC8vICAgfQogICAgLy8gKS5pdHhuLmNyZWF0ZWRBcHAKICAgIHB1c2hieXRlcyAweDhlNzkzNThkIC8vIG1ldGhvZCAiY3JlYXRlKGJ5dGVbXSl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czozNAogICAgLy8gY29uc3QgZXNjcm93ID0gY29tcGlsZUFyYzQoRXNjcm93KTsKICAgIGludGNfMCAvLyAxCiAgICBpdHhuX2ZpZWxkIEdsb2JhbE51bUJ5dGVTbGljZQogICAgcHVzaGJ5dGVzIGJhc2U2NChDNEVCUXc9PSkKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgcHVzaGJ5dGVzIGJhc2U2NChDeUFDQVFDQUJDUTNqVHcyR2dDT0FRQWxNUmtVUkRFWVFRQU9nQVJscVh2TU5ob0FqZ0VBT1FDQUJJNTVOWTAyR2dDT0FRQU5BREVaZ1FVU01SZ1FSRUlBUURZYUFVa2pXWUVDQ0VzQkZSSkVWd0lBZ0FkamNtVmhkRzl5VEdjaVF6WWFBVWtWZ1NBU1JERUFNZ2tTUkxFeUNySUhzaUFqc2dnaXNoQWpzZ0d6SWtNeEFESUpFa1N4TWdteUNTS3lFQ095QWJNaVF3PT0pCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo1MC01NAogICAgLy8gY29uc3QgbmV3RXNjcm93ID0gZXNjcm93LmNhbGwuY3JlYXRlKAogICAgLy8gICB7CiAgICAvLyAgICAgYXJnczogW2NyZWF0b3JdLAogICAgLy8gICB9CiAgICAvLyApLml0eG4uY3JlYXRlZEFwcAogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgZ2l0eG4gMCBDcmVhdGVkQXBwbGljYXRpb25JRAogICAgZHVwCiAgICBidXJ5IDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjU2LTYxCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogbmV3RXNjcm93LmFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiBHbG9iYWwubWluQmFsYW5jZQogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjU4CiAgICAvLyByZWNlaXZlcjogbmV3RXNjcm93LmFkZHJlc3MsCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo1OQogICAgLy8gYW1vdW50OiBHbG9iYWwubWluQmFsYW5jZQogICAgZ2xvYmFsIE1pbkJhbGFuY2UKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo1Ni02MAogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgcmVjZWl2ZXI6IG5ld0VzY3Jvdy5hZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogR2xvYmFsLm1pbkJhbGFuY2UKICAgIC8vICAgfSkKICAgIGludGNfMCAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjU2LTYxCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogbmV3RXNjcm93LmFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiBHbG9iYWwubWluQmFsYW5jZQogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo2My02OAogICAgLy8gZXNjcm93LmNhbGwucmVrZXkoewogICAgLy8gICBhcHBJZDogbmV3RXNjcm93LmlkLAogICAgLy8gICBhcmdzOiBbCiAgICAvLyAgICAgbm9uQXBwQ2FsbGVyID8gVHhuLnNlbmRlciA6IEdsb2JhbC5jYWxsZXJBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vICAgXQogICAgLy8gfSkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjY2CiAgICAvLyBub25BcHBDYWxsZXIgPyBUeG4uc2VuZGVyIDogR2xvYmFsLmNhbGxlckFwcGxpY2F0aW9uQWRkcmVzcwogICAgZHVwCiAgICBibnogbmV3X3Rlcm5hcnlfZmFsc2VANQogICAgdHhuIFNlbmRlcgoKbmV3X3Rlcm5hcnlfbWVyZ2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjYzLTY4CiAgICAvLyBlc2Nyb3cuY2FsbC5yZWtleSh7CiAgICAvLyAgIGFwcElkOiBuZXdFc2Nyb3cuaWQsCiAgICAvLyAgIGFyZ3M6IFsKICAgIC8vICAgICBub25BcHBDYWxsZXIgPyBUeG4uc2VuZGVyIDogR2xvYmFsLmNhbGxlckFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gICBdCiAgICAvLyB9KQogICAgcHVzaGJ5dGVzIDB4NjVhOTdiY2MgLy8gbWV0aG9kICJyZWtleShhZGRyZXNzKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgZGlnIDIKICAgIGR1cAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MzAKICAgIC8vIG5ldyhwYXltZW50OiBndHhuLlBheW1lbnRUeG4pOiB1aW50NjQgewogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbmV3X3Rlcm5hcnlfZmFsc2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjY2CiAgICAvLyBub25BcHBDYWxsZXIgPyBUeG4uc2VuZGVyIDogR2xvYmFsLmNhbGxlckFwcGxpY2F0aW9uQWRkcmVzcwogICAgZ2xvYmFsIENhbGxlckFwcGxpY2F0aW9uQWRkcmVzcwogICAgYiBuZXdfdGVybmFyeV9tZXJnZUA2CgpuZXdfdGVybmFyeV9mYWxzZUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MjcKICAgIC8vIDogQnl0ZXMoaXRvYihHbG9iYWwuY2FsbGVyQXBwbGljYXRpb25JZCkpCiAgICBnbG9iYWwgQ2FsbGVyQXBwbGljYXRpb25JRAogICAgaXRvYgogICAgYiBuZXdfdGVybmFyeV9tZXJnZUAxMAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjpFc2Nyb3dGYWN0b3J5LnJlZ2lzdGVyW3JvdXRpbmddKCkgLT4gdm9pZDoKcmVnaXN0ZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo3MwogICAgLy8gcmVnaXN0ZXIocGF5bWVudDogZ3R4bi5QYXltZW50VHhuLCBhcHA6IHVpbnQ2NCk6IHZvaWQgewogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA4IC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo3NQogICAgLy8gYXNzZXJ0KEdsb2JhbC5jYWxsZXJBcHBsaWNhdGlvbklkICE9PSAwKQogICAgZ2xvYmFsIENhbGxlckFwcGxpY2F0aW9uSUQKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6NzgKICAgIC8vIGFzc2VydChhcHAgPT09IDAgfHwgQXBwbGljYXRpb24oYXBwKS5jcmVhdG9yID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywgRVJSX0lOVkFMSURfQVBQKQogICAgYnogcmVnaXN0ZXJfYm9vbF90cnVlQDMKICAgIGR1cAogICAgYXBwX3BhcmFtc19nZXQgQXBwQ3JlYXRvcgogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGV4aXN0cwogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBieiByZWdpc3Rlcl9ib29sX2ZhbHNlQDQKCnJlZ2lzdGVyX2Jvb2xfdHJ1ZUAzOgogICAgaW50Y18wIC8vIDEKCnJlZ2lzdGVyX2Jvb2xfbWVyZ2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjc4CiAgICAvLyBhc3NlcnQoYXBwID09PSAwIHx8IEFwcGxpY2F0aW9uKGFwcCkuY3JlYXRvciA9PT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsIEVSUl9JTlZBTElEX0FQUCkKICAgIGFzc2VydCAvLyBpbnZhbGlkIGFwcCB0byByZWdpc3RlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6ODEKICAgIC8vIGlmIChBcHBsaWNhdGlvbihhcHApLmNyZWF0b3IgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzKSB7CiAgICBkdXAKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcENyZWF0b3IKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYnogcmVnaXN0ZXJfZWxzZV9ib2R5QDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjgyCiAgICAvLyBjcmVhdG9yID0gb3AuQXBwR2xvYmFsLmdldEV4Qnl0ZXMoYXBwLCBCeXRlcyhFc2Nyb3dHbG9iYWxTdGF0ZUtleXNDcmVhdG9yKSlbMF0KICAgIGR1cAogICAgcHVzaGJ5dGVzICJjcmVhdG9yIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHBvcAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo4MwogICAgLy8gYXNzZXJ0KGJ0b2koY3JlYXRvcikgPT09IEdsb2JhbC5jYWxsZXJBcHBsaWNhdGlvbklkLCBFUlJfSU5WQUxJRF9DUkVBVE9SKQogICAgYnRvaQogICAgZ2xvYmFsIENhbGxlckFwcGxpY2F0aW9uSUQKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBjcmVhdG9yCgpyZWdpc3Rlcl9hZnRlcl9pZl9lbHNlQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo4OQogICAgLy8gY29uc3QgYXBwQWRkcmVzcyA9IGJ5dGVzMTYoQXBwbGljYXRpb24oYXBwKS5hZGRyZXNzKQogICAgZGlnIDEKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIGNhbGxzdWIgYnl0ZXMxNgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6OTAKICAgIC8vIGFzc2VydCghdGhpcy53YWxsZXRJRHNCeUFjY291bnRzKGFwcEFkZHJlc3MpLmV4aXN0cywgRVJSX0FMUkVBRFlfUkVHSVNURVJFRCkKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gYWxyZWFkeSByZWdpc3RlcmVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo5Mi05OQogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIHBheW1lbnQsCiAgICAvLyAgIHsKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiB0aGlzLm1icihjcmVhdG9yLmxlbmd0aCksCiAgICAvLyAgIH0sCiAgICAvLyAgIEVSUl9JTlZBTElEX1BBWU1FTlQKICAgIC8vICkKICAgIGRpZyAzCiAgICBkdXAKICAgIGd0eG5zIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo5NQogICAgLy8gcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjkyLTk5CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgcGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IHRoaXMubWJyKGNyZWF0b3IubGVuZ3RoKSwKICAgIC8vICAgfSwKICAgIC8vICAgRVJSX0lOVkFMSURfUEFZTUVOVAogICAgLy8gKQogICAgPT0KICAgIHN3YXAKICAgIGd0eG5zIEFtb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6OTYKICAgIC8vIGFtb3VudDogdGhpcy5tYnIoY3JlYXRvci5sZW5ndGgpLAogICAgdW5jb3ZlciAzCiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGxlbgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MjAKICAgIC8vIHJldHVybiBNaW5XYWxsZXRJRHNCeUFjY291bnRzTWJyICsgKGxlbmd0aCAqIEJveENvc3RQZXJCeXRlKQogICAgcHVzaGludCA0MDAgLy8gNDAwCiAgICAqCiAgICBwdXNoaW50IDg5MDAgLy8gODkwMAogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6OTItOTkKICAgIC8vIGFzc2VydE1hdGNoKAogICAgLy8gICBwYXltZW50LAogICAgLy8gICB7CiAgICAvLyAgICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogdGhpcy5tYnIoY3JlYXRvci5sZW5ndGgpLAogICAgLy8gICB9LAogICAgLy8gICBFUlJfSU5WQUxJRF9QQVlNRU5UCiAgICAvLyApCiAgICA9PQogICAgJiYKICAgIGFzc2VydCAvLyBpbnZhbGlkIHBheW1lbnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjEwMQogICAgLy8gdGhpcy53YWxsZXRJRHNCeUFjY291bnRzKGFwcEFkZHJlc3MpLnZhbHVlID0gY3JlYXRvcgogICAgZGlnIDEKICAgIGJveF9kZWwKICAgIHBvcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6NzMKICAgIC8vIHJlZ2lzdGVyKHBheW1lbnQ6IGd0eG4uUGF5bWVudFR4biwgYXBwOiB1aW50NjQpOiB2b2lkIHsKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCnJlZ2lzdGVyX2Vsc2VfYm9keUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6ODUKICAgIC8vIGNyZWF0b3IgPSBCeXRlcyhpdG9iKEdsb2JhbC5jYWxsZXJBcHBsaWNhdGlvbklkKSkKICAgIGdsb2JhbCBDYWxsZXJBcHBsaWNhdGlvbklECiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo4NgogICAgLy8gYXBwID0gR2xvYmFsLmNhbGxlckFwcGxpY2F0aW9uSWQKICAgIGdsb2JhbCBDYWxsZXJBcHBsaWNhdGlvbklECiAgICBidXJ5IDIKICAgIGIgcmVnaXN0ZXJfYWZ0ZXJfaWZfZWxzZUA4CgpyZWdpc3Rlcl9ib29sX2ZhbHNlQDQ6CiAgICBpbnRjXzEgLy8gMAogICAgYiByZWdpc3Rlcl9ib29sX21lcmdlQDUKCgovLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo6RXNjcm93RmFjdG9yeS5kZWxldGVbcm91dGluZ10oKSAtPiB2b2lkOgpkZWxldGU6CiAgICBieXRlY18xIC8vICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxMDQKICAgIC8vIGRlbGV0ZShpZDogdWludDY0KTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA4IC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxMDUKICAgIC8vIGNvbnN0IGNhbGxlciA9IEdsb2JhbC5jYWxsZXJBcHBsaWNhdGlvbklkCiAgICBnbG9iYWwgQ2FsbGVyQXBwbGljYXRpb25JRAogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTA2CiAgICAvLyBjb25zdCBrZXkgPSBieXRlczE2KEFwcGxpY2F0aW9uKGlkKS5hZGRyZXNzKQogICAgYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGV4aXN0cwogICAgY2FsbHN1YiBieXRlczE2CiAgICBkdXBuIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjEwNwogICAgLy8gYXNzZXJ0KHRoaXMud2FsbGV0SURzQnlBY2NvdW50cyhrZXkpLmV4aXN0cywgRVJSX0RPRVNOVF9FWElTVCkKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGRvZXMgbm90IGV4aXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxMDkKICAgIC8vIGNvbnN0IGNyZWF0b3IgPSB0aGlzLndhbGxldElEc0J5QWNjb3VudHMoa2V5KS52YWx1ZQogICAgYm94X2dldAogICAgcG9wCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjExMAogICAgLy8gaWYgKGNyZWF0b3IubGVuZ3RoID09PSA4KSB7CiAgICBsZW4KICAgIGR1cAogICAgY292ZXIgMgogICAgcHVzaGludCA4IC8vIDgKICAgID09CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGJ6IGRlbGV0ZV9lbHNlX2JvZHlAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTExCiAgICAvLyBhc3NlcnQoY2FsbGVyID09PSBidG9pKGNyZWF0b3IpLCBFUlJfRk9SQklEREVOKTsKICAgIGJ0b2kKICAgIGRpZyA0CiAgICA9PQogICAgYXNzZXJ0IC8vIGZvcmJpZGRlbgoKZGVsZXRlX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gTWluV2FsbGV0SURzQnlBY2NvdW50c01iciArIChsZW5ndGggKiBCb3hDb3N0UGVyQnl0ZSkKICAgIGRpZyAxCiAgICBwdXNoaW50IDQwMCAvLyA0MDAKICAgICoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjExOS0xMjEKICAgIC8vIE1pblBhZ2VzICsKICAgIC8vIEdsb2JhbFN0YXRlS2V5Qnl0ZXNDb3N0ICsKICAgIC8vIHRoaXMubWJyKGNyZWF0b3IubGVuZ3RoKQogICAgcHVzaGludCAxNTg5MDAgLy8gMTU4OTAwCiAgICArCiAgICBidXJ5IDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjEyNAogICAgLy8gc3BlbmRpbmdBY2NvdW50LmNhbGwuZGVsZXRlKHsgYXBwSWQ6IGlkIH0pCiAgICBpdHhuX2JlZ2luCiAgICBwdXNoYnl0ZXMgMHgyNDM3OGQzYyAvLyBtZXRob2QgImRlbGV0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBwdXNoaW50IDUgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIGRpZyA0CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxMjYKICAgIC8vIHRoaXMud2FsbGV0SURzQnlBY2NvdW50cyhrZXkpLmRlbGV0ZSgpCiAgICBkaWcgMgogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxMjgtMTMzCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogY3JlYXRvci5sZW5ndGggPT09IDggPyBHbG9iYWwuY2FsbGVyQXBwbGljYXRpb25BZGRyZXNzIDogVHhuLnNlbmRlciwKICAgIC8vICAgICBhbW91bnQ6IHJlZnVuZEFtb3VudAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjEzMAogICAgLy8gcmVjZWl2ZXI6IGNyZWF0b3IubGVuZ3RoID09PSA4ID8gR2xvYmFsLmNhbGxlckFwcGxpY2F0aW9uQWRkcmVzcyA6IFR4bi5zZW5kZXIsCiAgICBkdXAKICAgIGJ6IGRlbGV0ZV90ZXJuYXJ5X2ZhbHNlQDcKICAgIGdsb2JhbCBDYWxsZXJBcHBsaWNhdGlvbkFkZHJlc3MKCmRlbGV0ZV90ZXJuYXJ5X21lcmdlQDg6CiAgICBkaWcgNgogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjEyOC0xMzIKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHJlY2VpdmVyOiBjcmVhdG9yLmxlbmd0aCA9PT0gOCA/IEdsb2JhbC5jYWxsZXJBcHBsaWNhdGlvbkFkZHJlc3MgOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGFtb3VudDogcmVmdW5kQW1vdW50CiAgICAvLyAgIH0pCiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxMjgtMTMzCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogY3JlYXRvci5sZW5ndGggPT09IDggPyBHbG9iYWwuY2FsbGVyQXBwbGljYXRpb25BZGRyZXNzIDogVHhuLnNlbmRlciwKICAgIC8vICAgICBhbW91bnQ6IHJlZnVuZEFtb3VudAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxMDQKICAgIC8vIGRlbGV0ZShpZDogdWludDY0KTogdm9pZCB7CiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgpkZWxldGVfdGVybmFyeV9mYWxzZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTMwCiAgICAvLyByZWNlaXZlcjogY3JlYXRvci5sZW5ndGggPT09IDggPyBHbG9iYWwuY2FsbGVyQXBwbGljYXRpb25BZGRyZXNzIDogVHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIGIgZGVsZXRlX3Rlcm5hcnlfbWVyZ2VAOAoKZGVsZXRlX2Vsc2VfYm9keUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTEzCiAgICAvLyBhc3NlcnQoQnl0ZXMoYnl0ZXMxNihUeG4uc2VuZGVyKSkgPT09IGNyZWF0b3IsIEVSUl9GT1JCSURERU4pOwogICAgdHhuIFNlbmRlcgogICAgY2FsbHN1YiBieXRlczE2CiAgICA9PQogICAgYXNzZXJ0IC8vIGZvcmJpZGRlbgogICAgYiBkZWxldGVfYWZ0ZXJfaWZfZWxzZUA0CgoKLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6OkVzY3Jvd0ZhY3RvcnkuY29zdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNvc3Q6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxNDAtMTQxCiAgICAvLyBNaW5QYWdlcyArCiAgICAvLyBHbG9iYWxTdGF0ZUtleUJ5dGVzQ29zdCArCiAgICBpbnRjIDQgLy8gMTUwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxNDIKICAgIC8vIEdsb2JhbC5taW5CYWxhbmNlCiAgICBnbG9iYWwgTWluQmFsYW5jZQogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTQwLTE0MgogICAgLy8gTWluUGFnZXMgKwogICAgLy8gR2xvYmFsU3RhdGVLZXlCeXRlc0Nvc3QgKwogICAgLy8gR2xvYmFsLm1pbkJhbGFuY2UKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjEzNwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6OkVzY3Jvd0ZhY3RvcnkuZXhpc3RzW3JvdXRpbmddKCkgLT4gdm9pZDoKZXhpc3RzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTUzCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ4WzMyXQogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTU1CiAgICAvLyByZXR1cm4gdGhpcy53YWxsZXRJRHNCeUFjY291bnRzKGJ5dGVzMTYoYWRkcmVzcy5uYXRpdmUpKS5leGlzdHMKICAgIGNhbGxzdWIgYnl0ZXMxNgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxNTMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgcHVzaGJ5dGVzIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjpFc2Nyb3dGYWN0b3J5LmdldFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjE1OQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXBuIDIKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50OFszMl0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjE2MQogICAgLy8gaWYgKCF0aGlzLndhbGxldElEc0J5QWNjb3VudHMoYnl0ZXMxNihhZGRyZXNzLm5hdGl2ZSkpLmV4aXN0cykgewogICAgY2FsbHN1YiBieXRlczE2CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJueiBnZXRfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxNjIKICAgIC8vIHJldHVybiBCeXRlcygnJykKICAgIGJ5dGVjXzEgLy8gIiIKCmdldF9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjpFc2Nyb3dGYWN0b3J5LmdldEA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTU5CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgpnZXRfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTY0CiAgICAvLyByZXR1cm4gdGhpcy53YWxsZXRJRHNCeUFjY291bnRzKGJ5dGVzMTYoYWRkcmVzcy5uYXRpdmUpKS52YWx1ZQogICAgZHVwCiAgICBjYWxsc3ViIGJ5dGVzMTYKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxNTkKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgYiBnZXRfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo6RXNjcm93RmFjdG9yeS5nZXRANAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjpFc2Nyb3dGYWN0b3J5Lm11c3RHZXRbcm91dGluZ10oKSAtPiB2b2lkOgptdXN0R2V0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTY4CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ4WzMyXQogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTcwCiAgICAvLyBhc3NlcnQodGhpcy53YWxsZXRJRHNCeUFjY291bnRzKGJ5dGVzMTYoYWRkcmVzcy5uYXRpdmUpKS5leGlzdHMsICdBY2NvdW50IG5vdCBmb3VuZCcpCiAgICBkdXAKICAgIGNhbGxzdWIgYnl0ZXMxNgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gQWNjb3VudCBub3QgZm91bmQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjE3MQogICAgLy8gcmV0dXJuIHRoaXMud2FsbGV0SURzQnlBY2NvdW50cyhieXRlczE2KGFkZHJlc3MubmF0aXZlKSkudmFsdWUKICAgIGNhbGxzdWIgYnl0ZXMxNgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjE2OAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjpFc2Nyb3dGYWN0b3J5LmdldExpc3Rbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRMaXN0OgogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjE3NQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXBuIDIKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzMgLy8gMzIKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdWludDhbMzJdW10pCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxNzcKICAgIC8vIGNvbnN0IGFwcHMgPSBuZXcgRHluYW1pY0FycmF5PER5bmFtaWNCeXRlcz4oKQogICAgYnl0ZWNfMiAvLyAweDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjE3OAogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGFkZHJlc3Nlcy5sZW5ndGg7IGkrKykgewogICAgaW50Y18xIC8vIDAKCmdldExpc3Rfd2hpbGVfdG9wQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxNzgKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhZGRyZXNzZXMubGVuZ3RoOyBpKyspIHsKICAgIGR1cAogICAgZGlnIDMKICAgIDwKICAgIGJ6IGdldExpc3RfYWZ0ZXJfd2hpbGVANwogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTc5CiAgICAvLyBjb25zdCBhZGRyZXNzID0gYWRkcmVzc2VzW2ldCiAgICBkaWcgMwogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAxCiAgICBpbnRjXzMgLy8gMzIKICAgICoKICAgIGludGNfMyAvLyAzMgogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkdXAKICAgIGJ1cnkgNgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTgwCiAgICAvLyBpZiAodGhpcy53YWxsZXRJRHNCeUFjY291bnRzKGJ5dGVzMTYoYWRkcmVzcy5uYXRpdmUpKS5leGlzdHMpIHsKICAgIGNhbGxzdWIgYnl0ZXMxNgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBnZXRMaXN0X2Vsc2VfYm9keUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxODEKICAgIC8vIGFwcHMucHVzaChuZXcgRHluYW1pY0J5dGVzKHRoaXMud2FsbGV0SURzQnlBY2NvdW50cyhieXRlczE2KGFkZHJlc3MubmF0aXZlKSkudmFsdWUpKQogICAgZGlnIDQKICAgIGNhbGxzdWIgYnl0ZXMxNgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBkaWcgMgogICAgc3dhcAogICAgaW50Y18wIC8vIDEKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZAogICAgYnVyeSAyCgpnZXRMaXN0X2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjE3OAogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGFkZHJlc3Nlcy5sZW5ndGg7IGkrKykgewogICAgZHVwCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIGdldExpc3Rfd2hpbGVfdG9wQDIKCmdldExpc3RfZWxzZV9ib2R5QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxODMKICAgIC8vIGFwcHMucHVzaChuZXcgRHluYW1pY0J5dGVzKCcnKSkKICAgIGRpZyAxCiAgICBieXRlY18yIC8vIDB4MDAwMAogICAgaW50Y18wIC8vIDEKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZAogICAgYnVyeSAyCiAgICBiIGdldExpc3RfYWZ0ZXJfaWZfZWxzZUA2CgpnZXRMaXN0X2FmdGVyX3doaWxlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxNzUKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBkaWcgMgogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo6RXNjcm93RmFjdG9yeS5tdXN0R2V0TGlzdFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm11c3RHZXRMaXN0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTkwCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cG4gMgogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMyAvLyAzMgogICAgKgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbit1aW50OFszMl1bXSkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjE5MgogICAgLy8gY29uc3QgYXBwcyA9IG5ldyBEeW5hbWljQXJyYXk8RHluYW1pY0J5dGVzPigpCiAgICBieXRlY18yIC8vIDB4MDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTkzCiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgYWRkcmVzc2VzLmxlbmd0aDsgaSsrKSB7CiAgICBpbnRjXzEgLy8gMAoKbXVzdEdldExpc3Rfd2hpbGVfdG9wQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxOTMKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhZGRyZXNzZXMubGVuZ3RoOyBpKyspIHsKICAgIGR1cAogICAgZGlnIDMKICAgIDwKICAgIGJ6IG11c3RHZXRMaXN0X2FmdGVyX3doaWxlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjE5NAogICAgLy8gY29uc3QgYWRkcmVzcyA9IGFkZHJlc3Nlc1tpXQogICAgZGlnIDMKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzMgLy8gMzIKICAgICoKICAgIGludGNfMyAvLyAzMgogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxOTUKICAgIC8vIGFzc2VydCh0aGlzLndhbGxldElEc0J5QWNjb3VudHMoYnl0ZXMxNihhZGRyZXNzLm5hdGl2ZSkpLmV4aXN0cywgJ0FjY291bnQgbm90IGZvdW5kJykKICAgIGR1cAogICAgY2FsbHN1YiBieXRlczE2CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBBY2NvdW50IG5vdCBmb3VuZAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTk2CiAgICAvLyBhcHBzLnB1c2gobmV3IER5bmFtaWNCeXRlcyh0aGlzLndhbGxldElEc0J5QWNjb3VudHMoYnl0ZXMxNihhZGRyZXNzLm5hdGl2ZSkpLnZhbHVlKSkKICAgIGNhbGxzdWIgYnl0ZXMxNgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBkaWcgMwogICAgc3dhcAogICAgaW50Y18wIC8vIDEKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZAogICAgYnVyeSAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxOTMKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhZGRyZXNzZXMubGVuZ3RoOyBpKyspIHsKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgbXVzdEdldExpc3Rfd2hpbGVfdG9wQDIKCm11c3RHZXRMaXN0X2FmdGVyX3doaWxlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxOTAKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBkaWcgMgogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4K", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "state": { + "global": { + "num_byte_slices": 0, + "num_uints": 0 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "schema": { + "global": { + "declared": {}, + "reserved": {} + }, + "local": { + "declared": {}, + "reserved": {} + } + }, + "contract": { + "name": "EscrowFactory", + "methods": [ + { + "name": "new", + "args": [ + { + "type": "pay", + "name": "payment" + } + ], + "readonly": false, + "returns": { + "type": "uint64" + } + }, + { + "name": "register", + "args": [ + { + "type": "pay", + "name": "payment" + }, + { + "type": "uint64", + "name": "app" + } + ], + "readonly": false, + "returns": { + "type": "void" + } + }, + { + "name": "delete", + "args": [ + { + "type": "uint64", + "name": "id" + } + ], + "readonly": false, + "returns": { + "type": "void" + } + }, + { + "name": "cost", + "args": [], + "readonly": true, + "returns": { + "type": "uint64" + } + }, + { + "name": "registerCost", + "args": [], + "readonly": true, + "returns": { + "type": "uint64" + } + }, + { + "name": "exists", + "args": [ + { + "type": "address", + "name": "address" + } + ], + "readonly": true, + "returns": { + "type": "bool" + } + }, + { + "name": "get", + "args": [ + { + "type": "address", + "name": "address" + } + ], + "readonly": true, + "returns": { + "type": "byte[]" + } + }, + { + "name": "mustGet", + "args": [ + { + "type": "address", + "name": "address" + } + ], + "readonly": true, + "returns": { + "type": "byte[]" + } + }, + { + "name": "getList", + "args": [ + { + "type": "address[]", + "name": "addresses" + } + ], + "readonly": true, + "returns": { + "type": "byte[][]" + } + }, + { + "name": "mustGetList", + "args": [ + { + "type": "address[]", + "name": "addresses" + } + ], + "readonly": true, + "returns": { + "type": "byte[][]" + } + } + ], + "networks": {} + }, + "bare_call_config": { + "no_op": "CREATE" + } +} \ No newline at end of file diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/EscrowFactory.arc56.json b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/EscrowFactory.arc56.json new file mode 100644 index 000000000..9bd920d2b --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/EscrowFactory.arc56.json @@ -0,0 +1,396 @@ +{ + "name": "EscrowFactory", + "structs": {}, + "methods": [ + { + "name": "new", + "args": [ + { + "type": "pay", + "name": "payment" + } + ], + "returns": { + "type": "uint64" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + }, + { + "name": "register", + "args": [ + { + "type": "pay", + "name": "payment" + }, + { + "type": "uint64", + "name": "app" + } + ], + "returns": { + "type": "void" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + }, + { + "name": "delete", + "args": [ + { + "type": "uint64", + "name": "id" + } + ], + "returns": { + "type": "void" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + }, + { + "name": "cost", + "args": [], + "returns": { + "type": "uint64" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": true, + "events": [], + "recommendations": {} + }, + { + "name": "registerCost", + "args": [], + "returns": { + "type": "uint64" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": true, + "events": [], + "recommendations": {} + }, + { + "name": "exists", + "args": [ + { + "type": "address", + "name": "address" + } + ], + "returns": { + "type": "bool" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": true, + "events": [], + "recommendations": {} + }, + { + "name": "get", + "args": [ + { + "type": "address", + "name": "address" + } + ], + "returns": { + "type": "byte[]" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": true, + "events": [], + "recommendations": {} + }, + { + "name": "mustGet", + "args": [ + { + "type": "address", + "name": "address" + } + ], + "returns": { + "type": "byte[]" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": true, + "events": [], + "recommendations": {} + }, + { + "name": "getList", + "args": [ + { + "type": "address[]", + "name": "addresses" + } + ], + "returns": { + "type": "byte[][]" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": true, + "events": [], + "recommendations": {} + }, + { + "name": "mustGetList", + "args": [ + { + "type": "address[]", + "name": "addresses" + } + ], + "returns": { + "type": "byte[][]" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": true, + "events": [], + "recommendations": {} + } + ], + "arcs": [ + 22, + 28 + ], + "networks": {}, + "state": { + "schema": { + "global": { + "ints": 0, + "bytes": 0 + }, + "local": { + "ints": 0, + "bytes": 0 + } + }, + "keys": { + "global": {}, + "local": {}, + "box": {} + }, + "maps": { + "global": {}, + "local": {}, + "box": { + "walletIDsByAccounts": { + "keyType": "AVMBytes", + "valueType": "AVMBytes", + "prefix": "" + } + } + } + }, + "bareActions": { + "create": [ + "NoOp" + ], + "call": [] + }, + "sourceInfo": { + "approval": { + "sourceInfo": [ + { + "pc": [ + 947, + 1117 + ], + "errorMessage": "Account not found" + }, + { + "pc": [ + 928, + 952, + 1024, + 1122 + ], + "errorMessage": "Box must have value" + }, + { + "pc": [ + 280 + ], + "errorMessage": "Length must be 16" + }, + { + "pc": [ + 29 + ], + "errorMessage": "OnCompletion must be NoOp" + }, + { + "pc": [ + 135 + ], + "errorMessage": "OnCompletion must be NoOp && can only call when creating" + }, + { + "pc": [ + 674 + ], + "errorMessage": "already registered" + }, + { + "pc": [ + 529, + 624, + 636, + 665, + 741 + ], + "errorMessage": "application exists" + }, + { + "pc": [ + 750 + ], + "errorMessage": "does not exist" + }, + { + "pc": [ + 771, + 847 + ], + "errorMessage": "forbidden" + }, + { + "pc": [ + 1005, + 1109 + ], + "errorMessage": "index access is out of bounds" + }, + { + "pc": [ + 632 + ], + "errorMessage": "invalid app to register" + }, + { + "pc": [ + 660 + ], + "errorMessage": "invalid creator" + }, + { + "pc": [ + 985, + 1086 + ], + "errorMessage": "invalid number of bytes for (len+uint8[32][])" + }, + { + "pc": [ + 612, + 733 + ], + "errorMessage": "invalid number of bytes for uint64" + }, + { + "pc": [ + 870, + 898, + 939 + ], + "errorMessage": "invalid number of bytes for uint8[32]" + }, + { + "pc": [ + 322, + 702 + ], + "errorMessage": "invalid payment" + }, + { + "pc": [ + 292, + 603 + ], + "errorMessage": "transaction type is pay" + } + ], + "pcOffsetMethod": "none" + }, + "clear": { + "sourceInfo": [], + "pcOffsetMethod": "none" + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDIgMzIgMTUwMDAwCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgIiIgMHgwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxNAogICAgLy8gZXhwb3J0IGNsYXNzIEVzY3Jvd0ZhY3RvcnkgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTcKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0CiAgICBwdXNoYnl0ZXNzIDB4ZDg1Y2YxODQgMHg2MDdlNzA0NiAweDhhMzllNzlmIDB4OWI2N2ZhNmQgMHgzYzc1NDEyMCAweDRjOWZiNjU2IDB4M2MxYTZmMzMgMHgyYjU2MDJhMyAweDEzZGM1MDhhIDB4NDc1ZDM3NzMgLy8gbWV0aG9kICJuZXcocGF5KXVpbnQ2NCIsIG1ldGhvZCAicmVnaXN0ZXIocGF5LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJkZWxldGUodWludDY0KXZvaWQiLCBtZXRob2QgImNvc3QoKXVpbnQ2NCIsIG1ldGhvZCAicmVnaXN0ZXJDb3N0KCl1aW50NjQiLCBtZXRob2QgImV4aXN0cyhhZGRyZXNzKWJvb2wiLCBtZXRob2QgImdldChhZGRyZXNzKWJ5dGVbXSIsIG1ldGhvZCAibXVzdEdldChhZGRyZXNzKWJ5dGVbXSIsIG1ldGhvZCAiZ2V0TGlzdChhZGRyZXNzW10pYnl0ZVtdW10iLCBtZXRob2QgIm11c3RHZXRMaXN0KGFkZHJlc3NbXSlieXRlW11bXSIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG5ldyByZWdpc3RlciBkZWxldGUgY29zdCBtYWluX3JlZ2lzdGVyQ29zdF9yb3V0ZUA4IGV4aXN0cyBnZXQgbXVzdEdldCBnZXRMaXN0IG11c3RHZXRMaXN0CiAgICBlcnIKCm1haW5fcmVnaXN0ZXJDb3N0X3JvdXRlQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxNDcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUwMDAwMDAwMDAwMDAyZjQ0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDE3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTQKICAgIC8vIGV4cG9ydCBjbGFzcyBFc2Nyb3dGYWN0b3J5IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4gLy8gb24gZXJyb3I6IE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AgJiYgY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCgoKLy8gX3B1eWFfbGliLmFyYzQuZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZChhcnJheTogYnl0ZXMsIG5ld19pdGVtc19ieXRlczogYnl0ZXMsIG5ld19pdGVtc19jb3VudDogdWludDY0KSAtPiBieXRlczoKZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZDoKICAgIHByb3RvIDMgMQogICAgZnJhbWVfZGlnIC0zCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cAogICAgZnJhbWVfZGlnIC0xCiAgICArCiAgICBzd2FwCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY292ZXIgMgogICAgZnJhbWVfZGlnIC0zCiAgICBpbnRjXzIgLy8gMgogICAgZGlnIDIKICAgIHN1YnN0cmluZzMKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGJ6ZXJvCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMwogICAgbGVuCiAgICBmcmFtZV9kaWcgLTMKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgZHVwCiAgICBpbnRjXzEgLy8gMAoKZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZF9mb3JfaGVhZGVyQDI6CiAgICBmcmFtZV9kaWcgNAogICAgZnJhbWVfZGlnIDIKICAgIDwKICAgIGJ6IGR5bmFtaWNfYXJyYXlfY29uY2F0X2J5dGVfbGVuZ3RoX2hlYWRfYWZ0ZXJfZm9yQDUKICAgIGZyYW1lX2RpZyAzCiAgICBkdXAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgY292ZXIgNAogICAgdW5jb3ZlciAyCiAgICByZXBsYWNlMwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDEKICAgIGRpZyAxCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgICsKICAgIGZyYW1lX2J1cnkgMwogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGZyYW1lX2J1cnkgNAogICAgYiBkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkX2Zvcl9oZWFkZXJAMgoKZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZF9hZnRlcl9mb3JANToKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9kaWcgMQogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjpieXRlczE2KGFjYzogYnl0ZXMpIC0+IGJ5dGVzOgpieXRlczE2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTAKICAgIC8vIGZ1bmN0aW9uIGJ5dGVzMTYoYWNjOiBBY2NvdW50KTogYnl0ZXM8MTY+IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTEKICAgIC8vIHJldHVybiBhY2MuYnl0ZXMuc2xpY2UoMCwgMTYpLnRvRml4ZWQoeyBsZW5ndGg6IDE2IH0pCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18xIC8vIDAKICAgIGRpZyAxCiAgICA+PQogICAgaW50Y18xIC8vIDAKICAgIGRpZyAyCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgcHVzaGludCAxNiAvLyAxNgogICAgZGlnIDIKICAgID49CiAgICBwdXNoaW50IDE2IC8vIDE2CiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBmcmFtZV9kaWcgLTEKICAgIGNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDE2IC8vIDE2CiAgICA9PQogICAgYXNzZXJ0IC8vIExlbmd0aCBtdXN0IGJlIDE2CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo6RXNjcm93RmFjdG9yeS5uZXdbcm91dGluZ10oKSAtPiB2b2lkOgpuZXc6CiAgICBieXRlY18xIC8vICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czozMAogICAgLy8gbmV3KHBheW1lbnQ6IGd0eG4uUGF5bWVudFR4bik6IHVpbnQ2NCB7CiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMCAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjMxCiAgICAvLyBjb25zdCBub25BcHBDYWxsZXIgPSBHbG9iYWwuY2FsbGVyQXBwbGljYXRpb25JZCA9PT0gMAogICAgZ2xvYmFsIENhbGxlckFwcGxpY2F0aW9uSUQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjI0CiAgICAvLyBjb25zdCBub25BcHBDYWxsZXIgPSBHbG9iYWwuY2FsbGVyQXBwbGljYXRpb25JZCA9PT0gMAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoyNS0yNwogICAgLy8gcmV0dXJuIG5vbkFwcENhbGxlcgogICAgLy8gICA/IEJ5dGVzKGJ5dGVzMTYoVHhuLnNlbmRlcikpCiAgICAvLyAgIDogQnl0ZXMoaXRvYihHbG9iYWwuY2FsbGVyQXBwbGljYXRpb25JZCkpCiAgICBibnogbmV3X3Rlcm5hcnlfZmFsc2VAOQogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MjYKICAgIC8vID8gQnl0ZXMoYnl0ZXMxNihUeG4uc2VuZGVyKSkKICAgIHR4biBTZW5kZXIKICAgIGNhbGxzdWIgYnl0ZXMxNgoKbmV3X3Rlcm5hcnlfbWVyZ2VAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo0MS00OAogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIHBheW1lbnQsCiAgICAvLyAgIHsKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiBjaGlsZEFwcE1CUiArIEdsb2JhbC5taW5CYWxhbmNlLAogICAgLy8gICB9LAogICAgLy8gICBFUlJfSU5WQUxJRF9QQVlNRU5UCiAgICAvLyApCiAgICBkaWcgMgogICAgZHVwCiAgICBndHhucyBSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6NDQKICAgIC8vIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo0MS00OAogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIHBheW1lbnQsCiAgICAvLyAgIHsKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiBjaGlsZEFwcE1CUiArIEdsb2JhbC5taW5CYWxhbmNlLAogICAgLy8gICB9LAogICAgLy8gICBFUlJfSU5WQUxJRF9QQVlNRU5UCiAgICAvLyApCiAgICA9PQogICAgc3dhcAogICAgZ3R4bnMgQW1vdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo0NQogICAgLy8gYW1vdW50OiBjaGlsZEFwcE1CUiArIEdsb2JhbC5taW5CYWxhbmNlLAogICAgaW50YyA0IC8vIDE1MDAwMAogICAgZ2xvYmFsIE1pbkJhbGFuY2UKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjQxLTQ4CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgcGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IGNoaWxkQXBwTUJSICsgR2xvYmFsLm1pbkJhbGFuY2UsCiAgICAvLyAgIH0sCiAgICAvLyAgIEVSUl9JTlZBTElEX1BBWU1FTlQKICAgIC8vICkKICAgID09CiAgICAmJgogICAgYXNzZXJ0IC8vIGludmFsaWQgcGF5bWVudAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6NTAtNTQKICAgIC8vIGNvbnN0IG5ld0VzY3JvdyA9IGVzY3Jvdy5jYWxsLmNyZWF0ZSgKICAgIC8vICAgewogICAgLy8gICAgIGFyZ3M6IFtjcmVhdG9yXSwKICAgIC8vICAgfQogICAgLy8gKS5pdHhuLmNyZWF0ZWRBcHAKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjUyCiAgICAvLyBhcmdzOiBbY3JlYXRvcl0sCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6NTAtNTQKICAgIC8vIGNvbnN0IG5ld0VzY3JvdyA9IGVzY3Jvdy5jYWxsLmNyZWF0ZSgKICAgIC8vICAgewogICAgLy8gICAgIGFyZ3M6IFtjcmVhdG9yXSwKICAgIC8vICAgfQogICAgLy8gKS5pdHhuLmNyZWF0ZWRBcHAKICAgIHB1c2hieXRlcyAweDhlNzkzNThkIC8vIG1ldGhvZCAiY3JlYXRlKGJ5dGVbXSl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czozNAogICAgLy8gY29uc3QgZXNjcm93ID0gY29tcGlsZUFyYzQoRXNjcm93KTsKICAgIGludGNfMCAvLyAxCiAgICBpdHhuX2ZpZWxkIEdsb2JhbE51bUJ5dGVTbGljZQogICAgcHVzaGJ5dGVzIGJhc2U2NChDNEVCUXc9PSkKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgcHVzaGJ5dGVzIGJhc2U2NChDeUFDQVFDQUJDUTNqVHcyR2dDT0FRQWxNUmtVUkRFWVFRQU9nQVJscVh2TU5ob0FqZ0VBT1FDQUJJNTVOWTAyR2dDT0FRQU5BREVaZ1FVU01SZ1FSRUlBUURZYUFVa2pXWUVDQ0VzQkZSSkVWd0lBZ0FkamNtVmhkRzl5VEdjaVF6WWFBVWtWZ1NBU1JERUFNZ2tTUkxFeUNySUhzaUFqc2dnaXNoQWpzZ0d6SWtNeEFESUpFa1N4TWdteUNTS3lFQ095QWJNaVF3PT0pCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo1MC01NAogICAgLy8gY29uc3QgbmV3RXNjcm93ID0gZXNjcm93LmNhbGwuY3JlYXRlKAogICAgLy8gICB7CiAgICAvLyAgICAgYXJnczogW2NyZWF0b3JdLAogICAgLy8gICB9CiAgICAvLyApLml0eG4uY3JlYXRlZEFwcAogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgZ2l0eG4gMCBDcmVhdGVkQXBwbGljYXRpb25JRAogICAgZHVwCiAgICBidXJ5IDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjU2LTYxCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogbmV3RXNjcm93LmFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiBHbG9iYWwubWluQmFsYW5jZQogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjU4CiAgICAvLyByZWNlaXZlcjogbmV3RXNjcm93LmFkZHJlc3MsCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo1OQogICAgLy8gYW1vdW50OiBHbG9iYWwubWluQmFsYW5jZQogICAgZ2xvYmFsIE1pbkJhbGFuY2UKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo1Ni02MAogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgcmVjZWl2ZXI6IG5ld0VzY3Jvdy5hZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogR2xvYmFsLm1pbkJhbGFuY2UKICAgIC8vICAgfSkKICAgIGludGNfMCAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjU2LTYxCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogbmV3RXNjcm93LmFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiBHbG9iYWwubWluQmFsYW5jZQogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo2My02OAogICAgLy8gZXNjcm93LmNhbGwucmVrZXkoewogICAgLy8gICBhcHBJZDogbmV3RXNjcm93LmlkLAogICAgLy8gICBhcmdzOiBbCiAgICAvLyAgICAgbm9uQXBwQ2FsbGVyID8gVHhuLnNlbmRlciA6IEdsb2JhbC5jYWxsZXJBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vICAgXQogICAgLy8gfSkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjY2CiAgICAvLyBub25BcHBDYWxsZXIgPyBUeG4uc2VuZGVyIDogR2xvYmFsLmNhbGxlckFwcGxpY2F0aW9uQWRkcmVzcwogICAgZHVwCiAgICBibnogbmV3X3Rlcm5hcnlfZmFsc2VANQogICAgdHhuIFNlbmRlcgoKbmV3X3Rlcm5hcnlfbWVyZ2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjYzLTY4CiAgICAvLyBlc2Nyb3cuY2FsbC5yZWtleSh7CiAgICAvLyAgIGFwcElkOiBuZXdFc2Nyb3cuaWQsCiAgICAvLyAgIGFyZ3M6IFsKICAgIC8vICAgICBub25BcHBDYWxsZXIgPyBUeG4uc2VuZGVyIDogR2xvYmFsLmNhbGxlckFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gICBdCiAgICAvLyB9KQogICAgcHVzaGJ5dGVzIDB4NjVhOTdiY2MgLy8gbWV0aG9kICJyZWtleShhZGRyZXNzKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgZGlnIDIKICAgIGR1cAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MzAKICAgIC8vIG5ldyhwYXltZW50OiBndHhuLlBheW1lbnRUeG4pOiB1aW50NjQgewogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbmV3X3Rlcm5hcnlfZmFsc2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjY2CiAgICAvLyBub25BcHBDYWxsZXIgPyBUeG4uc2VuZGVyIDogR2xvYmFsLmNhbGxlckFwcGxpY2F0aW9uQWRkcmVzcwogICAgZ2xvYmFsIENhbGxlckFwcGxpY2F0aW9uQWRkcmVzcwogICAgYiBuZXdfdGVybmFyeV9tZXJnZUA2CgpuZXdfdGVybmFyeV9mYWxzZUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MjcKICAgIC8vIDogQnl0ZXMoaXRvYihHbG9iYWwuY2FsbGVyQXBwbGljYXRpb25JZCkpCiAgICBnbG9iYWwgQ2FsbGVyQXBwbGljYXRpb25JRAogICAgaXRvYgogICAgYiBuZXdfdGVybmFyeV9tZXJnZUAxMAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjpFc2Nyb3dGYWN0b3J5LnJlZ2lzdGVyW3JvdXRpbmddKCkgLT4gdm9pZDoKcmVnaXN0ZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo3MwogICAgLy8gcmVnaXN0ZXIocGF5bWVudDogZ3R4bi5QYXltZW50VHhuLCBhcHA6IHVpbnQ2NCk6IHZvaWQgewogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA4IC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo3NQogICAgLy8gYXNzZXJ0KEdsb2JhbC5jYWxsZXJBcHBsaWNhdGlvbklkICE9PSAwKQogICAgZ2xvYmFsIENhbGxlckFwcGxpY2F0aW9uSUQKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6NzgKICAgIC8vIGFzc2VydChhcHAgPT09IDAgfHwgQXBwbGljYXRpb24oYXBwKS5jcmVhdG9yID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywgRVJSX0lOVkFMSURfQVBQKQogICAgYnogcmVnaXN0ZXJfYm9vbF90cnVlQDMKICAgIGR1cAogICAgYXBwX3BhcmFtc19nZXQgQXBwQ3JlYXRvcgogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGV4aXN0cwogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBieiByZWdpc3Rlcl9ib29sX2ZhbHNlQDQKCnJlZ2lzdGVyX2Jvb2xfdHJ1ZUAzOgogICAgaW50Y18wIC8vIDEKCnJlZ2lzdGVyX2Jvb2xfbWVyZ2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjc4CiAgICAvLyBhc3NlcnQoYXBwID09PSAwIHx8IEFwcGxpY2F0aW9uKGFwcCkuY3JlYXRvciA9PT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsIEVSUl9JTlZBTElEX0FQUCkKICAgIGFzc2VydCAvLyBpbnZhbGlkIGFwcCB0byByZWdpc3RlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6ODEKICAgIC8vIGlmIChBcHBsaWNhdGlvbihhcHApLmNyZWF0b3IgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzKSB7CiAgICBkdXAKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcENyZWF0b3IKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYnogcmVnaXN0ZXJfZWxzZV9ib2R5QDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjgyCiAgICAvLyBjcmVhdG9yID0gb3AuQXBwR2xvYmFsLmdldEV4Qnl0ZXMoYXBwLCBCeXRlcyhFc2Nyb3dHbG9iYWxTdGF0ZUtleXNDcmVhdG9yKSlbMF0KICAgIGR1cAogICAgcHVzaGJ5dGVzICJjcmVhdG9yIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHBvcAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo4MwogICAgLy8gYXNzZXJ0KGJ0b2koY3JlYXRvcikgPT09IEdsb2JhbC5jYWxsZXJBcHBsaWNhdGlvbklkLCBFUlJfSU5WQUxJRF9DUkVBVE9SKQogICAgYnRvaQogICAgZ2xvYmFsIENhbGxlckFwcGxpY2F0aW9uSUQKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBjcmVhdG9yCgpyZWdpc3Rlcl9hZnRlcl9pZl9lbHNlQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo4OQogICAgLy8gY29uc3QgYXBwQWRkcmVzcyA9IGJ5dGVzMTYoQXBwbGljYXRpb24oYXBwKS5hZGRyZXNzKQogICAgZGlnIDEKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIGNhbGxzdWIgYnl0ZXMxNgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6OTAKICAgIC8vIGFzc2VydCghdGhpcy53YWxsZXRJRHNCeUFjY291bnRzKGFwcEFkZHJlc3MpLmV4aXN0cywgRVJSX0FMUkVBRFlfUkVHSVNURVJFRCkKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gYWxyZWFkeSByZWdpc3RlcmVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo5Mi05OQogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIHBheW1lbnQsCiAgICAvLyAgIHsKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiB0aGlzLm1icihjcmVhdG9yLmxlbmd0aCksCiAgICAvLyAgIH0sCiAgICAvLyAgIEVSUl9JTlZBTElEX1BBWU1FTlQKICAgIC8vICkKICAgIGRpZyAzCiAgICBkdXAKICAgIGd0eG5zIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo5NQogICAgLy8gcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjkyLTk5CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgcGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IHRoaXMubWJyKGNyZWF0b3IubGVuZ3RoKSwKICAgIC8vICAgfSwKICAgIC8vICAgRVJSX0lOVkFMSURfUEFZTUVOVAogICAgLy8gKQogICAgPT0KICAgIHN3YXAKICAgIGd0eG5zIEFtb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6OTYKICAgIC8vIGFtb3VudDogdGhpcy5tYnIoY3JlYXRvci5sZW5ndGgpLAogICAgdW5jb3ZlciAzCiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGxlbgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MjAKICAgIC8vIHJldHVybiBNaW5XYWxsZXRJRHNCeUFjY291bnRzTWJyICsgKGxlbmd0aCAqIEJveENvc3RQZXJCeXRlKQogICAgcHVzaGludCA0MDAgLy8gNDAwCiAgICAqCiAgICBwdXNoaW50IDg5MDAgLy8gODkwMAogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6OTItOTkKICAgIC8vIGFzc2VydE1hdGNoKAogICAgLy8gICBwYXltZW50LAogICAgLy8gICB7CiAgICAvLyAgICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogdGhpcy5tYnIoY3JlYXRvci5sZW5ndGgpLAogICAgLy8gICB9LAogICAgLy8gICBFUlJfSU5WQUxJRF9QQVlNRU5UCiAgICAvLyApCiAgICA9PQogICAgJiYKICAgIGFzc2VydCAvLyBpbnZhbGlkIHBheW1lbnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjEwMQogICAgLy8gdGhpcy53YWxsZXRJRHNCeUFjY291bnRzKGFwcEFkZHJlc3MpLnZhbHVlID0gY3JlYXRvcgogICAgZGlnIDEKICAgIGJveF9kZWwKICAgIHBvcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6NzMKICAgIC8vIHJlZ2lzdGVyKHBheW1lbnQ6IGd0eG4uUGF5bWVudFR4biwgYXBwOiB1aW50NjQpOiB2b2lkIHsKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCnJlZ2lzdGVyX2Vsc2VfYm9keUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6ODUKICAgIC8vIGNyZWF0b3IgPSBCeXRlcyhpdG9iKEdsb2JhbC5jYWxsZXJBcHBsaWNhdGlvbklkKSkKICAgIGdsb2JhbCBDYWxsZXJBcHBsaWNhdGlvbklECiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo4NgogICAgLy8gYXBwID0gR2xvYmFsLmNhbGxlckFwcGxpY2F0aW9uSWQKICAgIGdsb2JhbCBDYWxsZXJBcHBsaWNhdGlvbklECiAgICBidXJ5IDIKICAgIGIgcmVnaXN0ZXJfYWZ0ZXJfaWZfZWxzZUA4CgpyZWdpc3Rlcl9ib29sX2ZhbHNlQDQ6CiAgICBpbnRjXzEgLy8gMAogICAgYiByZWdpc3Rlcl9ib29sX21lcmdlQDUKCgovLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo6RXNjcm93RmFjdG9yeS5kZWxldGVbcm91dGluZ10oKSAtPiB2b2lkOgpkZWxldGU6CiAgICBieXRlY18xIC8vICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxMDQKICAgIC8vIGRlbGV0ZShpZDogdWludDY0KTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA4IC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxMDUKICAgIC8vIGNvbnN0IGNhbGxlciA9IEdsb2JhbC5jYWxsZXJBcHBsaWNhdGlvbklkCiAgICBnbG9iYWwgQ2FsbGVyQXBwbGljYXRpb25JRAogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTA2CiAgICAvLyBjb25zdCBrZXkgPSBieXRlczE2KEFwcGxpY2F0aW9uKGlkKS5hZGRyZXNzKQogICAgYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGV4aXN0cwogICAgY2FsbHN1YiBieXRlczE2CiAgICBkdXBuIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjEwNwogICAgLy8gYXNzZXJ0KHRoaXMud2FsbGV0SURzQnlBY2NvdW50cyhrZXkpLmV4aXN0cywgRVJSX0RPRVNOVF9FWElTVCkKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGRvZXMgbm90IGV4aXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxMDkKICAgIC8vIGNvbnN0IGNyZWF0b3IgPSB0aGlzLndhbGxldElEc0J5QWNjb3VudHMoa2V5KS52YWx1ZQogICAgYm94X2dldAogICAgcG9wCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjExMAogICAgLy8gaWYgKGNyZWF0b3IubGVuZ3RoID09PSA4KSB7CiAgICBsZW4KICAgIGR1cAogICAgY292ZXIgMgogICAgcHVzaGludCA4IC8vIDgKICAgID09CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGJ6IGRlbGV0ZV9lbHNlX2JvZHlAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTExCiAgICAvLyBhc3NlcnQoY2FsbGVyID09PSBidG9pKGNyZWF0b3IpLCBFUlJfRk9SQklEREVOKTsKICAgIGJ0b2kKICAgIGRpZyA0CiAgICA9PQogICAgYXNzZXJ0IC8vIGZvcmJpZGRlbgoKZGVsZXRlX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gTWluV2FsbGV0SURzQnlBY2NvdW50c01iciArIChsZW5ndGggKiBCb3hDb3N0UGVyQnl0ZSkKICAgIGRpZyAxCiAgICBwdXNoaW50IDQwMCAvLyA0MDAKICAgICoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjExOS0xMjEKICAgIC8vIE1pblBhZ2VzICsKICAgIC8vIEdsb2JhbFN0YXRlS2V5Qnl0ZXNDb3N0ICsKICAgIC8vIHRoaXMubWJyKGNyZWF0b3IubGVuZ3RoKQogICAgcHVzaGludCAxNTg5MDAgLy8gMTU4OTAwCiAgICArCiAgICBidXJ5IDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjEyNAogICAgLy8gc3BlbmRpbmdBY2NvdW50LmNhbGwuZGVsZXRlKHsgYXBwSWQ6IGlkIH0pCiAgICBpdHhuX2JlZ2luCiAgICBwdXNoYnl0ZXMgMHgyNDM3OGQzYyAvLyBtZXRob2QgImRlbGV0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBwdXNoaW50IDUgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIGRpZyA0CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxMjYKICAgIC8vIHRoaXMud2FsbGV0SURzQnlBY2NvdW50cyhrZXkpLmRlbGV0ZSgpCiAgICBkaWcgMgogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxMjgtMTMzCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogY3JlYXRvci5sZW5ndGggPT09IDggPyBHbG9iYWwuY2FsbGVyQXBwbGljYXRpb25BZGRyZXNzIDogVHhuLnNlbmRlciwKICAgIC8vICAgICBhbW91bnQ6IHJlZnVuZEFtb3VudAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjEzMAogICAgLy8gcmVjZWl2ZXI6IGNyZWF0b3IubGVuZ3RoID09PSA4ID8gR2xvYmFsLmNhbGxlckFwcGxpY2F0aW9uQWRkcmVzcyA6IFR4bi5zZW5kZXIsCiAgICBkdXAKICAgIGJ6IGRlbGV0ZV90ZXJuYXJ5X2ZhbHNlQDcKICAgIGdsb2JhbCBDYWxsZXJBcHBsaWNhdGlvbkFkZHJlc3MKCmRlbGV0ZV90ZXJuYXJ5X21lcmdlQDg6CiAgICBkaWcgNgogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjEyOC0xMzIKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHJlY2VpdmVyOiBjcmVhdG9yLmxlbmd0aCA9PT0gOCA/IEdsb2JhbC5jYWxsZXJBcHBsaWNhdGlvbkFkZHJlc3MgOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGFtb3VudDogcmVmdW5kQW1vdW50CiAgICAvLyAgIH0pCiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxMjgtMTMzCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogY3JlYXRvci5sZW5ndGggPT09IDggPyBHbG9iYWwuY2FsbGVyQXBwbGljYXRpb25BZGRyZXNzIDogVHhuLnNlbmRlciwKICAgIC8vICAgICBhbW91bnQ6IHJlZnVuZEFtb3VudAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxMDQKICAgIC8vIGRlbGV0ZShpZDogdWludDY0KTogdm9pZCB7CiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgpkZWxldGVfdGVybmFyeV9mYWxzZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTMwCiAgICAvLyByZWNlaXZlcjogY3JlYXRvci5sZW5ndGggPT09IDggPyBHbG9iYWwuY2FsbGVyQXBwbGljYXRpb25BZGRyZXNzIDogVHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIGIgZGVsZXRlX3Rlcm5hcnlfbWVyZ2VAOAoKZGVsZXRlX2Vsc2VfYm9keUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTEzCiAgICAvLyBhc3NlcnQoQnl0ZXMoYnl0ZXMxNihUeG4uc2VuZGVyKSkgPT09IGNyZWF0b3IsIEVSUl9GT1JCSURERU4pOwogICAgdHhuIFNlbmRlcgogICAgY2FsbHN1YiBieXRlczE2CiAgICA9PQogICAgYXNzZXJ0IC8vIGZvcmJpZGRlbgogICAgYiBkZWxldGVfYWZ0ZXJfaWZfZWxzZUA0CgoKLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6OkVzY3Jvd0ZhY3RvcnkuY29zdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNvc3Q6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxNDAtMTQxCiAgICAvLyBNaW5QYWdlcyArCiAgICAvLyBHbG9iYWxTdGF0ZUtleUJ5dGVzQ29zdCArCiAgICBpbnRjIDQgLy8gMTUwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxNDIKICAgIC8vIEdsb2JhbC5taW5CYWxhbmNlCiAgICBnbG9iYWwgTWluQmFsYW5jZQogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTQwLTE0MgogICAgLy8gTWluUGFnZXMgKwogICAgLy8gR2xvYmFsU3RhdGVLZXlCeXRlc0Nvc3QgKwogICAgLy8gR2xvYmFsLm1pbkJhbGFuY2UKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjEzNwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6OkVzY3Jvd0ZhY3RvcnkuZXhpc3RzW3JvdXRpbmddKCkgLT4gdm9pZDoKZXhpc3RzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTUzCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ4WzMyXQogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTU1CiAgICAvLyByZXR1cm4gdGhpcy53YWxsZXRJRHNCeUFjY291bnRzKGJ5dGVzMTYoYWRkcmVzcy5uYXRpdmUpKS5leGlzdHMKICAgIGNhbGxzdWIgYnl0ZXMxNgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxNTMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgcHVzaGJ5dGVzIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjpFc2Nyb3dGYWN0b3J5LmdldFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjE1OQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXBuIDIKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50OFszMl0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjE2MQogICAgLy8gaWYgKCF0aGlzLndhbGxldElEc0J5QWNjb3VudHMoYnl0ZXMxNihhZGRyZXNzLm5hdGl2ZSkpLmV4aXN0cykgewogICAgY2FsbHN1YiBieXRlczE2CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJueiBnZXRfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxNjIKICAgIC8vIHJldHVybiBCeXRlcygnJykKICAgIGJ5dGVjXzEgLy8gIiIKCmdldF9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjpFc2Nyb3dGYWN0b3J5LmdldEA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTU5CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgpnZXRfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTY0CiAgICAvLyByZXR1cm4gdGhpcy53YWxsZXRJRHNCeUFjY291bnRzKGJ5dGVzMTYoYWRkcmVzcy5uYXRpdmUpKS52YWx1ZQogICAgZHVwCiAgICBjYWxsc3ViIGJ5dGVzMTYKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxNTkKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgYiBnZXRfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo6RXNjcm93RmFjdG9yeS5nZXRANAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjpFc2Nyb3dGYWN0b3J5Lm11c3RHZXRbcm91dGluZ10oKSAtPiB2b2lkOgptdXN0R2V0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTY4CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ4WzMyXQogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTcwCiAgICAvLyBhc3NlcnQodGhpcy53YWxsZXRJRHNCeUFjY291bnRzKGJ5dGVzMTYoYWRkcmVzcy5uYXRpdmUpKS5leGlzdHMsICdBY2NvdW50IG5vdCBmb3VuZCcpCiAgICBkdXAKICAgIGNhbGxzdWIgYnl0ZXMxNgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gQWNjb3VudCBub3QgZm91bmQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjE3MQogICAgLy8gcmV0dXJuIHRoaXMud2FsbGV0SURzQnlBY2NvdW50cyhieXRlczE2KGFkZHJlc3MubmF0aXZlKSkudmFsdWUKICAgIGNhbGxzdWIgYnl0ZXMxNgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjE2OAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjpFc2Nyb3dGYWN0b3J5LmdldExpc3Rbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRMaXN0OgogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjE3NQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXBuIDIKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzMgLy8gMzIKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdWludDhbMzJdW10pCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxNzcKICAgIC8vIGNvbnN0IGFwcHMgPSBuZXcgRHluYW1pY0FycmF5PER5bmFtaWNCeXRlcz4oKQogICAgYnl0ZWNfMiAvLyAweDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjE3OAogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGFkZHJlc3Nlcy5sZW5ndGg7IGkrKykgewogICAgaW50Y18xIC8vIDAKCmdldExpc3Rfd2hpbGVfdG9wQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxNzgKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhZGRyZXNzZXMubGVuZ3RoOyBpKyspIHsKICAgIGR1cAogICAgZGlnIDMKICAgIDwKICAgIGJ6IGdldExpc3RfYWZ0ZXJfd2hpbGVANwogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTc5CiAgICAvLyBjb25zdCBhZGRyZXNzID0gYWRkcmVzc2VzW2ldCiAgICBkaWcgMwogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAxCiAgICBpbnRjXzMgLy8gMzIKICAgICoKICAgIGludGNfMyAvLyAzMgogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkdXAKICAgIGJ1cnkgNgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTgwCiAgICAvLyBpZiAodGhpcy53YWxsZXRJRHNCeUFjY291bnRzKGJ5dGVzMTYoYWRkcmVzcy5uYXRpdmUpKS5leGlzdHMpIHsKICAgIGNhbGxzdWIgYnl0ZXMxNgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBnZXRMaXN0X2Vsc2VfYm9keUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxODEKICAgIC8vIGFwcHMucHVzaChuZXcgRHluYW1pY0J5dGVzKHRoaXMud2FsbGV0SURzQnlBY2NvdW50cyhieXRlczE2KGFkZHJlc3MubmF0aXZlKSkudmFsdWUpKQogICAgZGlnIDQKICAgIGNhbGxzdWIgYnl0ZXMxNgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBkaWcgMgogICAgc3dhcAogICAgaW50Y18wIC8vIDEKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZAogICAgYnVyeSAyCgpnZXRMaXN0X2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjE3OAogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGFkZHJlc3Nlcy5sZW5ndGg7IGkrKykgewogICAgZHVwCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIGdldExpc3Rfd2hpbGVfdG9wQDIKCmdldExpc3RfZWxzZV9ib2R5QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxODMKICAgIC8vIGFwcHMucHVzaChuZXcgRHluYW1pY0J5dGVzKCcnKSkKICAgIGRpZyAxCiAgICBieXRlY18yIC8vIDB4MDAwMAogICAgaW50Y18wIC8vIDEKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZAogICAgYnVyeSAyCiAgICBiIGdldExpc3RfYWZ0ZXJfaWZfZWxzZUA2CgpnZXRMaXN0X2FmdGVyX3doaWxlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxNzUKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBkaWcgMgogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo6RXNjcm93RmFjdG9yeS5tdXN0R2V0TGlzdFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm11c3RHZXRMaXN0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTkwCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cG4gMgogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMyAvLyAzMgogICAgKgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbit1aW50OFszMl1bXSkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjE5MgogICAgLy8gY29uc3QgYXBwcyA9IG5ldyBEeW5hbWljQXJyYXk8RHluYW1pY0J5dGVzPigpCiAgICBieXRlY18yIC8vIDB4MDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTkzCiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgYWRkcmVzc2VzLmxlbmd0aDsgaSsrKSB7CiAgICBpbnRjXzEgLy8gMAoKbXVzdEdldExpc3Rfd2hpbGVfdG9wQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxOTMKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhZGRyZXNzZXMubGVuZ3RoOyBpKyspIHsKICAgIGR1cAogICAgZGlnIDMKICAgIDwKICAgIGJ6IG11c3RHZXRMaXN0X2FmdGVyX3doaWxlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjE5NAogICAgLy8gY29uc3QgYWRkcmVzcyA9IGFkZHJlc3Nlc1tpXQogICAgZGlnIDMKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzMgLy8gMzIKICAgICoKICAgIGludGNfMyAvLyAzMgogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxOTUKICAgIC8vIGFzc2VydCh0aGlzLndhbGxldElEc0J5QWNjb3VudHMoYnl0ZXMxNihhZGRyZXNzLm5hdGl2ZSkpLmV4aXN0cywgJ0FjY291bnQgbm90IGZvdW5kJykKICAgIGR1cAogICAgY2FsbHN1YiBieXRlczE2CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBBY2NvdW50IG5vdCBmb3VuZAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTk2CiAgICAvLyBhcHBzLnB1c2gobmV3IER5bmFtaWNCeXRlcyh0aGlzLndhbGxldElEc0J5QWNjb3VudHMoYnl0ZXMxNihhZGRyZXNzLm5hdGl2ZSkpLnZhbHVlKSkKICAgIGNhbGxzdWIgYnl0ZXMxNgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBkaWcgMwogICAgc3dhcAogICAgaW50Y18wIC8vIDEKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZAogICAgYnVyeSAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxOTMKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhZGRyZXNzZXMubGVuZ3RoOyBpKyspIHsKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgbXVzdEdldExpc3Rfd2hpbGVfdG9wQDIKCm11c3RHZXRMaXN0X2FmdGVyX3doaWxlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxOTAKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBkaWcgMgogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4K", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CyAFAQACIPCTCSYDBBUffHUAAgAAMRtBAGYxGRREMRhEggoE2FzxhARgfnBGBIo5558Em2f6bQQ8dUEgBEyftlYEPBpvMwQrVgKjBBPcUIoER103czYaAI4KAKwB5AJmAuUAAQLxAwwDNgNZA78AgAwVH3x1AAAAAAAAL0SwIkMxGRQxGBQQQ4oDAYv9I1lJi/8ITCQLJAhLARZXBgJOAov9JEsCUov/JAuvUIv9FYv9TwNPAlJQi/5QTCQLSSOLBIsCDEEAI4sDSRZXBgKLAYsESU4ETwJdSYwBSwFZJAgIjAMkCIwEQv/ViwCLAVCMAImKAQGL/xUjSwEPI0sCTwJNgRBLAg+BEE8DTwJNi/9OAlJJFYEQEkSJKTEWIglJOBAiEkQyDUlAASExAIj/wksCSTgHMgoSTDgIIQQyAQgSEESxSRUWVwYCTFCABI55NY2yGrIaIrI1gAQLgQFDskKAlwELIAIBAIAEJDeNPDYaAI4BACUxGRREMRhBAA6ABGWpe8w2GgCOAQA5AIAEjnk1jTYaAI4BAA0AMRmBBRIxGBBEQgBANhoBSSNZgQIISwEVEkRXAgCAB2NyZWF0b3JMZyJDNhoBSRWBIBJEMQAyCRJEsTIKsgeyICOyCCKyECOyAbMiQzEAMgkSRLEyCbIJIrIQI7IBsyJDskAjshmBBrIQI7IBs7cAPUlFBLFyCEQyAbIIsgcishAjsgGzsUlAACMxAIAEZal7zLIashojshlLAkmyGIEGshAjsgGzFihMULAiQzIOQv/aMg0WQv7eMRYiCUk4ECISRDYaAUkVgQgSRBdJMg1EQQAKSXIHRDIKEkEAWSJESXIHRDIKEkEAQ0mAB2NyZWF0b3JlSEkXMg0SREsBcghEiP5VSb1FARRESwNJOAcyChJMOAhPA0lOAxWBkAMLgcRFCBIQREsBvEi/IkMyDRYyDUUCQv/FI0L/pCk2GgFJFYEIEkQXSTINTHIIRIj+CUcCvUUBRL5ISRVJTgKBCBJJTgJBAEoXSwQSREsBgZADC4G02QkIRQaxgAQkN408shqBBbIZSwSyGIEGshAjsgGzSwK8SLFJQQARMg5LBrIIsgcishAjsgGzIkMxAEL/7DEAiP2kEkRC/7EhBDIBCBYoTFCwIkM2GgFJFSUSRIj9iL1FAYABACNPAlQoTFCwIkM2GgFHAhUlEkSI/Wy9RQFAAA8pSRUWVwYCTFAoTFCwIkNJiP1TvkRC/+k2GgFJFSUSREmI/UK9RQFEiP07vkRJFRZXBgJMUChMULAiQyM2GgFHAiNZSU4CJQskCEwVEkQqI0lLAwxBAENLA1cCAEsBJQslWElFBoj8/r1FAUEAIEsEiPzzvkRJFRZXBgJMUEsCTCKI/HhFAkkiCEUBQv/CSwEqIoj8Z0UCQv/sKEsCULAiQzYaAUcCI1lJTgIlCyQITBUSRCojSUsDDEEAM0sDVwIASwFJTgIlCyVYSYj8mL1FAUSI/JG+REkVFlcGAkxQSwNMIoj8FkUDIghFAUL/xihLAlCwIkM=", + "clear": "C4EBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 5, + "minor": 2, + "patch": 0 + } + }, + "events": [], + "templateVariables": {} +} \ No newline at end of file diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/EscrowFactory.clear.puya.map b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/EscrowFactory.clear.puya.map new file mode 100644 index 000000000..bf29998bd --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/EscrowFactory.clear.puya.map @@ -0,0 +1,25 @@ +{ + "version": 3, + "sources": [], + "mappings": ";;;", + "op_pc_offset": 0, + "pc_events": { + "1": { + "subroutine": "@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram", + "params": {}, + "block": "main", + "stack_in": [], + "op": "pushint 1 // 1", + "defined_out": [ + "1" + ], + "stack_out": [ + "1" + ] + }, + "3": { + "op": "return", + "stack_out": [] + } + } +} \ No newline at end of file diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/EscrowFactory.clear.teal b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/EscrowFactory.clear.teal new file mode 100644 index 000000000..42f81b0f1 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/EscrowFactory.clear.teal @@ -0,0 +1,7 @@ +#pragma version 11 +#pragma typetrack false + +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: + pushint 1 // 1 + return diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/EscrowFactoryClient.ts b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/EscrowFactoryClient.ts new file mode 100644 index 000000000..d7ae8722e --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/escrow/EscrowFactoryClient.ts @@ -0,0 +1,1391 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^7 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, AppReturn, SendAppTransactionResult } from '@algorandfoundation/algokit-utils/types/app' +import { Arc56Contract, getArc56ReturnValue, getABIStructFromABITuple } from '@algorandfoundation/algokit-utils/types/app-arc56' +import { + AppClient as _AppClient, + AppClientMethodCallParams, + AppClientParams, + AppClientBareCallParams, + CallOnComplete, + AppClientCompilationParams, + ResolveAppClientByCreatorAndName, + ResolveAppClientByNetwork, + CloneAppClientParams, +} from '@algorandfoundation/algokit-utils/types/app-client' +import { AppFactory as _AppFactory, AppFactoryAppClientParams, AppFactoryResolveAppClientByCreatorAndNameParams, AppFactoryDeployParams, AppFactoryParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, AppCallMethodCall, AppMethodCallTransactionArgument, SimulateOptions, RawSimulateOptions, SkipSignaturesSimulateOptions } from '@algorandfoundation/algokit-utils/types/composer' +import { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { Address, encodeAddress, modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk' + +export const APP_SPEC: Arc56Contract = {"name":"EscrowFactory","structs":{},"methods":[{"name":"new","args":[{"type":"pay","name":"payment"}],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"register","args":[{"type":"pay","name":"payment"},{"type":"uint64","name":"app"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"delete","args":[{"type":"uint64","name":"id"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}},{"name":"cost","args":[],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"events":[],"recommendations":{}},{"name":"registerCost","args":[],"returns":{"type":"uint64"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"events":[],"recommendations":{}},{"name":"exists","args":[{"type":"address","name":"address"}],"returns":{"type":"bool"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"events":[],"recommendations":{}},{"name":"get","args":[{"type":"address","name":"address"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"events":[],"recommendations":{}},{"name":"mustGet","args":[{"type":"address","name":"address"}],"returns":{"type":"byte[]"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"events":[],"recommendations":{}},{"name":"getList","args":[{"type":"address[]","name":"addresses"}],"returns":{"type":"byte[][]"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"events":[],"recommendations":{}},{"name":"mustGetList","args":[{"type":"address[]","name":"addresses"}],"returns":{"type":"byte[][]"},"actions":{"create":[],"call":["NoOp"]},"readonly":true,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{"walletIDsByAccounts":{"keyType":"AVMBytes","valueType":"AVMBytes","prefix":""}}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[947,1117],"errorMessage":"Account not found"},{"pc":[928,952,1024,1122],"errorMessage":"Box must have value"},{"pc":[280],"errorMessage":"Length must be 16"},{"pc":[29],"errorMessage":"OnCompletion must be NoOp"},{"pc":[135],"errorMessage":"OnCompletion must be NoOp && can only call when creating"},{"pc":[674],"errorMessage":"already registered"},{"pc":[529,624,636,665,741],"errorMessage":"application exists"},{"pc":[750],"errorMessage":"does not exist"},{"pc":[771,847],"errorMessage":"forbidden"},{"pc":[1005,1109],"errorMessage":"index access is out of bounds"},{"pc":[632],"errorMessage":"invalid app to register"},{"pc":[660],"errorMessage":"invalid creator"},{"pc":[985,1086],"errorMessage":"invalid number of bytes for (len+uint8[32][])"},{"pc":[612,733],"errorMessage":"invalid number of bytes for uint64"},{"pc":[870,898,939],"errorMessage":"invalid number of bytes for uint8[32]"},{"pc":[322,702],"errorMessage":"invalid payment"},{"pc":[292,603],"errorMessage":"transaction type is pay"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDIgMzIgMTUwMDAwCiAgICBieXRlY2Jsb2NrIDB4MTUxZjdjNzUgIiIgMHgwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxNAogICAgLy8gZXhwb3J0IGNsYXNzIEVzY3Jvd0ZhY3RvcnkgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVAMTcKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0CiAgICBwdXNoYnl0ZXNzIDB4ZDg1Y2YxODQgMHg2MDdlNzA0NiAweDhhMzllNzlmIDB4OWI2N2ZhNmQgMHgzYzc1NDEyMCAweDRjOWZiNjU2IDB4M2MxYTZmMzMgMHgyYjU2MDJhMyAweDEzZGM1MDhhIDB4NDc1ZDM3NzMgLy8gbWV0aG9kICJuZXcocGF5KXVpbnQ2NCIsIG1ldGhvZCAicmVnaXN0ZXIocGF5LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJkZWxldGUodWludDY0KXZvaWQiLCBtZXRob2QgImNvc3QoKXVpbnQ2NCIsIG1ldGhvZCAicmVnaXN0ZXJDb3N0KCl1aW50NjQiLCBtZXRob2QgImV4aXN0cyhhZGRyZXNzKWJvb2wiLCBtZXRob2QgImdldChhZGRyZXNzKWJ5dGVbXSIsIG1ldGhvZCAibXVzdEdldChhZGRyZXNzKWJ5dGVbXSIsIG1ldGhvZCAiZ2V0TGlzdChhZGRyZXNzW10pYnl0ZVtdW10iLCBtZXRob2QgIm11c3RHZXRMaXN0KGFkZHJlc3NbXSlieXRlW11bXSIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG5ldyByZWdpc3RlciBkZWxldGUgY29zdCBtYWluX3JlZ2lzdGVyQ29zdF9yb3V0ZUA4IGV4aXN0cyBnZXQgbXVzdEdldCBnZXRMaXN0IG11c3RHZXRMaXN0CiAgICBlcnIKCm1haW5fcmVnaXN0ZXJDb3N0X3JvdXRlQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxNDcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgcHVzaGJ5dGVzIDB4MTUxZjdjNzUwMDAwMDAwMDAwMDAyZjQ0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDE3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTQKICAgIC8vIGV4cG9ydCBjbGFzcyBFc2Nyb3dGYWN0b3J5IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4gLy8gb24gZXJyb3I6IE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AgJiYgY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCgoKLy8gX3B1eWFfbGliLmFyYzQuZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZChhcnJheTogYnl0ZXMsIG5ld19pdGVtc19ieXRlczogYnl0ZXMsIG5ld19pdGVtc19jb3VudDogdWludDY0KSAtPiBieXRlczoKZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZDoKICAgIHByb3RvIDMgMQogICAgZnJhbWVfZGlnIC0zCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cAogICAgZnJhbWVfZGlnIC0xCiAgICArCiAgICBzd2FwCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGRpZyAxCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY292ZXIgMgogICAgZnJhbWVfZGlnIC0zCiAgICBpbnRjXzIgLy8gMgogICAgZGlnIDIKICAgIHN1YnN0cmluZzMKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18yIC8vIDIKICAgICoKICAgIGJ6ZXJvCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMwogICAgbGVuCiAgICBmcmFtZV9kaWcgLTMKICAgIHVuY292ZXIgMwogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBzd2FwCiAgICBpbnRjXzIgLy8gMgogICAgKgogICAgZHVwCiAgICBpbnRjXzEgLy8gMAoKZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZF9mb3JfaGVhZGVyQDI6CiAgICBmcmFtZV9kaWcgNAogICAgZnJhbWVfZGlnIDIKICAgIDwKICAgIGJ6IGR5bmFtaWNfYXJyYXlfY29uY2F0X2J5dGVfbGVuZ3RoX2hlYWRfYWZ0ZXJfZm9yQDUKICAgIGZyYW1lX2RpZyAzCiAgICBkdXAKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgMQogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgY292ZXIgNAogICAgdW5jb3ZlciAyCiAgICByZXBsYWNlMwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDEKICAgIGRpZyAxCiAgICBleHRyYWN0X3VpbnQxNgogICAgaW50Y18yIC8vIDIKICAgICsKICAgICsKICAgIGZyYW1lX2J1cnkgMwogICAgaW50Y18yIC8vIDIKICAgICsKICAgIGZyYW1lX2J1cnkgNAogICAgYiBkeW5hbWljX2FycmF5X2NvbmNhdF9ieXRlX2xlbmd0aF9oZWFkX2Zvcl9oZWFkZXJAMgoKZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZF9hZnRlcl9mb3JANToKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9kaWcgMQogICAgY29uY2F0CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjpieXRlczE2KGFjYzogYnl0ZXMpIC0+IGJ5dGVzOgpieXRlczE2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTAKICAgIC8vIGZ1bmN0aW9uIGJ5dGVzMTYoYWNjOiBBY2NvdW50KTogYnl0ZXM8MTY+IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTEKICAgIC8vIHJldHVybiBhY2MuYnl0ZXMuc2xpY2UoMCwgMTYpLnRvRml4ZWQoeyBsZW5ndGg6IDE2IH0pCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18xIC8vIDAKICAgIGRpZyAxCiAgICA+PQogICAgaW50Y18xIC8vIDAKICAgIGRpZyAyCiAgICB1bmNvdmVyIDIKICAgIHNlbGVjdAogICAgcHVzaGludCAxNiAvLyAxNgogICAgZGlnIDIKICAgID49CiAgICBwdXNoaW50IDE2IC8vIDE2CiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgMgogICAgc2VsZWN0CiAgICBmcmFtZV9kaWcgLTEKICAgIGNvdmVyIDIKICAgIHN1YnN0cmluZzMKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDE2IC8vIDE2CiAgICA9PQogICAgYXNzZXJ0IC8vIExlbmd0aCBtdXN0IGJlIDE2CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo6RXNjcm93RmFjdG9yeS5uZXdbcm91dGluZ10oKSAtPiB2b2lkOgpuZXc6CiAgICBieXRlY18xIC8vICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czozMAogICAgLy8gbmV3KHBheW1lbnQ6IGd0eG4uUGF5bWVudFR4bik6IHVpbnQ2NCB7CiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMCAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjMxCiAgICAvLyBjb25zdCBub25BcHBDYWxsZXIgPSBHbG9iYWwuY2FsbGVyQXBwbGljYXRpb25JZCA9PT0gMAogICAgZ2xvYmFsIENhbGxlckFwcGxpY2F0aW9uSUQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjI0CiAgICAvLyBjb25zdCBub25BcHBDYWxsZXIgPSBHbG9iYWwuY2FsbGVyQXBwbGljYXRpb25JZCA9PT0gMAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoyNS0yNwogICAgLy8gcmV0dXJuIG5vbkFwcENhbGxlcgogICAgLy8gICA/IEJ5dGVzKGJ5dGVzMTYoVHhuLnNlbmRlcikpCiAgICAvLyAgIDogQnl0ZXMoaXRvYihHbG9iYWwuY2FsbGVyQXBwbGljYXRpb25JZCkpCiAgICBibnogbmV3X3Rlcm5hcnlfZmFsc2VAOQogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MjYKICAgIC8vID8gQnl0ZXMoYnl0ZXMxNihUeG4uc2VuZGVyKSkKICAgIHR4biBTZW5kZXIKICAgIGNhbGxzdWIgYnl0ZXMxNgoKbmV3X3Rlcm5hcnlfbWVyZ2VAMTA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo0MS00OAogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIHBheW1lbnQsCiAgICAvLyAgIHsKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiBjaGlsZEFwcE1CUiArIEdsb2JhbC5taW5CYWxhbmNlLAogICAgLy8gICB9LAogICAgLy8gICBFUlJfSU5WQUxJRF9QQVlNRU5UCiAgICAvLyApCiAgICBkaWcgMgogICAgZHVwCiAgICBndHhucyBSZWNlaXZlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6NDQKICAgIC8vIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo0MS00OAogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIHBheW1lbnQsCiAgICAvLyAgIHsKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiBjaGlsZEFwcE1CUiArIEdsb2JhbC5taW5CYWxhbmNlLAogICAgLy8gICB9LAogICAgLy8gICBFUlJfSU5WQUxJRF9QQVlNRU5UCiAgICAvLyApCiAgICA9PQogICAgc3dhcAogICAgZ3R4bnMgQW1vdW50CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo0NQogICAgLy8gYW1vdW50OiBjaGlsZEFwcE1CUiArIEdsb2JhbC5taW5CYWxhbmNlLAogICAgaW50YyA0IC8vIDE1MDAwMAogICAgZ2xvYmFsIE1pbkJhbGFuY2UKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjQxLTQ4CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgcGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IGNoaWxkQXBwTUJSICsgR2xvYmFsLm1pbkJhbGFuY2UsCiAgICAvLyAgIH0sCiAgICAvLyAgIEVSUl9JTlZBTElEX1BBWU1FTlQKICAgIC8vICkKICAgID09CiAgICAmJgogICAgYXNzZXJ0IC8vIGludmFsaWQgcGF5bWVudAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6NTAtNTQKICAgIC8vIGNvbnN0IG5ld0VzY3JvdyA9IGVzY3Jvdy5jYWxsLmNyZWF0ZSgKICAgIC8vICAgewogICAgLy8gICAgIGFyZ3M6IFtjcmVhdG9yXSwKICAgIC8vICAgfQogICAgLy8gKS5pdHhuLmNyZWF0ZWRBcHAKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjUyCiAgICAvLyBhcmdzOiBbY3JlYXRvcl0sCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6NTAtNTQKICAgIC8vIGNvbnN0IG5ld0VzY3JvdyA9IGVzY3Jvdy5jYWxsLmNyZWF0ZSgKICAgIC8vICAgewogICAgLy8gICAgIGFyZ3M6IFtjcmVhdG9yXSwKICAgIC8vICAgfQogICAgLy8gKS5pdHhuLmNyZWF0ZWRBcHAKICAgIHB1c2hieXRlcyAweDhlNzkzNThkIC8vIG1ldGhvZCAiY3JlYXRlKGJ5dGVbXSl2b2lkIgogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czozNAogICAgLy8gY29uc3QgZXNjcm93ID0gY29tcGlsZUFyYzQoRXNjcm93KTsKICAgIGludGNfMCAvLyAxCiAgICBpdHhuX2ZpZWxkIEdsb2JhbE51bUJ5dGVTbGljZQogICAgcHVzaGJ5dGVzIGJhc2U2NChDNEVCUXc9PSkKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW1QYWdlcwogICAgcHVzaGJ5dGVzIGJhc2U2NChDeUFDQVFDQUJDUTNqVHcyR2dDT0FRQWxNUmtVUkRFWVFRQU9nQVJscVh2TU5ob0FqZ0VBT1FDQUJJNTVOWTAyR2dDT0FRQU5BREVaZ1FVU01SZ1FSRUlBUURZYUFVa2pXWUVDQ0VzQkZSSkVWd0lBZ0FkamNtVmhkRzl5VEdjaVF6WWFBVWtWZ1NBU1JERUFNZ2tTUkxFeUNySUhzaUFqc2dnaXNoQWpzZ0d6SWtNeEFESUpFa1N4TWdteUNTS3lFQ095QWJNaVF3PT0pCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbVBhZ2VzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo1MC01NAogICAgLy8gY29uc3QgbmV3RXNjcm93ID0gZXNjcm93LmNhbGwuY3JlYXRlKAogICAgLy8gICB7CiAgICAvLyAgICAgYXJnczogW2NyZWF0b3JdLAogICAgLy8gICB9CiAgICAvLyApLml0eG4uY3JlYXRlZEFwcAogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgZ2l0eG4gMCBDcmVhdGVkQXBwbGljYXRpb25JRAogICAgZHVwCiAgICBidXJ5IDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjU2LTYxCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogbmV3RXNjcm93LmFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiBHbG9iYWwubWluQmFsYW5jZQogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjU4CiAgICAvLyByZWNlaXZlcjogbmV3RXNjcm93LmFkZHJlc3MsCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo1OQogICAgLy8gYW1vdW50OiBHbG9iYWwubWluQmFsYW5jZQogICAgZ2xvYmFsIE1pbkJhbGFuY2UKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo1Ni02MAogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgcmVjZWl2ZXI6IG5ld0VzY3Jvdy5hZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogR2xvYmFsLm1pbkJhbGFuY2UKICAgIC8vICAgfSkKICAgIGludGNfMCAvLyAxCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjU2LTYxCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogbmV3RXNjcm93LmFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiBHbG9iYWwubWluQmFsYW5jZQogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo2My02OAogICAgLy8gZXNjcm93LmNhbGwucmVrZXkoewogICAgLy8gICBhcHBJZDogbmV3RXNjcm93LmlkLAogICAgLy8gICBhcmdzOiBbCiAgICAvLyAgICAgbm9uQXBwQ2FsbGVyID8gVHhuLnNlbmRlciA6IEdsb2JhbC5jYWxsZXJBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vICAgXQogICAgLy8gfSkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjY2CiAgICAvLyBub25BcHBDYWxsZXIgPyBUeG4uc2VuZGVyIDogR2xvYmFsLmNhbGxlckFwcGxpY2F0aW9uQWRkcmVzcwogICAgZHVwCiAgICBibnogbmV3X3Rlcm5hcnlfZmFsc2VANQogICAgdHhuIFNlbmRlcgoKbmV3X3Rlcm5hcnlfbWVyZ2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjYzLTY4CiAgICAvLyBlc2Nyb3cuY2FsbC5yZWtleSh7CiAgICAvLyAgIGFwcElkOiBuZXdFc2Nyb3cuaWQsCiAgICAvLyAgIGFyZ3M6IFsKICAgIC8vICAgICBub25BcHBDYWxsZXIgPyBUeG4uc2VuZGVyIDogR2xvYmFsLmNhbGxlckFwcGxpY2F0aW9uQWRkcmVzcwogICAgLy8gICBdCiAgICAvLyB9KQogICAgcHVzaGJ5dGVzIDB4NjVhOTdiY2MgLy8gbWV0aG9kICJyZWtleShhZGRyZXNzKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgZGlnIDIKICAgIGR1cAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MzAKICAgIC8vIG5ldyhwYXltZW50OiBndHhuLlBheW1lbnRUeG4pOiB1aW50NjQgewogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbmV3X3Rlcm5hcnlfZmFsc2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjY2CiAgICAvLyBub25BcHBDYWxsZXIgPyBUeG4uc2VuZGVyIDogR2xvYmFsLmNhbGxlckFwcGxpY2F0aW9uQWRkcmVzcwogICAgZ2xvYmFsIENhbGxlckFwcGxpY2F0aW9uQWRkcmVzcwogICAgYiBuZXdfdGVybmFyeV9tZXJnZUA2CgpuZXdfdGVybmFyeV9mYWxzZUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MjcKICAgIC8vIDogQnl0ZXMoaXRvYihHbG9iYWwuY2FsbGVyQXBwbGljYXRpb25JZCkpCiAgICBnbG9iYWwgQ2FsbGVyQXBwbGljYXRpb25JRAogICAgaXRvYgogICAgYiBuZXdfdGVybmFyeV9tZXJnZUAxMAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjpFc2Nyb3dGYWN0b3J5LnJlZ2lzdGVyW3JvdXRpbmddKCkgLT4gdm9pZDoKcmVnaXN0ZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo3MwogICAgLy8gcmVnaXN0ZXIocGF5bWVudDogZ3R4bi5QYXltZW50VHhuLCBhcHA6IHVpbnQ2NCk6IHZvaWQgewogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA4IC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo3NQogICAgLy8gYXNzZXJ0KEdsb2JhbC5jYWxsZXJBcHBsaWNhdGlvbklkICE9PSAwKQogICAgZ2xvYmFsIENhbGxlckFwcGxpY2F0aW9uSUQKICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6NzgKICAgIC8vIGFzc2VydChhcHAgPT09IDAgfHwgQXBwbGljYXRpb24oYXBwKS5jcmVhdG9yID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywgRVJSX0lOVkFMSURfQVBQKQogICAgYnogcmVnaXN0ZXJfYm9vbF90cnVlQDMKICAgIGR1cAogICAgYXBwX3BhcmFtc19nZXQgQXBwQ3JlYXRvcgogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGV4aXN0cwogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBieiByZWdpc3Rlcl9ib29sX2ZhbHNlQDQKCnJlZ2lzdGVyX2Jvb2xfdHJ1ZUAzOgogICAgaW50Y18wIC8vIDEKCnJlZ2lzdGVyX2Jvb2xfbWVyZ2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjc4CiAgICAvLyBhc3NlcnQoYXBwID09PSAwIHx8IEFwcGxpY2F0aW9uKGFwcCkuY3JlYXRvciA9PT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsIEVSUl9JTlZBTElEX0FQUCkKICAgIGFzc2VydCAvLyBpbnZhbGlkIGFwcCB0byByZWdpc3RlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6ODEKICAgIC8vIGlmIChBcHBsaWNhdGlvbihhcHApLmNyZWF0b3IgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzKSB7CiAgICBkdXAKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcENyZWF0b3IKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYnogcmVnaXN0ZXJfZWxzZV9ib2R5QDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjgyCiAgICAvLyBjcmVhdG9yID0gb3AuQXBwR2xvYmFsLmdldEV4Qnl0ZXMoYXBwLCBCeXRlcyhFc2Nyb3dHbG9iYWxTdGF0ZUtleXNDcmVhdG9yKSlbMF0KICAgIGR1cAogICAgcHVzaGJ5dGVzICJjcmVhdG9yIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHBvcAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo4MwogICAgLy8gYXNzZXJ0KGJ0b2koY3JlYXRvcikgPT09IEdsb2JhbC5jYWxsZXJBcHBsaWNhdGlvbklkLCBFUlJfSU5WQUxJRF9DUkVBVE9SKQogICAgYnRvaQogICAgZ2xvYmFsIENhbGxlckFwcGxpY2F0aW9uSUQKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBjcmVhdG9yCgpyZWdpc3Rlcl9hZnRlcl9pZl9lbHNlQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo4OQogICAgLy8gY29uc3QgYXBwQWRkcmVzcyA9IGJ5dGVzMTYoQXBwbGljYXRpb24oYXBwKS5hZGRyZXNzKQogICAgZGlnIDEKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIGNhbGxzdWIgYnl0ZXMxNgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6OTAKICAgIC8vIGFzc2VydCghdGhpcy53YWxsZXRJRHNCeUFjY291bnRzKGFwcEFkZHJlc3MpLmV4aXN0cywgRVJSX0FMUkVBRFlfUkVHSVNURVJFRCkKICAgIGR1cAogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gYWxyZWFkeSByZWdpc3RlcmVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo5Mi05OQogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIHBheW1lbnQsCiAgICAvLyAgIHsKICAgIC8vICAgICByZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgICAgYW1vdW50OiB0aGlzLm1icihjcmVhdG9yLmxlbmd0aCksCiAgICAvLyAgIH0sCiAgICAvLyAgIEVSUl9JTlZBTElEX1BBWU1FTlQKICAgIC8vICkKICAgIGRpZyAzCiAgICBkdXAKICAgIGd0eG5zIFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo5NQogICAgLy8gcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjkyLTk5CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgcGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgICBhbW91bnQ6IHRoaXMubWJyKGNyZWF0b3IubGVuZ3RoKSwKICAgIC8vICAgfSwKICAgIC8vICAgRVJSX0lOVkFMSURfUEFZTUVOVAogICAgLy8gKQogICAgPT0KICAgIHN3YXAKICAgIGd0eG5zIEFtb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6OTYKICAgIC8vIGFtb3VudDogdGhpcy5tYnIoY3JlYXRvci5sZW5ndGgpLAogICAgdW5jb3ZlciAzCiAgICBkdXAKICAgIGNvdmVyIDMKICAgIGxlbgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MjAKICAgIC8vIHJldHVybiBNaW5XYWxsZXRJRHNCeUFjY291bnRzTWJyICsgKGxlbmd0aCAqIEJveENvc3RQZXJCeXRlKQogICAgcHVzaGludCA0MDAgLy8gNDAwCiAgICAqCiAgICBwdXNoaW50IDg5MDAgLy8gODkwMAogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6OTItOTkKICAgIC8vIGFzc2VydE1hdGNoKAogICAgLy8gICBwYXltZW50LAogICAgLy8gICB7CiAgICAvLyAgICAgcmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICAgIGFtb3VudDogdGhpcy5tYnIoY3JlYXRvci5sZW5ndGgpLAogICAgLy8gICB9LAogICAgLy8gICBFUlJfSU5WQUxJRF9QQVlNRU5UCiAgICAvLyApCiAgICA9PQogICAgJiYKICAgIGFzc2VydCAvLyBpbnZhbGlkIHBheW1lbnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjEwMQogICAgLy8gdGhpcy53YWxsZXRJRHNCeUFjY291bnRzKGFwcEFkZHJlc3MpLnZhbHVlID0gY3JlYXRvcgogICAgZGlnIDEKICAgIGJveF9kZWwKICAgIHBvcAogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6NzMKICAgIC8vIHJlZ2lzdGVyKHBheW1lbnQ6IGd0eG4uUGF5bWVudFR4biwgYXBwOiB1aW50NjQpOiB2b2lkIHsKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCnJlZ2lzdGVyX2Vsc2VfYm9keUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6ODUKICAgIC8vIGNyZWF0b3IgPSBCeXRlcyhpdG9iKEdsb2JhbC5jYWxsZXJBcHBsaWNhdGlvbklkKSkKICAgIGdsb2JhbCBDYWxsZXJBcHBsaWNhdGlvbklECiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo4NgogICAgLy8gYXBwID0gR2xvYmFsLmNhbGxlckFwcGxpY2F0aW9uSWQKICAgIGdsb2JhbCBDYWxsZXJBcHBsaWNhdGlvbklECiAgICBidXJ5IDIKICAgIGIgcmVnaXN0ZXJfYWZ0ZXJfaWZfZWxzZUA4CgpyZWdpc3Rlcl9ib29sX2ZhbHNlQDQ6CiAgICBpbnRjXzEgLy8gMAogICAgYiByZWdpc3Rlcl9ib29sX21lcmdlQDUKCgovLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo6RXNjcm93RmFjdG9yeS5kZWxldGVbcm91dGluZ10oKSAtPiB2b2lkOgpkZWxldGU6CiAgICBieXRlY18xIC8vICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxMDQKICAgIC8vIGRlbGV0ZShpZDogdWludDY0KTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA4IC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxMDUKICAgIC8vIGNvbnN0IGNhbGxlciA9IEdsb2JhbC5jYWxsZXJBcHBsaWNhdGlvbklkCiAgICBnbG9iYWwgQ2FsbGVyQXBwbGljYXRpb25JRAogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTA2CiAgICAvLyBjb25zdCBrZXkgPSBieXRlczE2KEFwcGxpY2F0aW9uKGlkKS5hZGRyZXNzKQogICAgYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwogICAgYXNzZXJ0IC8vIGFwcGxpY2F0aW9uIGV4aXN0cwogICAgY2FsbHN1YiBieXRlczE2CiAgICBkdXBuIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjEwNwogICAgLy8gYXNzZXJ0KHRoaXMud2FsbGV0SURzQnlBY2NvdW50cyhrZXkpLmV4aXN0cywgRVJSX0RPRVNOVF9FWElTVCkKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIGRvZXMgbm90IGV4aXN0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxMDkKICAgIC8vIGNvbnN0IGNyZWF0b3IgPSB0aGlzLndhbGxldElEc0J5QWNjb3VudHMoa2V5KS52YWx1ZQogICAgYm94X2dldAogICAgcG9wCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjExMAogICAgLy8gaWYgKGNyZWF0b3IubGVuZ3RoID09PSA4KSB7CiAgICBsZW4KICAgIGR1cAogICAgY292ZXIgMgogICAgcHVzaGludCA4IC8vIDgKICAgID09CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGJ6IGRlbGV0ZV9lbHNlX2JvZHlAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTExCiAgICAvLyBhc3NlcnQoY2FsbGVyID09PSBidG9pKGNyZWF0b3IpLCBFUlJfRk9SQklEREVOKTsKICAgIGJ0b2kKICAgIGRpZyA0CiAgICA9PQogICAgYXNzZXJ0IC8vIGZvcmJpZGRlbgoKZGVsZXRlX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gTWluV2FsbGV0SURzQnlBY2NvdW50c01iciArIChsZW5ndGggKiBCb3hDb3N0UGVyQnl0ZSkKICAgIGRpZyAxCiAgICBwdXNoaW50IDQwMCAvLyA0MDAKICAgICoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjExOS0xMjEKICAgIC8vIE1pblBhZ2VzICsKICAgIC8vIEdsb2JhbFN0YXRlS2V5Qnl0ZXNDb3N0ICsKICAgIC8vIHRoaXMubWJyKGNyZWF0b3IubGVuZ3RoKQogICAgcHVzaGludCAxNTg5MDAgLy8gMTU4OTAwCiAgICArCiAgICBidXJ5IDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjEyNAogICAgLy8gc3BlbmRpbmdBY2NvdW50LmNhbGwuZGVsZXRlKHsgYXBwSWQ6IGlkIH0pCiAgICBpdHhuX2JlZ2luCiAgICBwdXNoYnl0ZXMgMHgyNDM3OGQzYyAvLyBtZXRob2QgImRlbGV0ZSgpdm9pZCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBwdXNoaW50IDUgLy8gNQogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIGRpZyA0CiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxMjYKICAgIC8vIHRoaXMud2FsbGV0SURzQnlBY2NvdW50cyhrZXkpLmRlbGV0ZSgpCiAgICBkaWcgMgogICAgYm94X2RlbAogICAgcG9wCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxMjgtMTMzCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogY3JlYXRvci5sZW5ndGggPT09IDggPyBHbG9iYWwuY2FsbGVyQXBwbGljYXRpb25BZGRyZXNzIDogVHhuLnNlbmRlciwKICAgIC8vICAgICBhbW91bnQ6IHJlZnVuZEFtb3VudAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjEzMAogICAgLy8gcmVjZWl2ZXI6IGNyZWF0b3IubGVuZ3RoID09PSA4ID8gR2xvYmFsLmNhbGxlckFwcGxpY2F0aW9uQWRkcmVzcyA6IFR4bi5zZW5kZXIsCiAgICBkdXAKICAgIGJ6IGRlbGV0ZV90ZXJuYXJ5X2ZhbHNlQDcKICAgIGdsb2JhbCBDYWxsZXJBcHBsaWNhdGlvbkFkZHJlc3MKCmRlbGV0ZV90ZXJuYXJ5X21lcmdlQDg6CiAgICBkaWcgNgogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjEyOC0xMzIKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHJlY2VpdmVyOiBjcmVhdG9yLmxlbmd0aCA9PT0gOCA/IEdsb2JhbC5jYWxsZXJBcHBsaWNhdGlvbkFkZHJlc3MgOiBUeG4uc2VuZGVyLAogICAgLy8gICAgIGFtb3VudDogcmVmdW5kQW1vdW50CiAgICAvLyAgIH0pCiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxMjgtMTMzCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICByZWNlaXZlcjogY3JlYXRvci5sZW5ndGggPT09IDggPyBHbG9iYWwuY2FsbGVyQXBwbGljYXRpb25BZGRyZXNzIDogVHhuLnNlbmRlciwKICAgIC8vICAgICBhbW91bnQ6IHJlZnVuZEFtb3VudAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCkKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxMDQKICAgIC8vIGRlbGV0ZShpZDogdWludDY0KTogdm9pZCB7CiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgpkZWxldGVfdGVybmFyeV9mYWxzZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTMwCiAgICAvLyByZWNlaXZlcjogY3JlYXRvci5sZW5ndGggPT09IDggPyBHbG9iYWwuY2FsbGVyQXBwbGljYXRpb25BZGRyZXNzIDogVHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIGIgZGVsZXRlX3Rlcm5hcnlfbWVyZ2VAOAoKZGVsZXRlX2Vsc2VfYm9keUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTEzCiAgICAvLyBhc3NlcnQoQnl0ZXMoYnl0ZXMxNihUeG4uc2VuZGVyKSkgPT09IGNyZWF0b3IsIEVSUl9GT1JCSURERU4pOwogICAgdHhuIFNlbmRlcgogICAgY2FsbHN1YiBieXRlczE2CiAgICA9PQogICAgYXNzZXJ0IC8vIGZvcmJpZGRlbgogICAgYiBkZWxldGVfYWZ0ZXJfaWZfZWxzZUA0CgoKLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6OkVzY3Jvd0ZhY3RvcnkuY29zdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNvc3Q6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxNDAtMTQxCiAgICAvLyBNaW5QYWdlcyArCiAgICAvLyBHbG9iYWxTdGF0ZUtleUJ5dGVzQ29zdCArCiAgICBpbnRjIDQgLy8gMTUwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxNDIKICAgIC8vIEdsb2JhbC5taW5CYWxhbmNlCiAgICBnbG9iYWwgTWluQmFsYW5jZQogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTQwLTE0MgogICAgLy8gTWluUGFnZXMgKwogICAgLy8gR2xvYmFsU3RhdGVLZXlCeXRlc0Nvc3QgKwogICAgLy8gR2xvYmFsLm1pbkJhbGFuY2UKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjEzNwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6OkVzY3Jvd0ZhY3RvcnkuZXhpc3RzW3JvdXRpbmddKCkgLT4gdm9pZDoKZXhpc3RzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTUzCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ4WzMyXQogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTU1CiAgICAvLyByZXR1cm4gdGhpcy53YWxsZXRJRHNCeUFjY291bnRzKGJ5dGVzMTYoYWRkcmVzcy5uYXRpdmUpKS5leGlzdHMKICAgIGNhbGxzdWIgYnl0ZXMxNgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxNTMKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgcHVzaGJ5dGVzIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjpFc2Nyb3dGYWN0b3J5LmdldFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmdldDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjE1OQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXBuIDIKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciB1aW50OFszMl0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjE2MQogICAgLy8gaWYgKCF0aGlzLndhbGxldElEc0J5QWNjb3VudHMoYnl0ZXMxNihhZGRyZXNzLm5hdGl2ZSkpLmV4aXN0cykgewogICAgY2FsbHN1YiBieXRlczE2CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJueiBnZXRfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxNjIKICAgIC8vIHJldHVybiBCeXRlcygnJykKICAgIGJ5dGVjXzEgLy8gIiIKCmdldF9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjpFc2Nyb3dGYWN0b3J5LmdldEA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTU5CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgpnZXRfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTY0CiAgICAvLyByZXR1cm4gdGhpcy53YWxsZXRJRHNCeUFjY291bnRzKGJ5dGVzMTYoYWRkcmVzcy5uYXRpdmUpKS52YWx1ZQogICAgZHVwCiAgICBjYWxsc3ViIGJ5dGVzMTYKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxNTkKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgYiBnZXRfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo6RXNjcm93RmFjdG9yeS5nZXRANAoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjpFc2Nyb3dGYWN0b3J5Lm11c3RHZXRbcm91dGluZ10oKSAtPiB2b2lkOgptdXN0R2V0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTY4CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ4WzMyXQogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTcwCiAgICAvLyBhc3NlcnQodGhpcy53YWxsZXRJRHNCeUFjY291bnRzKGJ5dGVzMTYoYWRkcmVzcy5uYXRpdmUpKS5leGlzdHMsICdBY2NvdW50IG5vdCBmb3VuZCcpCiAgICBkdXAKICAgIGNhbGxzdWIgYnl0ZXMxNgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBhc3NlcnQgLy8gQWNjb3VudCBub3QgZm91bmQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjE3MQogICAgLy8gcmV0dXJuIHRoaXMud2FsbGV0SURzQnlBY2NvdW50cyhieXRlczE2KGFkZHJlc3MubmF0aXZlKSkudmFsdWUKICAgIGNhbGxzdWIgYnl0ZXMxNgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjE2OAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjpFc2Nyb3dGYWN0b3J5LmdldExpc3Rbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRMaXN0OgogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjE3NQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXBuIDIKICAgIGludGNfMSAvLyAwCiAgICBleHRyYWN0X3VpbnQxNgogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzMgLy8gMzIKICAgICoKICAgIGludGNfMiAvLyAyCiAgICArCiAgICBzd2FwCiAgICBsZW4KICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIChsZW4rdWludDhbMzJdW10pCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxNzcKICAgIC8vIGNvbnN0IGFwcHMgPSBuZXcgRHluYW1pY0FycmF5PER5bmFtaWNCeXRlcz4oKQogICAgYnl0ZWNfMiAvLyAweDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjE3OAogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGFkZHJlc3Nlcy5sZW5ndGg7IGkrKykgewogICAgaW50Y18xIC8vIDAKCmdldExpc3Rfd2hpbGVfdG9wQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxNzgKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhZGRyZXNzZXMubGVuZ3RoOyBpKyspIHsKICAgIGR1cAogICAgZGlnIDMKICAgIDwKICAgIGJ6IGdldExpc3RfYWZ0ZXJfd2hpbGVANwogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTc5CiAgICAvLyBjb25zdCBhZGRyZXNzID0gYWRkcmVzc2VzW2ldCiAgICBkaWcgMwogICAgZXh0cmFjdCAyIDAKICAgIGRpZyAxCiAgICBpbnRjXzMgLy8gMzIKICAgICoKICAgIGludGNfMyAvLyAzMgogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICBkdXAKICAgIGJ1cnkgNgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTgwCiAgICAvLyBpZiAodGhpcy53YWxsZXRJRHNCeUFjY291bnRzKGJ5dGVzMTYoYWRkcmVzcy5uYXRpdmUpKS5leGlzdHMpIHsKICAgIGNhbGxzdWIgYnl0ZXMxNgogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBieiBnZXRMaXN0X2Vsc2VfYm9keUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxODEKICAgIC8vIGFwcHMucHVzaChuZXcgRHluYW1pY0J5dGVzKHRoaXMud2FsbGV0SURzQnlBY2NvdW50cyhieXRlczE2KGFkZHJlc3MubmF0aXZlKSkudmFsdWUpKQogICAgZGlnIDQKICAgIGNhbGxzdWIgYnl0ZXMxNgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBkaWcgMgogICAgc3dhcAogICAgaW50Y18wIC8vIDEKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZAogICAgYnVyeSAyCgpnZXRMaXN0X2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjE3OAogICAgLy8gZm9yIChsZXQgaTogdWludDY0ID0gMDsgaSA8IGFkZHJlc3Nlcy5sZW5ndGg7IGkrKykgewogICAgZHVwCiAgICBpbnRjXzAgLy8gMQogICAgKwogICAgYnVyeSAxCiAgICBiIGdldExpc3Rfd2hpbGVfdG9wQDIKCmdldExpc3RfZWxzZV9ib2R5QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxODMKICAgIC8vIGFwcHMucHVzaChuZXcgRHluYW1pY0J5dGVzKCcnKSkKICAgIGRpZyAxCiAgICBieXRlY18yIC8vIDB4MDAwMAogICAgaW50Y18wIC8vIDEKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZAogICAgYnVyeSAyCiAgICBiIGdldExpc3RfYWZ0ZXJfaWZfZWxzZUA2CgpnZXRMaXN0X2FmdGVyX3doaWxlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxNzUKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBkaWcgMgogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czo6RXNjcm93RmFjdG9yeS5tdXN0R2V0TGlzdFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm11c3RHZXRMaXN0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTkwCiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cG4gMgogICAgaW50Y18xIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGludGNfMyAvLyAzMgogICAgKgogICAgaW50Y18yIC8vIDIKICAgICsKICAgIHN3YXAKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgKGxlbit1aW50OFszMl1bXSkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjE5MgogICAgLy8gY29uc3QgYXBwcyA9IG5ldyBEeW5hbWljQXJyYXk8RHluYW1pY0J5dGVzPigpCiAgICBieXRlY18yIC8vIDB4MDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTkzCiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgYWRkcmVzc2VzLmxlbmd0aDsgaSsrKSB7CiAgICBpbnRjXzEgLy8gMAoKbXVzdEdldExpc3Rfd2hpbGVfdG9wQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxOTMKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhZGRyZXNzZXMubGVuZ3RoOyBpKyspIHsKICAgIGR1cAogICAgZGlnIDMKICAgIDwKICAgIGJ6IG11c3RHZXRMaXN0X2FmdGVyX3doaWxlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9lc2Nyb3cvZmFjdG9yeS5hbGdvLnRzOjE5NAogICAgLy8gY29uc3QgYWRkcmVzcyA9IGFkZHJlc3Nlc1tpXQogICAgZGlnIDMKICAgIGV4dHJhY3QgMiAwCiAgICBkaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpbnRjXzMgLy8gMzIKICAgICoKICAgIGludGNfMyAvLyAzMgogICAgZXh0cmFjdDMgLy8gb24gZXJyb3I6IGluZGV4IGFjY2VzcyBpcyBvdXQgb2YgYm91bmRzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxOTUKICAgIC8vIGFzc2VydCh0aGlzLndhbGxldElEc0J5QWNjb3VudHMoYnl0ZXMxNihhZGRyZXNzLm5hdGl2ZSkpLmV4aXN0cywgJ0FjY291bnQgbm90IGZvdW5kJykKICAgIGR1cAogICAgY2FsbHN1YiBieXRlczE2CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBBY2NvdW50IG5vdCBmb3VuZAogICAgLy8gc21hcnRfY29udHJhY3RzL2VzY3Jvdy9mYWN0b3J5LmFsZ28udHM6MTk2CiAgICAvLyBhcHBzLnB1c2gobmV3IER5bmFtaWNCeXRlcyh0aGlzLndhbGxldElEc0J5QWNjb3VudHMoYnl0ZXMxNihhZGRyZXNzLm5hdGl2ZSkpLnZhbHVlKSkKICAgIGNhbGxzdWIgYnl0ZXMxNgogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBkaWcgMwogICAgc3dhcAogICAgaW50Y18wIC8vIDEKICAgIGNhbGxzdWIgZHluYW1pY19hcnJheV9jb25jYXRfYnl0ZV9sZW5ndGhfaGVhZAogICAgYnVyeSAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxOTMKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhZGRyZXNzZXMubGVuZ3RoOyBpKyspIHsKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgbXVzdEdldExpc3Rfd2hpbGVfdG9wQDIKCm11c3RHZXRMaXN0X2FmdGVyX3doaWxlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvZXNjcm93L2ZhY3RvcnkuYWxnby50czoxOTAKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBkaWcgMgogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4K","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CyAFAQACIPCTCSYDBBUffHUAAgAAMRtBAGYxGRREMRhEggoE2FzxhARgfnBGBIo5558Em2f6bQQ8dUEgBEyftlYEPBpvMwQrVgKjBBPcUIoER103czYaAI4KAKwB5AJmAuUAAQLxAwwDNgNZA78AgAwVH3x1AAAAAAAAL0SwIkMxGRQxGBQQQ4oDAYv9I1lJi/8ITCQLJAhLARZXBgJOAov9JEsCUov/JAuvUIv9FYv9TwNPAlJQi/5QTCQLSSOLBIsCDEEAI4sDSRZXBgKLAYsESU4ETwJdSYwBSwFZJAgIjAMkCIwEQv/ViwCLAVCMAImKAQGL/xUjSwEPI0sCTwJNgRBLAg+BEE8DTwJNi/9OAlJJFYEQEkSJKTEWIglJOBAiEkQyDUlAASExAIj/wksCSTgHMgoSTDgIIQQyAQgSEESxSRUWVwYCTFCABI55NY2yGrIaIrI1gAQLgQFDskKAlwELIAIBAIAEJDeNPDYaAI4BACUxGRREMRhBAA6ABGWpe8w2GgCOAQA5AIAEjnk1jTYaAI4BAA0AMRmBBRIxGBBEQgBANhoBSSNZgQIISwEVEkRXAgCAB2NyZWF0b3JMZyJDNhoBSRWBIBJEMQAyCRJEsTIKsgeyICOyCCKyECOyAbMiQzEAMgkSRLEyCbIJIrIQI7IBsyJDskAjshmBBrIQI7IBs7cAPUlFBLFyCEQyAbIIsgcishAjsgGzsUlAACMxAIAEZal7zLIashojshlLAkmyGIEGshAjsgGzFihMULAiQzIOQv/aMg0WQv7eMRYiCUk4ECISRDYaAUkVgQgSRBdJMg1EQQAKSXIHRDIKEkEAWSJESXIHRDIKEkEAQ0mAB2NyZWF0b3JlSEkXMg0SREsBcghEiP5VSb1FARRESwNJOAcyChJMOAhPA0lOAxWBkAMLgcRFCBIQREsBvEi/IkMyDRYyDUUCQv/FI0L/pCk2GgFJFYEIEkQXSTINTHIIRIj+CUcCvUUBRL5ISRVJTgKBCBJJTgJBAEoXSwQSREsBgZADC4G02QkIRQaxgAQkN408shqBBbIZSwSyGIEGshAjsgGzSwK8SLFJQQARMg5LBrIIsgcishAjsgGzIkMxAEL/7DEAiP2kEkRC/7EhBDIBCBYoTFCwIkM2GgFJFSUSRIj9iL1FAYABACNPAlQoTFCwIkM2GgFHAhUlEkSI/Wy9RQFAAA8pSRUWVwYCTFAoTFCwIkNJiP1TvkRC/+k2GgFJFSUSREmI/UK9RQFEiP07vkRJFRZXBgJMUChMULAiQyM2GgFHAiNZSU4CJQskCEwVEkQqI0lLAwxBAENLA1cCAEsBJQslWElFBoj8/r1FAUEAIEsEiPzzvkRJFRZXBgJMUEsCTCKI/HhFAkkiCEUBQv/CSwEqIoj8Z0UCQv/sKEsCULAiQzYaAUcCI1lJTgIlCyQITBUSRCojSUsDDEEAM0sDVwIASwFJTgIlCyVYSYj8mL1FAUSI/JG+REkVFlcGAkxQSwNMIoj8FkUDIghFAUL/xihLAlCwIkM=","clear":"C4EBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * The argument types for the EscrowFactory contract + */ +export type EscrowFactoryArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'new(pay)uint64': { + payment: AppMethodCallTransactionArgument + } + 'register(pay,uint64)void': { + payment: AppMethodCallTransactionArgument + app: bigint | number + } + 'delete(uint64)void': { + id: bigint | number + } + 'cost()uint64': Record + 'registerCost()uint64': Record + 'exists(address)bool': { + address: string + } + 'get(address)byte[]': { + address: string + } + 'mustGet(address)byte[]': { + address: string + } + 'getList(address[])byte[][]': { + addresses: string[] + } + 'mustGetList(address[])byte[][]': { + addresses: string[] + } + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'new(pay)uint64': [payment: AppMethodCallTransactionArgument] + 'register(pay,uint64)void': [payment: AppMethodCallTransactionArgument, app: bigint | number] + 'delete(uint64)void': [id: bigint | number] + 'cost()uint64': [] + 'registerCost()uint64': [] + 'exists(address)bool': [address: string] + 'get(address)byte[]': [address: string] + 'mustGet(address)byte[]': [address: string] + 'getList(address[])byte[][]': [addresses: string[]] + 'mustGetList(address[])byte[][]': [addresses: string[]] + } +} + +/** + * The return type for each method + */ +export type EscrowFactoryReturns = { + 'new(pay)uint64': bigint + 'register(pay,uint64)void': void + 'delete(uint64)void': void + 'cost()uint64': bigint + 'registerCost()uint64': bigint + 'exists(address)bool': boolean + 'get(address)byte[]': Uint8Array + 'mustGet(address)byte[]': Uint8Array + 'getList(address[])byte[][]': Uint8Array[] + 'mustGetList(address[])byte[][]': Uint8Array[] +} + +/** + * Defines the types of available calls and state of the EscrowFactory smart contract. + */ +export type EscrowFactoryTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'new(pay)uint64' | 'new', { + argsObj: EscrowFactoryArgs['obj']['new(pay)uint64'] + argsTuple: EscrowFactoryArgs['tuple']['new(pay)uint64'] + returns: EscrowFactoryReturns['new(pay)uint64'] + }> + & Record<'register(pay,uint64)void' | 'register', { + argsObj: EscrowFactoryArgs['obj']['register(pay,uint64)void'] + argsTuple: EscrowFactoryArgs['tuple']['register(pay,uint64)void'] + returns: EscrowFactoryReturns['register(pay,uint64)void'] + }> + & Record<'delete(uint64)void' | 'delete', { + argsObj: EscrowFactoryArgs['obj']['delete(uint64)void'] + argsTuple: EscrowFactoryArgs['tuple']['delete(uint64)void'] + returns: EscrowFactoryReturns['delete(uint64)void'] + }> + & Record<'cost()uint64' | 'cost', { + argsObj: EscrowFactoryArgs['obj']['cost()uint64'] + argsTuple: EscrowFactoryArgs['tuple']['cost()uint64'] + returns: EscrowFactoryReturns['cost()uint64'] + }> + & Record<'registerCost()uint64' | 'registerCost', { + argsObj: EscrowFactoryArgs['obj']['registerCost()uint64'] + argsTuple: EscrowFactoryArgs['tuple']['registerCost()uint64'] + returns: EscrowFactoryReturns['registerCost()uint64'] + }> + & Record<'exists(address)bool' | 'exists', { + argsObj: EscrowFactoryArgs['obj']['exists(address)bool'] + argsTuple: EscrowFactoryArgs['tuple']['exists(address)bool'] + returns: EscrowFactoryReturns['exists(address)bool'] + }> + & Record<'get(address)byte[]' | 'get', { + argsObj: EscrowFactoryArgs['obj']['get(address)byte[]'] + argsTuple: EscrowFactoryArgs['tuple']['get(address)byte[]'] + returns: EscrowFactoryReturns['get(address)byte[]'] + }> + & Record<'mustGet(address)byte[]' | 'mustGet', { + argsObj: EscrowFactoryArgs['obj']['mustGet(address)byte[]'] + argsTuple: EscrowFactoryArgs['tuple']['mustGet(address)byte[]'] + returns: EscrowFactoryReturns['mustGet(address)byte[]'] + }> + & Record<'getList(address[])byte[][]' | 'getList', { + argsObj: EscrowFactoryArgs['obj']['getList(address[])byte[][]'] + argsTuple: EscrowFactoryArgs['tuple']['getList(address[])byte[][]'] + returns: EscrowFactoryReturns['getList(address[])byte[][]'] + }> + & Record<'mustGetList(address[])byte[][]' | 'mustGetList', { + argsObj: EscrowFactoryArgs['obj']['mustGetList(address[])byte[][]'] + argsTuple: EscrowFactoryArgs['tuple']['mustGetList(address[])byte[][]'] + returns: EscrowFactoryReturns['mustGetList(address[])byte[][]'] + }> + /** + * Defines the shape of the state of the application. + */ + state: { + box: { + keys: {} + maps: { + walletIDsByAccounts: Map + } + } + } +} + +/** + * Defines the possible abi call signatures. + */ +export type EscrowFactorySignatures = keyof EscrowFactoryTypes['methods'] +/** + * Defines the possible abi call signatures for methods that return a non-void value. + */ +export type EscrowFactoryNonVoidMethodSignatures = keyof EscrowFactoryTypes['methods'] extends infer T ? T extends keyof EscrowFactoryTypes['methods'] ? MethodReturn extends void ? never : T : never : never +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the EscrowFactory smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = EscrowFactoryTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the EscrowFactory smart contract to the method's return type + */ +export type MethodReturn = EscrowFactoryTypes['methods'][TSignature]['returns'] + +/** + * Defines the shape of the keyed box state of the application. + */ +export type BoxKeysState = EscrowFactoryTypes['state']['box']['keys'] + + +/** + * Defines supported create method params for this smart contract + */ +export type EscrowFactoryCreateCallParams = + | Expand +/** + * Defines arguments required for the deploy method. + */ +export type EscrowFactoryDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: EscrowFactoryCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the EscrowFactory smart contract + */ +export abstract class EscrowFactoryParamsFactory { + /** + * Constructs a no op call for the new(pay)uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static new(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'new(pay)uint64' as const, + args: Array.isArray(params.args) ? params.args : [params.args.payment], + } + } + /** + * Constructs a no op call for the register(pay,uint64)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static register(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'register(pay,uint64)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.payment, params.args.app], + } + } + /** + * Constructs a no op call for the delete(uint64)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static delete(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'delete(uint64)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.id], + } + } + /** + * Constructs a no op call for the cost()uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static cost(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'cost()uint64' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the registerCost()uint64 ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static registerCost(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'registerCost()uint64' as const, + args: Array.isArray(params.args) ? params.args : [], + } + } + /** + * Constructs a no op call for the exists(address)bool ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static exists(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'exists(address)bool' as const, + args: Array.isArray(params.args) ? params.args : [params.args.address], + } + } + /** + * Constructs a no op call for the get(address)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static get(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'get(address)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.address], + } + } + /** + * Constructs a no op call for the mustGet(address)byte[] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static mustGet(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'mustGet(address)byte[]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.address], + } + } + /** + * Constructs a no op call for the getList(address[])byte[][] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static getList(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'getList(address[])byte[][]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.addresses], + } + } + /** + * Constructs a no op call for the mustGetList(address[])byte[][] ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static mustGetList(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'mustGetList(address[])byte[][]' as const, + args: Array.isArray(params.args) ? params.args : [params.args.addresses], + } + } +} + +/** + * A factory to create and deploy one or more instance of the EscrowFactory smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class EscrowFactoryFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `EscrowFactoryFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new EscrowFactoryClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new EscrowFactoryClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the EscrowFactory smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: EscrowFactoryDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + }) + return { result: result.result, appClient: new EscrowFactoryClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the EscrowFactory smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the EscrowFactory smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the EscrowFactory smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new EscrowFactoryClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the EscrowFactory smart contract + */ +export class EscrowFactoryClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `EscrowFactoryClient` + * + * @param appClient An `AppClient` instance which has been created with the EscrowFactory app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `EscrowFactoryClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Checks for decode errors on the given return value and maps the return value to the return type for the given method + * @returns The typed return value or undefined if there was no value + */ + decodeReturnValue(method: TSignature, returnValue: ABIReturn | undefined) { + return returnValue !== undefined ? getArc56ReturnValue>(returnValue, this.appClient.getABIMethod(method), APP_SPEC.structs) : undefined + } + + /** + * Returns a new `EscrowFactoryClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new EscrowFactoryClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `EscrowFactoryClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new EscrowFactoryClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Makes a clear_state call to an existing instance of the EscrowFactory smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the EscrowFactory smart contract using the `new(pay)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + new: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(EscrowFactoryParamsFactory.new(params)) + }, + + /** + * Makes a call to the EscrowFactory smart contract using the `register(pay,uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + register: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(EscrowFactoryParamsFactory.register(params)) + }, + + /** + * Makes a call to the EscrowFactory smart contract using the `delete(uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + delete: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(EscrowFactoryParamsFactory.delete(params)) + }, + + /** + * Makes a call to the EscrowFactory smart contract using the `cost()uint64` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + cost: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { + return this.appClient.params.call(EscrowFactoryParamsFactory.cost(params)) + }, + + /** + * Makes a call to the EscrowFactory smart contract using the `registerCost()uint64` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + registerCost: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { + return this.appClient.params.call(EscrowFactoryParamsFactory.registerCost(params)) + }, + + /** + * Makes a call to the EscrowFactory smart contract using the `exists(address)bool` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + exists: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(EscrowFactoryParamsFactory.exists(params)) + }, + + /** + * Makes a call to the EscrowFactory smart contract using the `get(address)byte[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + get: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(EscrowFactoryParamsFactory.get(params)) + }, + + /** + * Makes a call to the EscrowFactory smart contract using the `mustGet(address)byte[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + mustGet: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(EscrowFactoryParamsFactory.mustGet(params)) + }, + + /** + * Makes a call to the EscrowFactory smart contract using the `getList(address[])byte[][]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + getList: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(EscrowFactoryParamsFactory.getList(params)) + }, + + /** + * Makes a call to the EscrowFactory smart contract using the `mustGetList(address[])byte[][]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call params + */ + mustGetList: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(EscrowFactoryParamsFactory.mustGetList(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Makes a clear_state call to an existing instance of the EscrowFactory smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the EscrowFactory smart contract using the `new(pay)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + new: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(EscrowFactoryParamsFactory.new(params)) + }, + + /** + * Makes a call to the EscrowFactory smart contract using the `register(pay,uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + register: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(EscrowFactoryParamsFactory.register(params)) + }, + + /** + * Makes a call to the EscrowFactory smart contract using the `delete(uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + delete: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(EscrowFactoryParamsFactory.delete(params)) + }, + + /** + * Makes a call to the EscrowFactory smart contract using the `cost()uint64` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + cost: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { + return this.appClient.createTransaction.call(EscrowFactoryParamsFactory.cost(params)) + }, + + /** + * Makes a call to the EscrowFactory smart contract using the `registerCost()uint64` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + registerCost: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { + return this.appClient.createTransaction.call(EscrowFactoryParamsFactory.registerCost(params)) + }, + + /** + * Makes a call to the EscrowFactory smart contract using the `exists(address)bool` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + exists: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(EscrowFactoryParamsFactory.exists(params)) + }, + + /** + * Makes a call to the EscrowFactory smart contract using the `get(address)byte[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + get: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(EscrowFactoryParamsFactory.get(params)) + }, + + /** + * Makes a call to the EscrowFactory smart contract using the `mustGet(address)byte[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + mustGet: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(EscrowFactoryParamsFactory.mustGet(params)) + }, + + /** + * Makes a call to the EscrowFactory smart contract using the `getList(address[])byte[][]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + getList: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(EscrowFactoryParamsFactory.getList(params)) + }, + + /** + * Makes a call to the EscrowFactory smart contract using the `mustGetList(address[])byte[][]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + mustGetList: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(EscrowFactoryParamsFactory.mustGetList(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Makes a clear_state call to an existing instance of the EscrowFactory smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the EscrowFactory smart contract using the `new(pay)uint64` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + new: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(EscrowFactoryParamsFactory.new(params)) + return {...result, return: result.return as unknown as (undefined | EscrowFactoryReturns['new(pay)uint64'])} + }, + + /** + * Makes a call to the EscrowFactory smart contract using the `register(pay,uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + register: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(EscrowFactoryParamsFactory.register(params)) + return {...result, return: result.return as unknown as (undefined | EscrowFactoryReturns['register(pay,uint64)void'])} + }, + + /** + * Makes a call to the EscrowFactory smart contract using the `delete(uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + delete: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(EscrowFactoryParamsFactory.delete(params)) + return {...result, return: result.return as unknown as (undefined | EscrowFactoryReturns['delete(uint64)void'])} + }, + + /** + * Makes a call to the EscrowFactory smart contract using the `cost()uint64` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + cost: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { + const result = await this.appClient.send.call(EscrowFactoryParamsFactory.cost(params)) + return {...result, return: result.return as unknown as (undefined | EscrowFactoryReturns['cost()uint64'])} + }, + + /** + * Makes a call to the EscrowFactory smart contract using the `registerCost()uint64` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + registerCost: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => { + const result = await this.appClient.send.call(EscrowFactoryParamsFactory.registerCost(params)) + return {...result, return: result.return as unknown as (undefined | EscrowFactoryReturns['registerCost()uint64'])} + }, + + /** + * Makes a call to the EscrowFactory smart contract using the `exists(address)bool` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + exists: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(EscrowFactoryParamsFactory.exists(params)) + return {...result, return: result.return as unknown as (undefined | EscrowFactoryReturns['exists(address)bool'])} + }, + + /** + * Makes a call to the EscrowFactory smart contract using the `get(address)byte[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + get: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(EscrowFactoryParamsFactory.get(params)) + return {...result, return: result.return as unknown as (undefined | EscrowFactoryReturns['get(address)byte[]'])} + }, + + /** + * Makes a call to the EscrowFactory smart contract using the `mustGet(address)byte[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + mustGet: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(EscrowFactoryParamsFactory.mustGet(params)) + return {...result, return: result.return as unknown as (undefined | EscrowFactoryReturns['mustGet(address)byte[]'])} + }, + + /** + * Makes a call to the EscrowFactory smart contract using the `getList(address[])byte[][]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + getList: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(EscrowFactoryParamsFactory.getList(params)) + return {...result, return: result.return as unknown as (undefined | EscrowFactoryReturns['getList(address[])byte[][]'])} + }, + + /** + * Makes a call to the EscrowFactory smart contract using the `mustGetList(address[])byte[][]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + mustGetList: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(EscrowFactoryParamsFactory.mustGetList(params)) + return {...result, return: result.return as unknown as (undefined | EscrowFactoryReturns['mustGetList(address[])byte[][]'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new EscrowFactoryClient(this.appClient.clone(params)) + } + + /** + * Makes a readonly (simulated) call to the EscrowFactory smart contract using the `cost()uint64` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async cost(params: CallParams = {args: []}) { + const result = await this.appClient.send.call(EscrowFactoryParamsFactory.cost(params)) + return result.return as unknown as EscrowFactoryReturns['cost()uint64'] + } + + /** + * Makes a readonly (simulated) call to the EscrowFactory smart contract using the `registerCost()uint64` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async registerCost(params: CallParams = {args: []}) { + const result = await this.appClient.send.call(EscrowFactoryParamsFactory.registerCost(params)) + return result.return as unknown as EscrowFactoryReturns['registerCost()uint64'] + } + + /** + * Makes a readonly (simulated) call to the EscrowFactory smart contract using the `exists(address)bool` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async exists(params: CallParams) { + const result = await this.appClient.send.call(EscrowFactoryParamsFactory.exists(params)) + return result.return as unknown as EscrowFactoryReturns['exists(address)bool'] + } + + /** + * Makes a readonly (simulated) call to the EscrowFactory smart contract using the `get(address)byte[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async get(params: CallParams) { + const result = await this.appClient.send.call(EscrowFactoryParamsFactory.get(params)) + return result.return as unknown as EscrowFactoryReturns['get(address)byte[]'] + } + + /** + * Makes a readonly (simulated) call to the EscrowFactory smart contract using the `mustGet(address)byte[]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async mustGet(params: CallParams) { + const result = await this.appClient.send.call(EscrowFactoryParamsFactory.mustGet(params)) + return result.return as unknown as EscrowFactoryReturns['mustGet(address)byte[]'] + } + + /** + * Makes a readonly (simulated) call to the EscrowFactory smart contract using the `getList(address[])byte[][]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async getList(params: CallParams) { + const result = await this.appClient.send.call(EscrowFactoryParamsFactory.getList(params)) + return result.return as unknown as EscrowFactoryReturns['getList(address[])byte[][]'] + } + + /** + * Makes a readonly (simulated) call to the EscrowFactory smart contract using the `mustGetList(address[])byte[][]` ABI method. + * + * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction. + * + * @param params The params for the smart contract call + * @returns The call result + */ + async mustGetList(params: CallParams) { + const result = await this.appClient.send.call(EscrowFactoryParamsFactory.mustGetList(params)) + return result.return as unknown as EscrowFactoryReturns['mustGetList(address[])byte[][]'] + } + + /** + * Methods to access state for the current EscrowFactory app + */ + state = { + /** + * Methods to access box state for the current EscrowFactory app + */ + box: { + /** + * Get all current keyed values from box state + */ + getAll: async (): Promise>> => { + const result = await this.appClient.state.box.getAll() + return { + } + }, + /** + * Get values from the walletIDsByAccounts map in box state + */ + walletIDsByAccounts: { + /** + * Get all current values of the walletIDsByAccounts map in box state + */ + getMap: async (): Promise> => { return (await this.appClient.state.box.getMap("walletIDsByAccounts")) as Map }, + /** + * Get a current value of the walletIDsByAccounts map by key from box state + */ + value: async (key: Uint8Array | string): Promise => { return await this.appClient.state.box.getMapValue("walletIDsByAccounts", key) as Uint8Array | undefined }, + }, + }, + } + + public newGroup(): EscrowFactoryComposer { + const client = this + const composer = this.algorand.newGroup() + let promiseChain:Promise = Promise.resolve() + const resultMappers: Array any)> = [] + return { + /** + * Add a new(pay)uint64 method call against the EscrowFactory contract + */ + new(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.new(params))) + resultMappers.push((v) => client.decodeReturnValue('new(pay)uint64', v)) + return this + }, + /** + * Add a register(pay,uint64)void method call against the EscrowFactory contract + */ + register(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.register(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a delete(uint64)void method call against the EscrowFactory contract + */ + delete(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.delete(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a cost()uint64 method call against the EscrowFactory contract + */ + cost(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.cost(params))) + resultMappers.push((v) => client.decodeReturnValue('cost()uint64', v)) + return this + }, + /** + * Add a registerCost()uint64 method call against the EscrowFactory contract + */ + registerCost(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.registerCost(params))) + resultMappers.push((v) => client.decodeReturnValue('registerCost()uint64', v)) + return this + }, + /** + * Add a exists(address)bool method call against the EscrowFactory contract + */ + exists(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.exists(params))) + resultMappers.push((v) => client.decodeReturnValue('exists(address)bool', v)) + return this + }, + /** + * Add a get(address)byte[] method call against the EscrowFactory contract + */ + get(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.get(params))) + resultMappers.push((v) => client.decodeReturnValue('get(address)byte[]', v)) + return this + }, + /** + * Add a mustGet(address)byte[] method call against the EscrowFactory contract + */ + mustGet(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.mustGet(params))) + resultMappers.push((v) => client.decodeReturnValue('mustGet(address)byte[]', v)) + return this + }, + /** + * Add a getList(address[])byte[][] method call against the EscrowFactory contract + */ + getList(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.getList(params))) + resultMappers.push((v) => client.decodeReturnValue('getList(address[])byte[][]', v)) + return this + }, + /** + * Add a mustGetList(address[])byte[][] method call against the EscrowFactory contract + */ + mustGetList(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.mustGetList(params))) + resultMappers.push((v) => client.decodeReturnValue('mustGetList(address[])byte[][]', v)) + return this + }, + /** + * Add a clear state call to the EscrowFactory contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue) + } + } + } as unknown as EscrowFactoryComposer + } +} +export type EscrowFactoryComposer = { + /** + * Calls the new(pay)uint64 ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + new(params?: CallParams): EscrowFactoryComposer<[...TReturns, EscrowFactoryReturns['new(pay)uint64'] | undefined]> + + /** + * Calls the register(pay,uint64)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + register(params?: CallParams): EscrowFactoryComposer<[...TReturns, EscrowFactoryReturns['register(pay,uint64)void'] | undefined]> + + /** + * Calls the delete(uint64)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + delete(params?: CallParams): EscrowFactoryComposer<[...TReturns, EscrowFactoryReturns['delete(uint64)void'] | undefined]> + + /** + * Calls the cost()uint64 ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + cost(params?: CallParams): EscrowFactoryComposer<[...TReturns, EscrowFactoryReturns['cost()uint64'] | undefined]> + + /** + * Calls the registerCost()uint64 ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + registerCost(params?: CallParams): EscrowFactoryComposer<[...TReturns, EscrowFactoryReturns['registerCost()uint64'] | undefined]> + + /** + * Calls the exists(address)bool ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + exists(params?: CallParams): EscrowFactoryComposer<[...TReturns, EscrowFactoryReturns['exists(address)bool'] | undefined]> + + /** + * Calls the get(address)byte[] ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + get(params?: CallParams): EscrowFactoryComposer<[...TReturns, EscrowFactoryReturns['get(address)byte[]'] | undefined]> + + /** + * Calls the mustGet(address)byte[] ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + mustGet(params?: CallParams): EscrowFactoryComposer<[...TReturns, EscrowFactoryReturns['mustGet(address)byte[]'] | undefined]> + + /** + * Calls the getList(address[])byte[][] ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + getList(params?: CallParams): EscrowFactoryComposer<[...TReturns, EscrowFactoryReturns['getList(address[])byte[][]'] | undefined]> + + /** + * Calls the mustGetList(address[])byte[][] ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + mustGetList(params?: CallParams): EscrowFactoryComposer<[...TReturns, EscrowFactoryReturns['mustGetList(address[])byte[][]'] | undefined]> + + /** + * Makes a clear_state call to an existing instance of the EscrowFactory smart contract. + * + * @param args The arguments for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): EscrowFactoryComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): EscrowFactoryComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: modelsv2.SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: modelsv2.SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: modelsv2.SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type EscrowFactoryComposerResults = Expand + diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/optin/OptInPlugin.approval.puya.map b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/optin/OptInPlugin.approval.puya.map new file mode 100644 index 000000000..fd5fdef49 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/optin/OptInPlugin.approval.puya.map @@ -0,0 +1,1929 @@ +{ + "version": 3, + "sources": [ + "../../../plugins/optin/contract.algo.ts", + "../../../utils/plugins.ts" + ], + "mappings": ";;;;;;AAKA;;AAAA;;;AAAA;;;;;;AAAA;;;AAAA;;;;AAAA;AAEE;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAFF;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAEE;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AC0B+B;;AAEvB;;;;;;;;;;;;;;;;;;AAFuB;AAAA;AAAA;AAAA;;ADvB7B;;AAAA;;AAAA;AAAA;AAAA;;AAIY;;AAAA;;AAAA;AAJZ;AAAA;AAAA;AASqB;AAAG;AAAA;;AAAA;AAAxB;;;AACiC;;AAAA;;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAvB;;AAAA;AAAA;;AAAA;;AAAD;AAAP;AAEA;ACmBA;;AAAA;;;AACK;;;;;;;;ADhBY;;;;;;;;;;AAJjB;;;;AAAA;;;AAAA;AAHyC;AAAA;AAAA;AAAA;;;;;AC0BtC;;AAAA;;AAAA;ADjBU;;;AArBjB;AAAA", + "op_pc_offset": 0, + "pc_events": { + "1": { + "subroutine": "@algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram", + "params": {}, + "block": "main", + "stack_in": [], + "op": "intcblock 1 0 8" + }, + "6": { + "op": "txn NumAppArgs", + "defined_out": [ + "tmp%0#1" + ], + "stack_out": [ + "tmp%0#1" + ] + }, + "8": { + "op": "bz main___algots__.defaultCreate@5", + "stack_out": [] + }, + "11": { + "op": "pushbytes 0x27ece5e6 // method \"optInToAsset(uint64,bool,uint64[],pay)void\"", + "defined_out": [ + "Method(optInToAsset(uint64,bool,uint64[],pay)void)" + ], + "stack_out": [ + "Method(optInToAsset(uint64,bool,uint64[],pay)void)" + ] + }, + "17": { + "op": "txna ApplicationArgs 0", + "defined_out": [ + "Method(optInToAsset(uint64,bool,uint64[],pay)void)", + "tmp%2#0" + ], + "stack_out": [ + "Method(optInToAsset(uint64,bool,uint64[],pay)void)", + "tmp%2#0" + ] + }, + "20": { + "op": "match main_optInToAsset_route@3", + "stack_out": [] + }, + "24": { + "op": "err" + }, + "25": { + "block": "main_optInToAsset_route@3", + "stack_in": [], + "op": "txn OnCompletion", + "defined_out": [ + "tmp%3#0" + ], + "stack_out": [ + "tmp%3#0" + ] + }, + "27": { + "op": "!", + "defined_out": [ + "tmp%4#0" + ], + "stack_out": [ + "tmp%4#0" + ] + }, + "28": { + "op": "txn ApplicationID", + "defined_out": [ + "tmp%4#0", + "tmp%5#0" + ], + "stack_out": [ + "tmp%4#0", + "tmp%5#0" + ] + }, + "30": { + "op": "&&", + "defined_out": [ + "tmp%7#0" + ], + "stack_out": [ + "tmp%7#0" + ] + }, + "31": { + "error": "OnCompletion must be NoOp && can only call when not creating", + "op": "assert // OnCompletion must be NoOp && can only call when not creating", + "stack_out": [] + }, + "32": { + "op": "b optInToAsset" + }, + "35": { + "block": "main___algots__.defaultCreate@5", + "stack_in": [], + "op": "txn OnCompletion", + "defined_out": [ + "tmp%8#0" + ], + "stack_out": [ + "tmp%8#0" + ] + }, + "37": { + "op": "!", + "defined_out": [ + "tmp%9#0" + ], + "stack_out": [ + "tmp%9#0" + ] + }, + "38": { + "op": "txn ApplicationID", + "defined_out": [ + "tmp%10#0", + "tmp%9#0" + ], + "stack_out": [ + "tmp%9#0", + "tmp%10#0" + ] + }, + "40": { + "op": "!", + "defined_out": [ + "tmp%11#0", + "tmp%9#0" + ], + "stack_out": [ + "tmp%9#0", + "tmp%11#0" + ] + }, + "41": { + "op": "&&", + "defined_out": [ + "tmp%12#0" + ], + "stack_out": [ + "tmp%12#0" + ] + }, + "42": { + "error": "OnCompletion must be NoOp && can only call when creating", + "op": "return // on error: OnCompletion must be NoOp && can only call when creating", + "defined_out": [], + "stack_out": [] + }, + "43": { + "subroutine": "smart_contracts/plugins/optin/contract.algo.ts::OptInPlugin.optInToAsset[routing]", + "params": {}, + "block": "optInToAsset", + "stack_in": [], + "op": "pushbytes \"\"", + "stack_out": [ + "values%0#0" + ] + }, + "45": { + "op": "txna ApplicationArgs 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "values%0#0", + "tmp%0#0" + ] + }, + "48": { + "op": "dup", + "defined_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "values%0#0", + "tmp%0#0", + "tmp%0#0 (copy)" + ] + }, + "49": { + "op": "len", + "defined_out": [ + "len%0#0", + "tmp%0#0" + ], + "stack_out": [ + "values%0#0", + "tmp%0#0", + "len%0#0" + ] + }, + "50": { + "op": "intc_2 // 8", + "defined_out": [ + "8", + "len%0#0", + "tmp%0#0" + ], + "stack_out": [ + "values%0#0", + "tmp%0#0", + "len%0#0", + "8" + ] + }, + "51": { + "op": "==", + "defined_out": [ + "eq%0#0", + "tmp%0#0" + ], + "stack_out": [ + "values%0#0", + "tmp%0#0", + "eq%0#0" + ] + }, + "52": { + "error": "invalid number of bytes for uint64", + "op": "assert // invalid number of bytes for uint64", + "stack_out": [ + "values%0#0", + "tmp%0#0" + ] + }, + "53": { + "op": "btoi", + "defined_out": [ + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0" + ] + }, + "54": { + "op": "dup", + "defined_out": [ + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "wallet#0" + ] + }, + "55": { + "op": "txna ApplicationArgs 2", + "defined_out": [ + "tmp%2#0", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "wallet#0", + "tmp%2#0" + ] + }, + "58": { + "op": "dup", + "defined_out": [ + "tmp%2#0", + "tmp%2#0 (copy)", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "wallet#0", + "tmp%2#0", + "tmp%2#0 (copy)" + ] + }, + "59": { + "op": "len", + "defined_out": [ + "len%1#0", + "tmp%2#0", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "wallet#0", + "tmp%2#0", + "len%1#0" + ] + }, + "60": { + "op": "intc_0 // 1", + "defined_out": [ + "1", + "len%1#0", + "tmp%2#0", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "wallet#0", + "tmp%2#0", + "len%1#0", + "1" + ] + }, + "61": { + "op": "==", + "defined_out": [ + "eq%1#0", + "tmp%2#0", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "wallet#0", + "tmp%2#0", + "eq%1#0" + ] + }, + "62": { + "error": "invalid number of bytes for bool8", + "op": "assert // invalid number of bytes for bool8", + "stack_out": [ + "values%0#0", + "wallet#0", + "wallet#0", + "tmp%2#0" + ] + }, + "63": { + "op": "intc_1 // 0", + "stack_out": [ + "values%0#0", + "wallet#0", + "wallet#0", + "tmp%2#0", + "0" + ] + }, + "64": { + "op": "getbit", + "defined_out": [ + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "wallet#0", + "rekeyBack#0" + ] + }, + "65": { + "op": "swap", + "defined_out": [ + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "wallet#0" + ] + }, + "66": { + "op": "txna ApplicationArgs 3" + }, + "69": { + "op": "dup", + "defined_out": [ + "assets#0", + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "wallet#0", + "assets#0", + "assets#0" + ] + }, + "70": { + "op": "cover 2", + "defined_out": [ + "assets#0", + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "wallet#0", + "assets#0" + ] + }, + "72": { + "op": "dup", + "defined_out": [ + "assets#0", + "assets#0 (copy)", + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "wallet#0", + "assets#0", + "assets#0 (copy)" + ] + }, + "73": { + "op": "intc_1 // 0", + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "wallet#0", + "assets#0", + "assets#0 (copy)", + "0" + ] + }, + "74": { + "op": "extract_uint16", + "defined_out": [ + "aggregate%array_length%0#0", + "assets#0", + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "wallet#0", + "assets#0", + "aggregate%array_length%0#0" + ] + }, + "75": { + "op": "dup", + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "wallet#0", + "assets#0", + "aggregate%array_length%0#0", + "aggregate%array_length%0#0" + ] + }, + "76": { + "op": "cover 3", + "defined_out": [ + "aggregate%array_length%0#0", + "assets#0", + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "wallet#0", + "assets#0", + "aggregate%array_length%0#0" + ] + }, + "78": { + "op": "dup", + "defined_out": [ + "aggregate%array_length%0#0", + "aggregate%array_length%0#0 (copy)", + "assets#0", + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "wallet#0", + "assets#0", + "aggregate%array_length%0#0", + "aggregate%array_length%0#0 (copy)" + ] + }, + "79": { + "op": "intc_2 // 8", + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "wallet#0", + "assets#0", + "aggregate%array_length%0#0", + "aggregate%array_length%0#0 (copy)", + "8" + ] + }, + "80": { + "op": "*", + "defined_out": [ + "aggregate%array_length%0#0", + "assets#0", + "mul%0#0", + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "wallet#0", + "assets#0", + "aggregate%array_length%0#0", + "mul%0#0" + ] + }, + "81": { + "op": "pushint 2 // 2", + "defined_out": [ + "2", + "aggregate%array_length%0#0", + "assets#0", + "mul%0#0", + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "wallet#0", + "assets#0", + "aggregate%array_length%0#0", + "mul%0#0", + "2" + ] + }, + "83": { + "op": "+", + "defined_out": [ + "add%0#0", + "aggregate%array_length%0#0", + "assets#0", + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "wallet#0", + "assets#0", + "aggregate%array_length%0#0", + "add%0#0" + ] + }, + "84": { + "op": "uncover 2", + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "wallet#0", + "aggregate%array_length%0#0", + "add%0#0", + "assets#0" + ] + }, + "86": { + "op": "len", + "defined_out": [ + "add%0#0", + "aggregate%array_length%0#0", + "assets#0", + "len%2#0", + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "wallet#0", + "aggregate%array_length%0#0", + "add%0#0", + "len%2#0" + ] + }, + "87": { + "op": "==", + "defined_out": [ + "aggregate%array_length%0#0", + "assets#0", + "eq%2#0", + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "wallet#0", + "aggregate%array_length%0#0", + "eq%2#0" + ] + }, + "88": { + "error": "invalid number of bytes for (len+uint64[])", + "op": "assert // invalid number of bytes for (len+uint64[])", + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "wallet#0", + "aggregate%array_length%0#0" + ] + }, + "89": { + "op": "txn GroupIndex", + "defined_out": [ + "aggregate%array_length%0#0", + "assets#0", + "rekeyBack#0", + "tmp%5#0", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "wallet#0", + "aggregate%array_length%0#0", + "tmp%5#0" + ] + }, + "91": { + "op": "intc_0 // 1", + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "wallet#0", + "aggregate%array_length%0#0", + "tmp%5#0", + "1" + ] + }, + "92": { + "op": "-", + "defined_out": [ + "aggregate%array_length%0#0", + "assets#0", + "mbrPayment#0", + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "wallet#0", + "aggregate%array_length%0#0", + "mbrPayment#0" + ] + }, + "93": { + "op": "dup", + "defined_out": [ + "aggregate%array_length%0#0", + "assets#0", + "mbrPayment#0", + "mbrPayment#0 (copy)", + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "wallet#0", + "aggregate%array_length%0#0", + "mbrPayment#0", + "mbrPayment#0 (copy)" + ] + }, + "94": { + "op": "gtxns TypeEnum", + "defined_out": [ + "aggregate%array_length%0#0", + "assets#0", + "gtxn_type%0#0", + "mbrPayment#0", + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "wallet#0", + "aggregate%array_length%0#0", + "mbrPayment#0", + "gtxn_type%0#0" + ] + }, + "96": { + "op": "intc_0 // pay", + "defined_out": [ + "aggregate%array_length%0#0", + "assets#0", + "gtxn_type%0#0", + "mbrPayment#0", + "pay", + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "wallet#0", + "aggregate%array_length%0#0", + "mbrPayment#0", + "gtxn_type%0#0", + "pay" + ] + }, + "97": { + "op": "==", + "defined_out": [ + "aggregate%array_length%0#0", + "assets#0", + "gtxn_type_matches%0#0", + "mbrPayment#0", + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "wallet#0", + "aggregate%array_length%0#0", + "mbrPayment#0", + "gtxn_type_matches%0#0" + ] + }, + "98": { + "error": "transaction type is pay", + "op": "assert // transaction type is pay", + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "wallet#0", + "aggregate%array_length%0#0", + "mbrPayment#0" + ] + }, + "99": { + "op": "uncover 2", + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "aggregate%array_length%0#0", + "mbrPayment#0", + "wallet#0" + ] + }, + "101": { + "op": "pushbytes \"spending_address\"", + "defined_out": [ + "\"spending_address\"", + "aggregate%array_length%0#0", + "assets#0", + "mbrPayment#0", + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "aggregate%array_length%0#0", + "mbrPayment#0", + "wallet#0", + "\"spending_address\"" + ] + }, + "119": { + "op": "app_global_get_ex", + "defined_out": [ + "aggregate%array_length%0#0", + "assets#0", + "awst_tmp%1#0", + "mbrPayment#0", + "rekeyBack#0", + "spendingAddressBytes#0", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "aggregate%array_length%0#0", + "mbrPayment#0", + "spendingAddressBytes#0", + "awst_tmp%1#0" + ] + }, + "120": { + "op": "pop", + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "aggregate%array_length%0#0", + "mbrPayment#0", + "spendingAddressBytes#0" + ] + }, + "121": { + "op": "dup", + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "aggregate%array_length%0#0", + "mbrPayment#0", + "spendingAddressBytes#0", + "spendingAddressBytes#0" + ] + }, + "122": { + "op": "cover 3", + "defined_out": [ + "aggregate%array_length%0#0", + "assets#0", + "mbrPayment#0", + "rekeyBack#0", + "spendingAddressBytes#0", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "aggregate%array_length%0#0", + "mbrPayment#0", + "spendingAddressBytes#0" + ] + }, + "124": { + "op": "dig 1", + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "aggregate%array_length%0#0", + "mbrPayment#0", + "spendingAddressBytes#0", + "mbrPayment#0 (copy)" + ] + }, + "126": { + "op": "gtxns Receiver", + "defined_out": [ + "aggregate%array_length%0#0", + "assets#0", + "mbrPayment#0", + "rekeyBack#0", + "spendingAddressBytes#0", + "tmp%1#1", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "aggregate%array_length%0#0", + "mbrPayment#0", + "spendingAddressBytes#0", + "tmp%1#1" + ] + }, + "128": { + "op": "==", + "defined_out": [ + "aggregate%array_length%0#0", + "assets#0", + "mbrPayment#0", + "rekeyBack#0", + "spendingAddressBytes#0", + "tmp%2#1", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "aggregate%array_length%0#0", + "mbrPayment#0", + "tmp%2#1" + ] + }, + "129": { + "op": "swap", + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "aggregate%array_length%0#0", + "tmp%2#1", + "mbrPayment#0" + ] + }, + "130": { + "op": "gtxns Amount", + "defined_out": [ + "aggregate%array_length%0#0", + "assets#0", + "rekeyBack#0", + "spendingAddressBytes#0", + "tmp%2#1", + "tmp%3#1", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "aggregate%array_length%0#0", + "tmp%2#1", + "tmp%3#1" + ] + }, + "132": { + "op": "global AssetOptInMinBalance", + "defined_out": [ + "aggregate%array_length%0#0", + "assets#0", + "rekeyBack#0", + "spendingAddressBytes#0", + "tmp%2#1", + "tmp%3#1", + "tmp%4#1", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "aggregate%array_length%0#0", + "tmp%2#1", + "tmp%3#1", + "tmp%4#1" + ] + }, + "134": { + "op": "uncover 3", + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "tmp%2#1", + "tmp%3#1", + "tmp%4#1", + "aggregate%array_length%0#0" + ] + }, + "136": { + "op": "*", + "defined_out": [ + "aggregate%array_length%0#0", + "assets#0", + "rekeyBack#0", + "spendingAddressBytes#0", + "tmp%2#1", + "tmp%3#1", + "tmp%6#0", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "tmp%2#1", + "tmp%3#1", + "tmp%6#0" + ] + }, + "137": { + "op": "==", + "defined_out": [ + "aggregate%array_length%0#0", + "assets#0", + "rekeyBack#0", + "spendingAddressBytes#0", + "tmp%2#1", + "tmp%7#0", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "tmp%2#1", + "tmp%7#0" + ] + }, + "138": { + "op": "&&", + "defined_out": [ + "aggregate%array_length%0#0", + "assets#0", + "rekeyBack#0", + "spendingAddressBytes#0", + "tmp%8#0", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "tmp%8#0" + ] + }, + "139": { + "error": "invalid payment", + "op": "assert // invalid payment", + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0" + ] + }, + "140": { + "op": "intc_1 // 0", + "defined_out": [ + "aggregate%array_length%0#0", + "assets#0", + "i#0", + "rekeyBack#0", + "spendingAddressBytes#0", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0" + ] + }, + "141": { + "block": "optInToAsset_while_top@2", + "stack_in": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0" + ], + "op": "dup", + "defined_out": [ + "i#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0", + "i#0" + ] + }, + "142": { + "op": "dig 3", + "defined_out": [ + "aggregate%array_length%0#0", + "i#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0", + "i#0", + "aggregate%array_length%0#0" + ] + }, + "144": { + "op": "<", + "defined_out": [ + "aggregate%array_length%0#0", + "i#0", + "tmp%10#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0", + "tmp%10#0" + ] + }, + "145": { + "op": "bz optInToAsset_after_while@5", + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0" + ] + }, + "148": { + "op": "dig 3", + "defined_out": [ + "aggregate%array_length%0#0", + "assets#0", + "i#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0", + "assets#0" + ] + }, + "150": { + "op": "extract 2 0", + "defined_out": [ + "aggregate%array_length%0#0", + "aggregate%array_trimmed%0#0", + "assets#0", + "i#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0", + "aggregate%array_trimmed%0#0" + ] + }, + "153": { + "op": "dig 1", + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0", + "aggregate%array_trimmed%0#0", + "i#0" + ] + }, + "155": { + "op": "intc_2 // 8", + "defined_out": [ + "8", + "aggregate%array_length%0#0", + "aggregate%array_trimmed%0#0", + "assets#0", + "i#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0", + "aggregate%array_trimmed%0#0", + "i#0", + "8" + ] + }, + "156": { + "op": "*", + "defined_out": [ + "aggregate%array_length%0#0", + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0", + "assets#0", + "i#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0", + "aggregate%array_trimmed%0#0", + "aggregate%bytes_offset%0#0" + ] + }, + "157": { + "op": "extract_uint64", + "defined_out": [ + "aggregate%array_length%0#0", + "assets#0", + "i#0", + "values%0#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0", + "values%0#0" + ] + }, + "158": { + "op": "dup", + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0", + "values%0#0", + "values%0#0" + ] + }, + "159": { + "op": "bury 8", + "defined_out": [ + "aggregate%array_length%0#0", + "assets#0", + "i#0", + "values%0#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0", + "values%0#0" + ] + }, + "161": { + "op": "dig 2", + "defined_out": [ + "aggregate%array_length%0#0", + "assets#0", + "i#0", + "spendingAddressBytes#0", + "values%0#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0", + "values%0#0", + "spendingAddressBytes#0" + ] + }, + "163": { + "op": "swap", + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0", + "spendingAddressBytes#0", + "values%0#0" + ] + }, + "164": { + "op": "asset_holding_get AssetBalance", + "defined_out": [ + "aggregate%array_length%0#0", + "assets#0", + "i#0", + "spendingAddressBytes#0", + "tmp%11#0", + "tmp%12#0", + "values%0#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0", + "tmp%11#0", + "tmp%12#0" + ] + }, + "166": { + "op": "bury 1", + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0", + "tmp%12#0" + ] + }, + "168": { + "op": "!", + "defined_out": [ + "aggregate%array_length%0#0", + "assets#0", + "i#0", + "spendingAddressBytes#0", + "tmp%13#0", + "values%0#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0", + "tmp%13#0" + ] + }, + "169": { + "error": "already opted in", + "op": "assert // already opted in", + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0" + ] + }, + "170": { + "op": "itxn_begin" + }, + "171": { + "op": "dig 4", + "defined_out": [ + "aggregate%array_length%0#0", + "assets#0", + "i#0", + "rekeyBack#0", + "spendingAddressBytes#0", + "values%0#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0", + "rekeyBack#0" + ] + }, + "173": { + "op": "bnz optInToAsset_after_if_else@8", + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0" + ] + }, + "176": { + "op": "global ZeroAddress", + "defined_out": [ + "aggregate%array_length%0#0", + "assets#0", + "i#0", + "inner_txn_params%0%%param_RekeyTo_idx_0#0", + "rekeyBack#0", + "spendingAddressBytes#0", + "values%0#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0", + "inner_txn_params%0%%param_RekeyTo_idx_0#0" + ] + }, + "178": { + "block": "optInToAsset_after_inlined_smart_contracts/utils/plugins.ts::rekeyAddress@9", + "stack_in": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0", + "inner_txn_params%0%%param_RekeyTo_idx_0#0" + ], + "op": "itxn_field RekeyTo", + "defined_out": [], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0" + ] + }, + "180": { + "op": "dig 6", + "defined_out": [ + "values%0#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0", + "values%0#0" + ] + }, + "182": { + "op": "itxn_field XferAsset", + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0" + ] + }, + "184": { + "op": "intc_1 // 0", + "defined_out": [ + "0", + "values%0#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0", + "0" + ] + }, + "185": { + "op": "itxn_field AssetAmount", + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0" + ] + }, + "187": { + "op": "dig 1", + "defined_out": [ + "spendingAddressBytes#0", + "values%0#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0", + "spendingAddressBytes#0" + ] + }, + "189": { + "op": "dup", + "defined_out": [ + "spendingAddressBytes#0", + "spendingAddressBytes#0 (copy)", + "values%0#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0", + "spendingAddressBytes#0", + "spendingAddressBytes#0 (copy)" + ] + }, + "190": { + "op": "itxn_field AssetReceiver", + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0", + "spendingAddressBytes#0" + ] + }, + "192": { + "op": "itxn_field Sender", + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0" + ] + }, + "194": { + "op": "pushint 4 // 4", + "defined_out": [ + "4", + "spendingAddressBytes#0", + "values%0#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0", + "4" + ] + }, + "196": { + "op": "itxn_field TypeEnum", + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0" + ] + }, + "198": { + "op": "intc_1 // 0", + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0", + "0" + ] + }, + "199": { + "op": "itxn_field Fee", + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0" + ] + }, + "201": { + "op": "itxn_submit" + }, + "202": { + "op": "dup", + "defined_out": [ + "i#0", + "spendingAddressBytes#0", + "values%0#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0", + "i#0" + ] + }, + "203": { + "op": "intc_0 // 1", + "defined_out": [ + "1", + "i#0", + "spendingAddressBytes#0", + "values%0#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0", + "i#0", + "1" + ] + }, + "204": { + "op": "+", + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0", + "i#0" + ] + }, + "205": { + "op": "bury 1", + "defined_out": [ + "i#0", + "spendingAddressBytes#0", + "values%0#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0" + ] + }, + "207": { + "op": "b optInToAsset_while_top@2" + }, + "210": { + "block": "optInToAsset_after_if_else@8", + "stack_in": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0" + ], + "op": "dig 5", + "defined_out": [ + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0", + "wallet#0" + ] + }, + "212": { + "op": "app_params_get AppAddress", + "defined_out": [ + "check%0#0", + "value%0#0", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0", + "value%0#0", + "check%0#0" + ] + }, + "214": { + "error": "application exists", + "op": "assert // application exists", + "defined_out": [ + "inner_txn_params%0%%param_RekeyTo_idx_0#0", + "wallet#0" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0", + "inner_txn_params%0%%param_RekeyTo_idx_0#0" + ] + }, + "215": { + "op": "b optInToAsset_after_inlined_smart_contracts/utils/plugins.ts::rekeyAddress@9" + }, + "218": { + "block": "optInToAsset_after_while@5", + "stack_in": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0" + ], + "op": "intc_0 // 1", + "defined_out": [ + "1" + ], + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0", + "1" + ] + }, + "219": { + "op": "return", + "stack_out": [ + "values%0#0", + "wallet#0", + "rekeyBack#0", + "assets#0", + "aggregate%array_length%0#0", + "spendingAddressBytes#0", + "i#0" + ] + } + } +} \ No newline at end of file diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/optin/OptInPlugin.approval.teal b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/optin/OptInPlugin.approval.teal new file mode 100644 index 000000000..bce8f22da --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/optin/OptInPlugin.approval.teal @@ -0,0 +1,237 @@ +#pragma version 11 +#pragma typetrack false + +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: + intcblock 1 0 8 + // smart_contracts/plugins/optin/contract.algo.ts:6 + // export class OptInPlugin extends Contract { + txn NumAppArgs + bz main___algots__.defaultCreate@5 + pushbytes 0x27ece5e6 // method "optInToAsset(uint64,bool,uint64[],pay)void" + txna ApplicationArgs 0 + match main_optInToAsset_route@3 + err + +main_optInToAsset_route@3: + // smart_contracts/plugins/optin/contract.algo.ts:8 + // optInToAsset(wallet: Application, rekeyBack: boolean, assets: uint64[], mbrPayment: gtxn.PaymentTxn): void { + txn OnCompletion + ! + txn ApplicationID + && + assert // OnCompletion must be NoOp && can only call when not creating + b optInToAsset + +main___algots__.defaultCreate@5: + // smart_contracts/plugins/optin/contract.algo.ts:6 + // export class OptInPlugin extends Contract { + txn OnCompletion + ! + txn ApplicationID + ! + && + return // on error: OnCompletion must be NoOp && can only call when creating + + +// smart_contracts/plugins/optin/contract.algo.ts::OptInPlugin.optInToAsset[routing]() -> void: +optInToAsset: + pushbytes "" + // smart_contracts/plugins/optin/contract.algo.ts:8 + // optInToAsset(wallet: Application, rekeyBack: boolean, assets: uint64[], mbrPayment: gtxn.PaymentTxn): void { + txna ApplicationArgs 1 + dup + len + intc_2 // 8 + == + assert // invalid number of bytes for uint64 + btoi + dup + txna ApplicationArgs 2 + dup + len + intc_0 // 1 + == + assert // invalid number of bytes for bool8 + intc_1 // 0 + getbit + swap + txna ApplicationArgs 3 + dup + cover 2 + dup + intc_1 // 0 + extract_uint16 + dup + cover 3 + dup + intc_2 // 8 + * + pushint 2 // 2 + + + uncover 2 + len + == + assert // invalid number of bytes for (len+uint64[]) + txn GroupIndex + intc_0 // 1 + - + dup + gtxns TypeEnum + intc_0 // pay + == + assert // transaction type is pay + // smart_contracts/utils/plugins.ts:34-37 + // const [spendingAddressBytes] = op.AppGlobal.getExBytes( + // wallet, + // Bytes(AbstractAccountGlobalStateKeysSpendingAddress) + // ) + uncover 2 + // smart_contracts/utils/plugins.ts:36 + // Bytes(AbstractAccountGlobalStateKeysSpendingAddress) + pushbytes "spending_address" + // smart_contracts/utils/plugins.ts:34-37 + // const [spendingAddressBytes] = op.AppGlobal.getExBytes( + // wallet, + // Bytes(AbstractAccountGlobalStateKeysSpendingAddress) + // ) + app_global_get_ex + pop + dup + cover 3 + // smart_contracts/plugins/optin/contract.algo.ts:11-18 + // assertMatch( + // mbrPayment, + // { + // receiver: sender, + // amount: Global.assetOptInMinBalance * assets.length + // }, + // ERR_INVALID_PAYMENT + // ) + dig 1 + gtxns Receiver + == + swap + gtxns Amount + // smart_contracts/plugins/optin/contract.algo.ts:15 + // amount: Global.assetOptInMinBalance * assets.length + global AssetOptInMinBalance + uncover 3 + * + // smart_contracts/plugins/optin/contract.algo.ts:11-18 + // assertMatch( + // mbrPayment, + // { + // receiver: sender, + // amount: Global.assetOptInMinBalance * assets.length + // }, + // ERR_INVALID_PAYMENT + // ) + == + && + assert // invalid payment + // smart_contracts/plugins/optin/contract.algo.ts:20 + // for (let i: uint64 = 0; i < assets.length; i++) { + intc_1 // 0 + +optInToAsset_while_top@2: + // smart_contracts/plugins/optin/contract.algo.ts:20 + // for (let i: uint64 = 0; i < assets.length; i++) { + dup + dig 3 + < + bz optInToAsset_after_while@5 + // smart_contracts/plugins/optin/contract.algo.ts:21 + // assert(!sender.isOptedIn(Asset(assets[i])), ERR_ALREADY_OPTED_IN) + dig 3 + extract 2 0 + dig 1 + intc_2 // 8 + * + extract_uint64 + dup + bury 8 + dig 2 + swap + asset_holding_get AssetBalance + bury 1 + ! + assert // already opted in + // smart_contracts/plugins/optin/contract.algo.ts:23-31 + // itxn + // .assetTransfer({ + // sender, + // assetReceiver: sender, + // assetAmount: 0, + // xferAsset: Asset(assets[i]), + // rekeyTo: rekeyAddress(rekeyBack, wallet) + // }) + // .submit(); + itxn_begin + // smart_contracts/utils/plugins.ts:42 + // if (!rekeyBack) { + dig 4 + bnz optInToAsset_after_if_else@8 + // smart_contracts/utils/plugins.ts:43 + // return Global.zeroAddress + global ZeroAddress + +optInToAsset_after_inlined_smart_contracts/utils/plugins.ts::rekeyAddress@9: + itxn_field RekeyTo + dig 6 + itxn_field XferAsset + // smart_contracts/plugins/optin/contract.algo.ts:27 + // assetAmount: 0, + intc_1 // 0 + itxn_field AssetAmount + dig 1 + dup + itxn_field AssetReceiver + itxn_field Sender + // smart_contracts/plugins/optin/contract.algo.ts:23-30 + // itxn + // .assetTransfer({ + // sender, + // assetReceiver: sender, + // assetAmount: 0, + // xferAsset: Asset(assets[i]), + // rekeyTo: rekeyAddress(rekeyBack, wallet) + // }) + pushint 4 // 4 + itxn_field TypeEnum + intc_1 // 0 + itxn_field Fee + // smart_contracts/plugins/optin/contract.algo.ts:23-31 + // itxn + // .assetTransfer({ + // sender, + // assetReceiver: sender, + // assetAmount: 0, + // xferAsset: Asset(assets[i]), + // rekeyTo: rekeyAddress(rekeyBack, wallet) + // }) + // .submit(); + itxn_submit + // smart_contracts/plugins/optin/contract.algo.ts:20 + // for (let i: uint64 = 0; i < assets.length; i++) { + dup + intc_0 // 1 + + + bury 1 + b optInToAsset_while_top@2 + +optInToAsset_after_if_else@8: + // smart_contracts/utils/plugins.ts:46 + // return wallet.address + dig 5 + app_params_get AppAddress + assert // application exists + // smart_contracts/plugins/optin/contract.algo.ts:29 + // rekeyTo: rekeyAddress(rekeyBack, wallet) + b optInToAsset_after_inlined_smart_contracts/utils/plugins.ts::rekeyAddress@9 + +optInToAsset_after_while@5: + // smart_contracts/plugins/optin/contract.algo.ts:8 + // optInToAsset(wallet: Application, rekeyBack: boolean, assets: uint64[], mbrPayment: gtxn.PaymentTxn): void { + intc_0 // 1 + return diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/optin/OptInPlugin.arc32.json b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/optin/OptInPlugin.arc32.json new file mode 100644 index 000000000..b5ee4859a --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/optin/OptInPlugin.arc32.json @@ -0,0 +1,67 @@ +{ + "hints": { + "optInToAsset(uint64,bool,uint64[],pay)void": { + "call_config": { + "no_op": "CALL" + } + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL29wdGluL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIE9wdEluUGx1Z2luIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDUKICAgIHB1c2hieXRlcyAweDI3ZWNlNWU2IC8vIG1ldGhvZCAib3B0SW5Ub0Fzc2V0KHVpbnQ2NCxib29sLHVpbnQ2NFtdLHBheSl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9vcHRJblRvQXNzZXRfcm91dGVAMwogICAgZXJyCgptYWluX29wdEluVG9Bc3NldF9yb3V0ZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvb3B0aW4vY29udHJhY3QuYWxnby50czo4CiAgICAvLyBvcHRJblRvQXNzZXQod2FsbGV0OiBBcHBsaWNhdGlvbiwgcmVrZXlCYWNrOiBib29sZWFuLCBhc3NldHM6IHVpbnQ2NFtdLCBtYnJQYXltZW50OiBndHhuLlBheW1lbnRUeG4pOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAmJgogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AgJiYgY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYiBvcHRJblRvQXNzZXQKCm1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9vcHRpbi9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBPcHRJblBsdWdpbiBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICAmJgogICAgcmV0dXJuIC8vIG9uIGVycm9yOiBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wICYmIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL29wdGluL2NvbnRyYWN0LmFsZ28udHM6Ok9wdEluUGx1Z2luLm9wdEluVG9Bc3NldFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm9wdEluVG9Bc3NldDoKICAgIHB1c2hieXRlcyAiIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvb3B0aW4vY29udHJhY3QuYWxnby50czo4CiAgICAvLyBvcHRJblRvQXNzZXQod2FsbGV0OiBBcHBsaWNhdGlvbiwgcmVrZXlCYWNrOiBib29sZWFuLCBhc3NldHM6IHVpbnQ2NFtdLCBtYnJQYXltZW50OiBndHhuLlBheW1lbnRUeG4pOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICBkdXAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYm9vbDgKICAgIGludGNfMSAvLyAwCiAgICBnZXRiaXQKICAgIHN3YXAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgY292ZXIgMgogICAgZHVwCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cAogICAgY292ZXIgMwogICAgZHVwCiAgICBpbnRjXzIgLy8gOAogICAgKgogICAgcHVzaGludCAyIC8vIDIKICAgICsKICAgIHVuY292ZXIgMgogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3VpbnQ2NFtdKQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvcGx1Z2lucy50czozNC0zNwogICAgLy8gY29uc3QgW3NwZW5kaW5nQWRkcmVzc0J5dGVzXSA9IG9wLkFwcEdsb2JhbC5nZXRFeEJ5dGVzKAogICAgLy8gICB3YWxsZXQsCiAgICAvLyAgIEJ5dGVzKEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c1NwZW5kaW5nQWRkcmVzcykKICAgIC8vICkKICAgIHVuY292ZXIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL3BsdWdpbnMudHM6MzYKICAgIC8vIEJ5dGVzKEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c1NwZW5kaW5nQWRkcmVzcykKICAgIHB1c2hieXRlcyAic3BlbmRpbmdfYWRkcmVzcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9wbHVnaW5zLnRzOjM0LTM3CiAgICAvLyBjb25zdCBbc3BlbmRpbmdBZGRyZXNzQnl0ZXNdID0gb3AuQXBwR2xvYmFsLmdldEV4Qnl0ZXMoCiAgICAvLyAgIHdhbGxldCwKICAgIC8vICAgQnl0ZXMoQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzU3BlbmRpbmdBZGRyZXNzKQogICAgLy8gKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHBvcAogICAgZHVwCiAgICBjb3ZlciAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9vcHRpbi9jb250cmFjdC5hbGdvLnRzOjExLTE4CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgbWJyUGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiBzZW5kZXIsCiAgICAvLyAgICAgYW1vdW50OiBHbG9iYWwuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKiBhc3NldHMubGVuZ3RoCiAgICAvLyAgIH0sCiAgICAvLyAgIEVSUl9JTlZBTElEX1BBWU1FTlQKICAgIC8vICkKICAgIGRpZyAxCiAgICBndHhucyBSZWNlaXZlcgogICAgPT0KICAgIHN3YXAKICAgIGd0eG5zIEFtb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvb3B0aW4vY29udHJhY3QuYWxnby50czoxNQogICAgLy8gYW1vdW50OiBHbG9iYWwuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKiBhc3NldHMubGVuZ3RoCiAgICBnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKICAgIHVuY292ZXIgMwogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvb3B0aW4vY29udHJhY3QuYWxnby50czoxMS0xOAogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIG1iclBheW1lbnQsCiAgICAvLyAgIHsKICAgIC8vICAgICByZWNlaXZlcjogc2VuZGVyLAogICAgLy8gICAgIGFtb3VudDogR2xvYmFsLmFzc2V0T3B0SW5NaW5CYWxhbmNlICogYXNzZXRzLmxlbmd0aAogICAgLy8gICB9LAogICAgLy8gICBFUlJfSU5WQUxJRF9QQVlNRU5UCiAgICAvLyApCiAgICA9PQogICAgJiYKICAgIGFzc2VydCAvLyBpbnZhbGlkIHBheW1lbnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL29wdGluL2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhc3NldHMubGVuZ3RoOyBpKyspIHsKICAgIGludGNfMSAvLyAwCgpvcHRJblRvQXNzZXRfd2hpbGVfdG9wQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9vcHRpbi9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgYXNzZXRzLmxlbmd0aDsgaSsrKSB7CiAgICBkdXAKICAgIGRpZyAzCiAgICA8CiAgICBieiBvcHRJblRvQXNzZXRfYWZ0ZXJfd2hpbGVANQogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvb3B0aW4vY29udHJhY3QuYWxnby50czoyMQogICAgLy8gYXNzZXJ0KCFzZW5kZXIuaXNPcHRlZEluKEFzc2V0KGFzc2V0c1tpXSkpLCBFUlJfQUxSRUFEWV9PUFRFRF9JTikKICAgIGRpZyAzCiAgICBleHRyYWN0IDIgMAogICAgZGlnIDEKICAgIGludGNfMiAvLyA4CiAgICAqCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZHVwCiAgICBidXJ5IDgKICAgIGRpZyAyCiAgICBzd2FwCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIGFscmVhZHkgb3B0ZWQgaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL29wdGluL2NvbnRyYWN0LmFsZ28udHM6MjMtMzEKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIHNlbmRlciwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBzZW5kZXIsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDAsCiAgICAvLyAgICAgeGZlckFzc2V0OiBBc3NldChhc3NldHNbaV0pLAogICAgLy8gICAgIHJla2V5VG86IHJla2V5QWRkcmVzcyhyZWtleUJhY2ssIHdhbGxldCkKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL3BsdWdpbnMudHM6NDIKICAgIC8vIGlmICghcmVrZXlCYWNrKSB7CiAgICBkaWcgNAogICAgYm56IG9wdEluVG9Bc3NldF9hZnRlcl9pZl9lbHNlQDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9wbHVnaW5zLnRzOjQzCiAgICAvLyByZXR1cm4gR2xvYmFsLnplcm9BZGRyZXNzCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKCm9wdEluVG9Bc3NldF9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy91dGlscy9wbHVnaW5zLnRzOjpyZWtleUFkZHJlc3NAOToKICAgIGl0eG5fZmllbGQgUmVrZXlUbwogICAgZGlnIDYKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9vcHRpbi9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyBhc3NldEFtb3VudDogMCwKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBkaWcgMQogICAgZHVwCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9vcHRpbi9jb250cmFjdC5hbGdvLnRzOjIzLTMwCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBzZW5kZXIsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogc2VuZGVyLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIHhmZXJBc3NldDogQXNzZXQoYXNzZXRzW2ldKSwKICAgIC8vICAgICByZWtleVRvOiByZWtleUFkZHJlc3MocmVrZXlCYWNrLCB3YWxsZXQpCiAgICAvLyAgIH0pCiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9vcHRpbi9jb250cmFjdC5hbGdvLnRzOjIzLTMxCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBzZW5kZXIsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogc2VuZGVyLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIHhmZXJBc3NldDogQXNzZXQoYXNzZXRzW2ldKSwKICAgIC8vICAgICByZWtleVRvOiByZWtleUFkZHJlc3MocmVrZXlCYWNrLCB3YWxsZXQpCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9vcHRpbi9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgYXNzZXRzLmxlbmd0aDsgaSsrKSB7CiAgICBkdXAKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgb3B0SW5Ub0Fzc2V0X3doaWxlX3RvcEAyCgpvcHRJblRvQXNzZXRfYWZ0ZXJfaWZfZWxzZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL3BsdWdpbnMudHM6NDYKICAgIC8vIHJldHVybiB3YWxsZXQuYWRkcmVzcwogICAgZGlnIDUKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL29wdGluL2NvbnRyYWN0LmFsZ28udHM6MjkKICAgIC8vIHJla2V5VG86IHJla2V5QWRkcmVzcyhyZWtleUJhY2ssIHdhbGxldCkKICAgIGIgb3B0SW5Ub0Fzc2V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzL3V0aWxzL3BsdWdpbnMudHM6OnJla2V5QWRkcmVzc0A5CgpvcHRJblRvQXNzZXRfYWZ0ZXJfd2hpbGVANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL29wdGluL2NvbnRyYWN0LmFsZ28udHM6OAogICAgLy8gb3B0SW5Ub0Fzc2V0KHdhbGxldDogQXBwbGljYXRpb24sIHJla2V5QmFjazogYm9vbGVhbiwgYXNzZXRzOiB1aW50NjRbXSwgbWJyUGF5bWVudDogZ3R4bi5QYXltZW50VHhuKTogdm9pZCB7CiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "state": { + "global": { + "num_byte_slices": 0, + "num_uints": 0 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "schema": { + "global": { + "declared": {}, + "reserved": {} + }, + "local": { + "declared": {}, + "reserved": {} + } + }, + "contract": { + "name": "OptInPlugin", + "methods": [ + { + "name": "optInToAsset", + "args": [ + { + "type": "uint64", + "name": "wallet" + }, + { + "type": "bool", + "name": "rekeyBack" + }, + { + "type": "uint64[]", + "name": "assets" + }, + { + "type": "pay", + "name": "mbrPayment" + } + ], + "readonly": false, + "returns": { + "type": "void" + } + } + ], + "networks": {} + }, + "bare_call_config": { + "no_op": "CREATE" + } +} \ No newline at end of file diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/optin/OptInPlugin.arc56.json b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/optin/OptInPlugin.arc56.json new file mode 100644 index 000000000..9595b781b --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/optin/OptInPlugin.arc56.json @@ -0,0 +1,155 @@ +{ + "name": "OptInPlugin", + "structs": {}, + "methods": [ + { + "name": "optInToAsset", + "args": [ + { + "type": "uint64", + "name": "wallet" + }, + { + "type": "bool", + "name": "rekeyBack" + }, + { + "type": "uint64[]", + "name": "assets" + }, + { + "type": "pay", + "name": "mbrPayment" + } + ], + "returns": { + "type": "void" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + } + ], + "arcs": [ + 22, + 28 + ], + "networks": {}, + "state": { + "schema": { + "global": { + "ints": 0, + "bytes": 0 + }, + "local": { + "ints": 0, + "bytes": 0 + } + }, + "keys": { + "global": {}, + "local": {}, + "box": {} + }, + "maps": { + "global": {}, + "local": {}, + "box": {} + } + }, + "bareActions": { + "create": [ + "NoOp" + ], + "call": [] + }, + "sourceInfo": { + "approval": { + "sourceInfo": [ + { + "pc": [ + 42 + ], + "errorMessage": "OnCompletion must be NoOp && can only call when creating" + }, + { + "pc": [ + 31 + ], + "errorMessage": "OnCompletion must be NoOp && can only call when not creating" + }, + { + "pc": [ + 169 + ], + "errorMessage": "already opted in" + }, + { + "pc": [ + 214 + ], + "errorMessage": "application exists" + }, + { + "pc": [ + 88 + ], + "errorMessage": "invalid number of bytes for (len+uint64[])" + }, + { + "pc": [ + 62 + ], + "errorMessage": "invalid number of bytes for bool8" + }, + { + "pc": [ + 52 + ], + "errorMessage": "invalid number of bytes for uint64" + }, + { + "pc": [ + 139 + ], + "errorMessage": "invalid payment" + }, + { + "pc": [ + 98 + ], + "errorMessage": "transaction type is pay" + } + ], + "pcOffsetMethod": "none" + }, + "clear": { + "sourceInfo": [], + "pcOffsetMethod": "none" + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL29wdGluL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIE9wdEluUGx1Z2luIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDUKICAgIHB1c2hieXRlcyAweDI3ZWNlNWU2IC8vIG1ldGhvZCAib3B0SW5Ub0Fzc2V0KHVpbnQ2NCxib29sLHVpbnQ2NFtdLHBheSl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9vcHRJblRvQXNzZXRfcm91dGVAMwogICAgZXJyCgptYWluX29wdEluVG9Bc3NldF9yb3V0ZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvb3B0aW4vY29udHJhY3QuYWxnby50czo4CiAgICAvLyBvcHRJblRvQXNzZXQod2FsbGV0OiBBcHBsaWNhdGlvbiwgcmVrZXlCYWNrOiBib29sZWFuLCBhc3NldHM6IHVpbnQ2NFtdLCBtYnJQYXltZW50OiBndHhuLlBheW1lbnRUeG4pOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAmJgogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AgJiYgY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYiBvcHRJblRvQXNzZXQKCm1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9vcHRpbi9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBPcHRJblBsdWdpbiBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICAmJgogICAgcmV0dXJuIC8vIG9uIGVycm9yOiBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wICYmIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL29wdGluL2NvbnRyYWN0LmFsZ28udHM6Ok9wdEluUGx1Z2luLm9wdEluVG9Bc3NldFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm9wdEluVG9Bc3NldDoKICAgIHB1c2hieXRlcyAiIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvb3B0aW4vY29udHJhY3QuYWxnby50czo4CiAgICAvLyBvcHRJblRvQXNzZXQod2FsbGV0OiBBcHBsaWNhdGlvbiwgcmVrZXlCYWNrOiBib29sZWFuLCBhc3NldHM6IHVpbnQ2NFtdLCBtYnJQYXltZW50OiBndHhuLlBheW1lbnRUeG4pOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICBkdXAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYm9vbDgKICAgIGludGNfMSAvLyAwCiAgICBnZXRiaXQKICAgIHN3YXAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgY292ZXIgMgogICAgZHVwCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cAogICAgY292ZXIgMwogICAgZHVwCiAgICBpbnRjXzIgLy8gOAogICAgKgogICAgcHVzaGludCAyIC8vIDIKICAgICsKICAgIHVuY292ZXIgMgogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3VpbnQ2NFtdKQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvcGx1Z2lucy50czozNC0zNwogICAgLy8gY29uc3QgW3NwZW5kaW5nQWRkcmVzc0J5dGVzXSA9IG9wLkFwcEdsb2JhbC5nZXRFeEJ5dGVzKAogICAgLy8gICB3YWxsZXQsCiAgICAvLyAgIEJ5dGVzKEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c1NwZW5kaW5nQWRkcmVzcykKICAgIC8vICkKICAgIHVuY292ZXIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL3BsdWdpbnMudHM6MzYKICAgIC8vIEJ5dGVzKEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c1NwZW5kaW5nQWRkcmVzcykKICAgIHB1c2hieXRlcyAic3BlbmRpbmdfYWRkcmVzcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9wbHVnaW5zLnRzOjM0LTM3CiAgICAvLyBjb25zdCBbc3BlbmRpbmdBZGRyZXNzQnl0ZXNdID0gb3AuQXBwR2xvYmFsLmdldEV4Qnl0ZXMoCiAgICAvLyAgIHdhbGxldCwKICAgIC8vICAgQnl0ZXMoQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzU3BlbmRpbmdBZGRyZXNzKQogICAgLy8gKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHBvcAogICAgZHVwCiAgICBjb3ZlciAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9vcHRpbi9jb250cmFjdC5hbGdvLnRzOjExLTE4CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgbWJyUGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiBzZW5kZXIsCiAgICAvLyAgICAgYW1vdW50OiBHbG9iYWwuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKiBhc3NldHMubGVuZ3RoCiAgICAvLyAgIH0sCiAgICAvLyAgIEVSUl9JTlZBTElEX1BBWU1FTlQKICAgIC8vICkKICAgIGRpZyAxCiAgICBndHhucyBSZWNlaXZlcgogICAgPT0KICAgIHN3YXAKICAgIGd0eG5zIEFtb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvb3B0aW4vY29udHJhY3QuYWxnby50czoxNQogICAgLy8gYW1vdW50OiBHbG9iYWwuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKiBhc3NldHMubGVuZ3RoCiAgICBnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKICAgIHVuY292ZXIgMwogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvb3B0aW4vY29udHJhY3QuYWxnby50czoxMS0xOAogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIG1iclBheW1lbnQsCiAgICAvLyAgIHsKICAgIC8vICAgICByZWNlaXZlcjogc2VuZGVyLAogICAgLy8gICAgIGFtb3VudDogR2xvYmFsLmFzc2V0T3B0SW5NaW5CYWxhbmNlICogYXNzZXRzLmxlbmd0aAogICAgLy8gICB9LAogICAgLy8gICBFUlJfSU5WQUxJRF9QQVlNRU5UCiAgICAvLyApCiAgICA9PQogICAgJiYKICAgIGFzc2VydCAvLyBpbnZhbGlkIHBheW1lbnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL29wdGluL2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhc3NldHMubGVuZ3RoOyBpKyspIHsKICAgIGludGNfMSAvLyAwCgpvcHRJblRvQXNzZXRfd2hpbGVfdG9wQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9vcHRpbi9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgYXNzZXRzLmxlbmd0aDsgaSsrKSB7CiAgICBkdXAKICAgIGRpZyAzCiAgICA8CiAgICBieiBvcHRJblRvQXNzZXRfYWZ0ZXJfd2hpbGVANQogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvb3B0aW4vY29udHJhY3QuYWxnby50czoyMQogICAgLy8gYXNzZXJ0KCFzZW5kZXIuaXNPcHRlZEluKEFzc2V0KGFzc2V0c1tpXSkpLCBFUlJfQUxSRUFEWV9PUFRFRF9JTikKICAgIGRpZyAzCiAgICBleHRyYWN0IDIgMAogICAgZGlnIDEKICAgIGludGNfMiAvLyA4CiAgICAqCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZHVwCiAgICBidXJ5IDgKICAgIGRpZyAyCiAgICBzd2FwCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIGFscmVhZHkgb3B0ZWQgaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL29wdGluL2NvbnRyYWN0LmFsZ28udHM6MjMtMzEKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIHNlbmRlciwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBzZW5kZXIsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDAsCiAgICAvLyAgICAgeGZlckFzc2V0OiBBc3NldChhc3NldHNbaV0pLAogICAgLy8gICAgIHJla2V5VG86IHJla2V5QWRkcmVzcyhyZWtleUJhY2ssIHdhbGxldCkKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL3BsdWdpbnMudHM6NDIKICAgIC8vIGlmICghcmVrZXlCYWNrKSB7CiAgICBkaWcgNAogICAgYm56IG9wdEluVG9Bc3NldF9hZnRlcl9pZl9lbHNlQDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9wbHVnaW5zLnRzOjQzCiAgICAvLyByZXR1cm4gR2xvYmFsLnplcm9BZGRyZXNzCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKCm9wdEluVG9Bc3NldF9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy91dGlscy9wbHVnaW5zLnRzOjpyZWtleUFkZHJlc3NAOToKICAgIGl0eG5fZmllbGQgUmVrZXlUbwogICAgZGlnIDYKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9vcHRpbi9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyBhc3NldEFtb3VudDogMCwKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBkaWcgMQogICAgZHVwCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9vcHRpbi9jb250cmFjdC5hbGdvLnRzOjIzLTMwCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBzZW5kZXIsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogc2VuZGVyLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIHhmZXJBc3NldDogQXNzZXQoYXNzZXRzW2ldKSwKICAgIC8vICAgICByZWtleVRvOiByZWtleUFkZHJlc3MocmVrZXlCYWNrLCB3YWxsZXQpCiAgICAvLyAgIH0pCiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9vcHRpbi9jb250cmFjdC5hbGdvLnRzOjIzLTMxCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBzZW5kZXIsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogc2VuZGVyLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIHhmZXJBc3NldDogQXNzZXQoYXNzZXRzW2ldKSwKICAgIC8vICAgICByZWtleVRvOiByZWtleUFkZHJlc3MocmVrZXlCYWNrLCB3YWxsZXQpCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9vcHRpbi9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgYXNzZXRzLmxlbmd0aDsgaSsrKSB7CiAgICBkdXAKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgb3B0SW5Ub0Fzc2V0X3doaWxlX3RvcEAyCgpvcHRJblRvQXNzZXRfYWZ0ZXJfaWZfZWxzZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL3BsdWdpbnMudHM6NDYKICAgIC8vIHJldHVybiB3YWxsZXQuYWRkcmVzcwogICAgZGlnIDUKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL29wdGluL2NvbnRyYWN0LmFsZ28udHM6MjkKICAgIC8vIHJla2V5VG86IHJla2V5QWRkcmVzcyhyZWtleUJhY2ssIHdhbGxldCkKICAgIGIgb3B0SW5Ub0Fzc2V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzL3V0aWxzL3BsdWdpbnMudHM6OnJla2V5QWRkcmVzc0A5CgpvcHRJblRvQXNzZXRfYWZ0ZXJfd2hpbGVANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL29wdGluL2NvbnRyYWN0LmFsZ28udHM6OAogICAgLy8gb3B0SW5Ub0Fzc2V0KHdhbGxldDogQXBwbGljYXRpb24sIHJla2V5QmFjazogYm9vbGVhbiwgYXNzZXRzOiB1aW50NjRbXSwgbWJyUGF5bWVudDogZ3R4bi5QYXltZW50VHhuKTogdm9pZCB7CiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCg==", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CyADAQAIMRtBABiABCfs5eY2GgCOAQABADEZFDEYEERCAAgxGRQxGBQQQ4AANhoBSRUkEkQXSTYaAkkVIhJEI1NMNhoDSU4CSSNZSU4DSSQLgQIITwIVEkQxFiIJSTgQIhJETwKAEHNwZW5kaW5nX2FkZHJlc3NlSElOA0sBOAcSTDgIMhBPAwsSEEQjSUsDDEEARksDVwIASwEkC1tJRQhLAkxwAEUBFESxSwRAACIyA7IgSwayESOyEksBSbIUsgCBBLIQI7IBs0kiCEUBQv+7SwVyCERC/9giQw==", + "clear": "C4EBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 5, + "minor": 2, + "patch": 0 + } + }, + "events": [], + "templateVariables": {} +} \ No newline at end of file diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/optin/OptInPlugin.clear.puya.map b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/optin/OptInPlugin.clear.puya.map new file mode 100644 index 000000000..bf29998bd --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/optin/OptInPlugin.clear.puya.map @@ -0,0 +1,25 @@ +{ + "version": 3, + "sources": [], + "mappings": ";;;", + "op_pc_offset": 0, + "pc_events": { + "1": { + "subroutine": "@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram", + "params": {}, + "block": "main", + "stack_in": [], + "op": "pushint 1 // 1", + "defined_out": [ + "1" + ], + "stack_out": [ + "1" + ] + }, + "3": { + "op": "return", + "stack_out": [] + } + } +} \ No newline at end of file diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/optin/OptInPlugin.clear.teal b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/optin/OptInPlugin.clear.teal new file mode 100644 index 000000000..42f81b0f1 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/optin/OptInPlugin.clear.teal @@ -0,0 +1,7 @@ +#pragma version 11 +#pragma typetrack false + +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: + pushint 1 // 1 + return diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/optin/OptInPluginClient.ts b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/optin/OptInPluginClient.ts new file mode 100644 index 000000000..1e7593489 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/optin/OptInPluginClient.ts @@ -0,0 +1,571 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^7 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, AppReturn, SendAppTransactionResult } from '@algorandfoundation/algokit-utils/types/app' +import { Arc56Contract, getArc56ReturnValue, getABIStructFromABITuple } from '@algorandfoundation/algokit-utils/types/app-arc56' +import { + AppClient as _AppClient, + AppClientMethodCallParams, + AppClientParams, + AppClientBareCallParams, + CallOnComplete, + AppClientCompilationParams, + ResolveAppClientByCreatorAndName, + ResolveAppClientByNetwork, + CloneAppClientParams, +} from '@algorandfoundation/algokit-utils/types/app-client' +import { AppFactory as _AppFactory, AppFactoryAppClientParams, AppFactoryResolveAppClientByCreatorAndNameParams, AppFactoryDeployParams, AppFactoryParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, AppCallMethodCall, AppMethodCallTransactionArgument, SimulateOptions, RawSimulateOptions, SkipSignaturesSimulateOptions } from '@algorandfoundation/algokit-utils/types/composer' +import { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { Address, encodeAddress, modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk' + +export const APP_SPEC: Arc56Contract = {"name":"OptInPlugin","structs":{},"methods":[{"name":"optInToAsset","args":[{"type":"uint64","name":"wallet"},{"type":"bool","name":"rekeyBack"},{"type":"uint64[]","name":"assets"},{"type":"pay","name":"mbrPayment"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[42],"errorMessage":"OnCompletion must be NoOp && can only call when creating"},{"pc":[31],"errorMessage":"OnCompletion must be NoOp && can only call when not creating"},{"pc":[169],"errorMessage":"already opted in"},{"pc":[214],"errorMessage":"application exists"},{"pc":[88],"errorMessage":"invalid number of bytes for (len+uint64[])"},{"pc":[62],"errorMessage":"invalid number of bytes for bool8"},{"pc":[52],"errorMessage":"invalid number of bytes for uint64"},{"pc":[139],"errorMessage":"invalid payment"},{"pc":[98],"errorMessage":"transaction type is pay"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL29wdGluL2NvbnRyYWN0LmFsZ28udHM6NgogICAgLy8gZXhwb3J0IGNsYXNzIE9wdEluUGx1Z2luIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDUKICAgIHB1c2hieXRlcyAweDI3ZWNlNWU2IC8vIG1ldGhvZCAib3B0SW5Ub0Fzc2V0KHVpbnQ2NCxib29sLHVpbnQ2NFtdLHBheSl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9vcHRJblRvQXNzZXRfcm91dGVAMwogICAgZXJyCgptYWluX29wdEluVG9Bc3NldF9yb3V0ZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvb3B0aW4vY29udHJhY3QuYWxnby50czo4CiAgICAvLyBvcHRJblRvQXNzZXQod2FsbGV0OiBBcHBsaWNhdGlvbiwgcmVrZXlCYWNrOiBib29sZWFuLCBhc3NldHM6IHVpbnQ2NFtdLCBtYnJQYXltZW50OiBndHhuLlBheW1lbnRUeG4pOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAmJgogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AgJiYgY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYiBvcHRJblRvQXNzZXQKCm1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9vcHRpbi9jb250cmFjdC5hbGdvLnRzOjYKICAgIC8vIGV4cG9ydCBjbGFzcyBPcHRJblBsdWdpbiBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICAmJgogICAgcmV0dXJuIC8vIG9uIGVycm9yOiBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wICYmIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL29wdGluL2NvbnRyYWN0LmFsZ28udHM6Ok9wdEluUGx1Z2luLm9wdEluVG9Bc3NldFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm9wdEluVG9Bc3NldDoKICAgIHB1c2hieXRlcyAiIgogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvb3B0aW4vY29udHJhY3QuYWxnby50czo4CiAgICAvLyBvcHRJblRvQXNzZXQod2FsbGV0OiBBcHBsaWNhdGlvbiwgcmVrZXlCYWNrOiBib29sZWFuLCBhc3NldHM6IHVpbnQ2NFtdLCBtYnJQYXltZW50OiBndHhuLlBheW1lbnRUeG4pOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDY0CiAgICBidG9pCiAgICBkdXAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYm9vbDgKICAgIGludGNfMSAvLyAwCiAgICBnZXRiaXQKICAgIHN3YXAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgY292ZXIgMgogICAgZHVwCiAgICBpbnRjXzEgLy8gMAogICAgZXh0cmFjdF91aW50MTYKICAgIGR1cAogICAgY292ZXIgMwogICAgZHVwCiAgICBpbnRjXzIgLy8gOAogICAgKgogICAgcHVzaGludCAyIC8vIDIKICAgICsKICAgIHVuY292ZXIgMgogICAgbGVuCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciAobGVuK3VpbnQ2NFtdKQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gcGF5CiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgcGF5CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvcGx1Z2lucy50czozNC0zNwogICAgLy8gY29uc3QgW3NwZW5kaW5nQWRkcmVzc0J5dGVzXSA9IG9wLkFwcEdsb2JhbC5nZXRFeEJ5dGVzKAogICAgLy8gICB3YWxsZXQsCiAgICAvLyAgIEJ5dGVzKEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c1NwZW5kaW5nQWRkcmVzcykKICAgIC8vICkKICAgIHVuY292ZXIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL3BsdWdpbnMudHM6MzYKICAgIC8vIEJ5dGVzKEFic3RyYWN0QWNjb3VudEdsb2JhbFN0YXRlS2V5c1NwZW5kaW5nQWRkcmVzcykKICAgIHB1c2hieXRlcyAic3BlbmRpbmdfYWRkcmVzcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9wbHVnaW5zLnRzOjM0LTM3CiAgICAvLyBjb25zdCBbc3BlbmRpbmdBZGRyZXNzQnl0ZXNdID0gb3AuQXBwR2xvYmFsLmdldEV4Qnl0ZXMoCiAgICAvLyAgIHdhbGxldCwKICAgIC8vICAgQnl0ZXMoQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzU3BlbmRpbmdBZGRyZXNzKQogICAgLy8gKQogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHBvcAogICAgZHVwCiAgICBjb3ZlciAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9vcHRpbi9jb250cmFjdC5hbGdvLnRzOjExLTE4CiAgICAvLyBhc3NlcnRNYXRjaCgKICAgIC8vICAgbWJyUGF5bWVudCwKICAgIC8vICAgewogICAgLy8gICAgIHJlY2VpdmVyOiBzZW5kZXIsCiAgICAvLyAgICAgYW1vdW50OiBHbG9iYWwuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKiBhc3NldHMubGVuZ3RoCiAgICAvLyAgIH0sCiAgICAvLyAgIEVSUl9JTlZBTElEX1BBWU1FTlQKICAgIC8vICkKICAgIGRpZyAxCiAgICBndHhucyBSZWNlaXZlcgogICAgPT0KICAgIHN3YXAKICAgIGd0eG5zIEFtb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvb3B0aW4vY29udHJhY3QuYWxnby50czoxNQogICAgLy8gYW1vdW50OiBHbG9iYWwuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKiBhc3NldHMubGVuZ3RoCiAgICBnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKICAgIHVuY292ZXIgMwogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvb3B0aW4vY29udHJhY3QuYWxnby50czoxMS0xOAogICAgLy8gYXNzZXJ0TWF0Y2goCiAgICAvLyAgIG1iclBheW1lbnQsCiAgICAvLyAgIHsKICAgIC8vICAgICByZWNlaXZlcjogc2VuZGVyLAogICAgLy8gICAgIGFtb3VudDogR2xvYmFsLmFzc2V0T3B0SW5NaW5CYWxhbmNlICogYXNzZXRzLmxlbmd0aAogICAgLy8gICB9LAogICAgLy8gICBFUlJfSU5WQUxJRF9QQVlNRU5UCiAgICAvLyApCiAgICA9PQogICAgJiYKICAgIGFzc2VydCAvLyBpbnZhbGlkIHBheW1lbnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL29wdGluL2NvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIGZvciAobGV0IGk6IHVpbnQ2NCA9IDA7IGkgPCBhc3NldHMubGVuZ3RoOyBpKyspIHsKICAgIGludGNfMSAvLyAwCgpvcHRJblRvQXNzZXRfd2hpbGVfdG9wQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9vcHRpbi9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgYXNzZXRzLmxlbmd0aDsgaSsrKSB7CiAgICBkdXAKICAgIGRpZyAzCiAgICA8CiAgICBieiBvcHRJblRvQXNzZXRfYWZ0ZXJfd2hpbGVANQogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvb3B0aW4vY29udHJhY3QuYWxnby50czoyMQogICAgLy8gYXNzZXJ0KCFzZW5kZXIuaXNPcHRlZEluKEFzc2V0KGFzc2V0c1tpXSkpLCBFUlJfQUxSRUFEWV9PUFRFRF9JTikKICAgIGRpZyAzCiAgICBleHRyYWN0IDIgMAogICAgZGlnIDEKICAgIGludGNfMiAvLyA4CiAgICAqCiAgICBleHRyYWN0X3VpbnQ2NAogICAgZHVwCiAgICBidXJ5IDgKICAgIGRpZyAyCiAgICBzd2FwCiAgICBhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIGFscmVhZHkgb3B0ZWQgaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL29wdGluL2NvbnRyYWN0LmFsZ28udHM6MjMtMzEKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIHNlbmRlciwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBzZW5kZXIsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDAsCiAgICAvLyAgICAgeGZlckFzc2V0OiBBc3NldChhc3NldHNbaV0pLAogICAgLy8gICAgIHJla2V5VG86IHJla2V5QWRkcmVzcyhyZWtleUJhY2ssIHdhbGxldCkKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL3BsdWdpbnMudHM6NDIKICAgIC8vIGlmICghcmVrZXlCYWNrKSB7CiAgICBkaWcgNAogICAgYm56IG9wdEluVG9Bc3NldF9hZnRlcl9pZl9lbHNlQDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9wbHVnaW5zLnRzOjQzCiAgICAvLyByZXR1cm4gR2xvYmFsLnplcm9BZGRyZXNzCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKCm9wdEluVG9Bc3NldF9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy91dGlscy9wbHVnaW5zLnRzOjpyZWtleUFkZHJlc3NAOToKICAgIGl0eG5fZmllbGQgUmVrZXlUbwogICAgZGlnIDYKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9vcHRpbi9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyBhc3NldEFtb3VudDogMCwKICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBkaWcgMQogICAgZHVwCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9vcHRpbi9jb250cmFjdC5hbGdvLnRzOjIzLTMwCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBzZW5kZXIsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogc2VuZGVyLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIHhmZXJBc3NldDogQXNzZXQoYXNzZXRzW2ldKSwKICAgIC8vICAgICByZWtleVRvOiByZWtleUFkZHJlc3MocmVrZXlCYWNrLCB3YWxsZXQpCiAgICAvLyAgIH0pCiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9vcHRpbi9jb250cmFjdC5hbGdvLnRzOjIzLTMxCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBzZW5kZXIsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogc2VuZGVyLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIHhmZXJBc3NldDogQXNzZXQoYXNzZXRzW2ldKSwKICAgIC8vICAgICByZWtleVRvOiByZWtleUFkZHJlc3MocmVrZXlCYWNrLCB3YWxsZXQpCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9vcHRpbi9jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyBmb3IgKGxldCBpOiB1aW50NjQgPSAwOyBpIDwgYXNzZXRzLmxlbmd0aDsgaSsrKSB7CiAgICBkdXAKICAgIGludGNfMCAvLyAxCiAgICArCiAgICBidXJ5IDEKICAgIGIgb3B0SW5Ub0Fzc2V0X3doaWxlX3RvcEAyCgpvcHRJblRvQXNzZXRfYWZ0ZXJfaWZfZWxzZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL3BsdWdpbnMudHM6NDYKICAgIC8vIHJldHVybiB3YWxsZXQuYWRkcmVzcwogICAgZGlnIDUKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL29wdGluL2NvbnRyYWN0LmFsZ28udHM6MjkKICAgIC8vIHJla2V5VG86IHJla2V5QWRkcmVzcyhyZWtleUJhY2ssIHdhbGxldCkKICAgIGIgb3B0SW5Ub0Fzc2V0X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzL3V0aWxzL3BsdWdpbnMudHM6OnJla2V5QWRkcmVzc0A5CgpvcHRJblRvQXNzZXRfYWZ0ZXJfd2hpbGVANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL29wdGluL2NvbnRyYWN0LmFsZ28udHM6OAogICAgLy8gb3B0SW5Ub0Fzc2V0KHdhbGxldDogQXBwbGljYXRpb24sIHJla2V5QmFjazogYm9vbGVhbiwgYXNzZXRzOiB1aW50NjRbXSwgbWJyUGF5bWVudDogZ3R4bi5QYXltZW50VHhuKTogdm9pZCB7CiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCg==","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CyADAQAIMRtBABiABCfs5eY2GgCOAQABADEZFDEYEERCAAgxGRQxGBQQQ4AANhoBSRUkEkQXSTYaAkkVIhJEI1NMNhoDSU4CSSNZSU4DSSQLgQIITwIVEkQxFiIJSTgQIhJETwKAEHNwZW5kaW5nX2FkZHJlc3NlSElOA0sBOAcSTDgIMhBPAwsSEEQjSUsDDEEARksDVwIASwEkC1tJRQhLAkxwAEUBFESxSwRAACIyA7IgSwayESOyEksBSbIUsgCBBLIQI7IBs0kiCEUBQv+7SwVyCERC/9giQw==","clear":"C4EBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * The argument types for the OptInPlugin contract + */ +export type OptInPluginArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'optInToAsset(uint64,bool,uint64[],pay)void': { + wallet: bigint | number + rekeyBack: boolean + assets: bigint[] | number[] + mbrPayment: AppMethodCallTransactionArgument + } + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'optInToAsset(uint64,bool,uint64[],pay)void': [wallet: bigint | number, rekeyBack: boolean, assets: bigint[] | number[], mbrPayment: AppMethodCallTransactionArgument] + } +} + +/** + * The return type for each method + */ +export type OptInPluginReturns = { + 'optInToAsset(uint64,bool,uint64[],pay)void': void +} + +/** + * Defines the types of available calls and state of the OptInPlugin smart contract. + */ +export type OptInPluginTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'optInToAsset(uint64,bool,uint64[],pay)void' | 'optInToAsset', { + argsObj: OptInPluginArgs['obj']['optInToAsset(uint64,bool,uint64[],pay)void'] + argsTuple: OptInPluginArgs['tuple']['optInToAsset(uint64,bool,uint64[],pay)void'] + returns: OptInPluginReturns['optInToAsset(uint64,bool,uint64[],pay)void'] + }> +} + +/** + * Defines the possible abi call signatures. + */ +export type OptInPluginSignatures = keyof OptInPluginTypes['methods'] +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the OptInPlugin smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = OptInPluginTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the OptInPlugin smart contract to the method's return type + */ +export type MethodReturn = OptInPluginTypes['methods'][TSignature]['returns'] + + +/** + * Defines supported create method params for this smart contract + */ +export type OptInPluginCreateCallParams = + | Expand +/** + * Defines arguments required for the deploy method. + */ +export type OptInPluginDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: OptInPluginCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the OptInPlugin smart contract + */ +export abstract class OptInPluginParamsFactory { + /** + * Constructs a no op call for the optInToAsset(uint64,bool,uint64[],pay)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static optInToAsset(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'optInToAsset(uint64,bool,uint64[],pay)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.wallet, params.args.rekeyBack, params.args.assets, params.args.mbrPayment], + } + } +} + +/** + * A factory to create and deploy one or more instance of the OptInPlugin smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class OptInPluginFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `OptInPluginFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new OptInPluginClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new OptInPluginClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the OptInPlugin smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: OptInPluginDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + }) + return { result: result.result, appClient: new OptInPluginClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the OptInPlugin smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the OptInPlugin smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the OptInPlugin smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new OptInPluginClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the OptInPlugin smart contract + */ +export class OptInPluginClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `OptInPluginClient` + * + * @param appClient An `AppClient` instance which has been created with the OptInPlugin app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `OptInPluginClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `OptInPluginClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new OptInPluginClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `OptInPluginClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new OptInPluginClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Makes a clear_state call to an existing instance of the OptInPlugin smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the OptInPlugin smart contract using the `optInToAsset(uint64,bool,uint64[],pay)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + optInToAsset: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(OptInPluginParamsFactory.optInToAsset(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Makes a clear_state call to an existing instance of the OptInPlugin smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the OptInPlugin smart contract using the `optInToAsset(uint64,bool,uint64[],pay)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + optInToAsset: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(OptInPluginParamsFactory.optInToAsset(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Makes a clear_state call to an existing instance of the OptInPlugin smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the OptInPlugin smart contract using the `optInToAsset(uint64,bool,uint64[],pay)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + optInToAsset: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(OptInPluginParamsFactory.optInToAsset(params)) + return {...result, return: result.return as unknown as (undefined | OptInPluginReturns['optInToAsset(uint64,bool,uint64[],pay)void'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new OptInPluginClient(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current OptInPlugin app + */ + state = { + } + + public newGroup(): OptInPluginComposer { + const client = this + const composer = this.algorand.newGroup() + let promiseChain:Promise = Promise.resolve() + const resultMappers: Array any)> = [] + return { + /** + * Add a optInToAsset(uint64,bool,uint64[],pay)void method call against the OptInPlugin contract + */ + optInToAsset(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.optInToAsset(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a clear state call to the OptInPlugin contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue) + } + } + } as unknown as OptInPluginComposer + } +} +export type OptInPluginComposer = { + /** + * Calls the optInToAsset(uint64,bool,uint64[],pay)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + optInToAsset(params?: CallParams): OptInPluginComposer<[...TReturns, OptInPluginReturns['optInToAsset(uint64,bool,uint64[],pay)void'] | undefined]> + + /** + * Makes a clear_state call to an existing instance of the OptInPlugin smart contract. + * + * @param args The arguments for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): OptInPluginComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): OptInPluginComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: modelsv2.SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: modelsv2.SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: modelsv2.SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type OptInPluginComposerResults = Expand + diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/pay/PayPlugin.approval.puya.map b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/pay/PayPlugin.approval.puya.map new file mode 100644 index 000000000..8d167d23d --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/pay/PayPlugin.approval.puya.map @@ -0,0 +1,1252 @@ +{ + "version": 3, + "sources": [ + "../../../plugins/pay/contract.algo.ts", + "../../../utils/plugins.ts" + ], + "mappings": ";;;;;;AAIA;;AAAA;;;AAAA;;;;;;AAAA;;;AAAA;;;;AAAA;AAEE;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAFF;;AAAA;AAAA;;AAAA;AAAA;AAAA;ACoCA;;;AACM;;AAAA;;;AACK;;AAAP;AAGK;;AAAA;;AAAA;AAAP;ADvCA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AC2B+B;AAEvB;;;;;;;;;;;;;;;;;;AAFuB;AAAA;AAAA;;ADxB7B;;;AACE;AAKa;;;;;;;;;;;;;;;;AALb;;;AAAA;;;AAAA;AAJJ;AAAA;AAaI;AAMa;;;;;;;;;;;;;;;;;;;;AANb;;;;AAAA;;;AAAA;", + "op_pc_offset": 0, + "pc_events": { + "1": { + "subroutine": "@algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram", + "params": {}, + "block": "main", + "stack_in": [], + "op": "intcblock 8 1 0" + }, + "6": { + "op": "txn NumAppArgs", + "defined_out": [ + "tmp%0#1" + ], + "stack_out": [ + "tmp%0#1" + ] + }, + "8": { + "op": "bz main___algots__.defaultCreate@5", + "stack_out": [] + }, + "11": { + "op": "pushbytes 0x93d588b9 // method \"pay(uint64,bool,address,uint64,uint64)void\"", + "defined_out": [ + "Method(pay(uint64,bool,address,uint64,uint64)void)" + ], + "stack_out": [ + "Method(pay(uint64,bool,address,uint64,uint64)void)" + ] + }, + "17": { + "op": "txna ApplicationArgs 0", + "defined_out": [ + "Method(pay(uint64,bool,address,uint64,uint64)void)", + "tmp%2#0" + ], + "stack_out": [ + "Method(pay(uint64,bool,address,uint64,uint64)void)", + "tmp%2#0" + ] + }, + "20": { + "op": "match main_pay_route@3", + "stack_out": [] + }, + "24": { + "op": "err" + }, + "25": { + "block": "main_pay_route@3", + "stack_in": [], + "op": "txn OnCompletion", + "defined_out": [ + "tmp%3#0" + ], + "stack_out": [ + "tmp%3#0" + ] + }, + "27": { + "op": "!", + "defined_out": [ + "tmp%4#0" + ], + "stack_out": [ + "tmp%4#0" + ] + }, + "28": { + "op": "txn ApplicationID", + "defined_out": [ + "tmp%4#0", + "tmp%5#0" + ], + "stack_out": [ + "tmp%4#0", + "tmp%5#0" + ] + }, + "30": { + "op": "&&", + "defined_out": [ + "tmp%7#0" + ], + "stack_out": [ + "tmp%7#0" + ] + }, + "31": { + "error": "OnCompletion must be NoOp && can only call when not creating", + "op": "assert // OnCompletion must be NoOp && can only call when not creating", + "stack_out": [] + }, + "32": { + "op": "b pay" + }, + "35": { + "block": "main___algots__.defaultCreate@5", + "stack_in": [], + "op": "txn OnCompletion", + "defined_out": [ + "tmp%8#0" + ], + "stack_out": [ + "tmp%8#0" + ] + }, + "37": { + "op": "!", + "defined_out": [ + "tmp%9#0" + ], + "stack_out": [ + "tmp%9#0" + ] + }, + "38": { + "op": "txn ApplicationID", + "defined_out": [ + "tmp%10#0", + "tmp%9#0" + ], + "stack_out": [ + "tmp%9#0", + "tmp%10#0" + ] + }, + "40": { + "op": "!", + "defined_out": [ + "tmp%11#0", + "tmp%9#0" + ], + "stack_out": [ + "tmp%9#0", + "tmp%11#0" + ] + }, + "41": { + "op": "&&", + "defined_out": [ + "tmp%12#0" + ], + "stack_out": [ + "tmp%12#0" + ] + }, + "42": { + "error": "OnCompletion must be NoOp && can only call when creating", + "op": "return // on error: OnCompletion must be NoOp && can only call when creating", + "defined_out": [], + "stack_out": [] + }, + "43": { + "subroutine": "smart_contracts/utils/plugins.ts::rekeyAddress", + "params": { + "rekeyBack#0": "uint64", + "wallet#0": "uint64" + }, + "block": "rekeyAddress", + "stack_in": [], + "op": "proto 2 1" + }, + "46": { + "op": "frame_dig -2", + "defined_out": [ + "rekeyBack#0 (copy)" + ], + "stack_out": [ + "rekeyBack#0 (copy)" + ] + }, + "48": { + "op": "bnz rekeyAddress_after_if_else@2", + "stack_out": [] + }, + "51": { + "op": "global ZeroAddress", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] + }, + "53": { + "retsub": true, + "op": "retsub" + }, + "54": { + "block": "rekeyAddress_after_if_else@2", + "stack_in": [], + "op": "frame_dig -1", + "defined_out": [ + "wallet#0 (copy)" + ], + "stack_out": [ + "wallet#0 (copy)" + ] + }, + "56": { + "op": "app_params_get AppAddress", + "defined_out": [ + "check%0#0", + "value%0#0" + ], + "stack_out": [ + "value%0#0", + "check%0#0" + ] + }, + "58": { + "error": "application exists", + "op": "assert // application exists", + "stack_out": [ + "value%0#0" + ] + }, + "59": { + "retsub": true, + "op": "retsub" + }, + "60": { + "subroutine": "smart_contracts/plugins/pay/contract.algo.ts::PayPlugin.pay[routing]", + "params": {}, + "block": "pay", + "stack_in": [], + "op": "txna ApplicationArgs 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] + }, + "63": { + "op": "dup", + "defined_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ] + }, + "64": { + "op": "len", + "defined_out": [ + "len%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "len%0#0" + ] + }, + "65": { + "op": "intc_0 // 8", + "defined_out": [ + "8", + "len%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "len%0#0", + "8" + ] + }, + "66": { + "op": "==", + "defined_out": [ + "eq%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "eq%0#0" + ] + }, + "67": { + "error": "invalid number of bytes for uint64", + "op": "assert // invalid number of bytes for uint64", + "stack_out": [ + "tmp%0#0" + ] + }, + "68": { + "op": "btoi", + "defined_out": [ + "wallet#0" + ], + "stack_out": [ + "wallet#0" + ] + }, + "69": { + "op": "dup", + "defined_out": [ + "wallet#0" + ], + "stack_out": [ + "wallet#0", + "wallet#0" + ] + }, + "70": { + "op": "txna ApplicationArgs 2", + "defined_out": [ + "tmp%2#0", + "wallet#0" + ], + "stack_out": [ + "wallet#0", + "wallet#0", + "tmp%2#0" + ] + }, + "73": { + "op": "dup", + "defined_out": [ + "tmp%2#0", + "tmp%2#0 (copy)", + "wallet#0" + ], + "stack_out": [ + "wallet#0", + "wallet#0", + "tmp%2#0", + "tmp%2#0 (copy)" + ] + }, + "74": { + "op": "len", + "defined_out": [ + "len%1#0", + "tmp%2#0", + "wallet#0" + ], + "stack_out": [ + "wallet#0", + "wallet#0", + "tmp%2#0", + "len%1#0" + ] + }, + "75": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "len%1#0", + "tmp%2#0", + "wallet#0" + ], + "stack_out": [ + "wallet#0", + "wallet#0", + "tmp%2#0", + "len%1#0", + "1" + ] + }, + "76": { + "op": "==", + "defined_out": [ + "eq%1#0", + "tmp%2#0", + "wallet#0" + ], + "stack_out": [ + "wallet#0", + "wallet#0", + "tmp%2#0", + "eq%1#0" + ] + }, + "77": { + "error": "invalid number of bytes for bool8", + "op": "assert // invalid number of bytes for bool8", + "stack_out": [ + "wallet#0", + "wallet#0", + "tmp%2#0" + ] + }, + "78": { + "op": "intc_2 // 0", + "stack_out": [ + "wallet#0", + "wallet#0", + "tmp%2#0", + "0" + ] + }, + "79": { + "op": "getbit", + "defined_out": [ + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "wallet#0", + "wallet#0", + "rekeyBack#0" + ] + }, + "80": { + "op": "cover 2", + "defined_out": [ + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "rekeyBack#0", + "wallet#0", + "wallet#0" + ] + }, + "82": { + "op": "txna ApplicationArgs 3" + }, + "85": { + "op": "dup", + "defined_out": [ + "receiver#0", + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "rekeyBack#0", + "wallet#0", + "wallet#0", + "receiver#0", + "receiver#0" + ] + }, + "86": { + "op": "cover 4", + "defined_out": [ + "receiver#0", + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "receiver#0", + "rekeyBack#0", + "wallet#0", + "wallet#0", + "receiver#0" + ] + }, + "88": { + "op": "len", + "defined_out": [ + "len%2#0", + "receiver#0", + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "receiver#0", + "rekeyBack#0", + "wallet#0", + "wallet#0", + "len%2#0" + ] + }, + "89": { + "op": "pushint 32 // 32", + "defined_out": [ + "32", + "len%2#0", + "receiver#0", + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "receiver#0", + "rekeyBack#0", + "wallet#0", + "wallet#0", + "len%2#0", + "32" + ] + }, + "91": { + "op": "==", + "defined_out": [ + "eq%2#0", + "receiver#0", + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "receiver#0", + "rekeyBack#0", + "wallet#0", + "wallet#0", + "eq%2#0" + ] + }, + "92": { + "error": "invalid number of bytes for uint8[32]", + "op": "assert // invalid number of bytes for uint8[32]", + "stack_out": [ + "receiver#0", + "rekeyBack#0", + "wallet#0", + "wallet#0" + ] + }, + "93": { + "op": "txna ApplicationArgs 4", + "defined_out": [ + "receiver#0", + "rekeyBack#0", + "tmp%5#0", + "wallet#0" + ], + "stack_out": [ + "receiver#0", + "rekeyBack#0", + "wallet#0", + "wallet#0", + "tmp%5#0" + ] + }, + "96": { + "op": "dup", + "defined_out": [ + "receiver#0", + "rekeyBack#0", + "tmp%5#0", + "tmp%5#0 (copy)", + "wallet#0" + ], + "stack_out": [ + "receiver#0", + "rekeyBack#0", + "wallet#0", + "wallet#0", + "tmp%5#0", + "tmp%5#0 (copy)" + ] + }, + "97": { + "op": "len", + "defined_out": [ + "len%3#0", + "receiver#0", + "rekeyBack#0", + "tmp%5#0", + "wallet#0" + ], + "stack_out": [ + "receiver#0", + "rekeyBack#0", + "wallet#0", + "wallet#0", + "tmp%5#0", + "len%3#0" + ] + }, + "98": { + "op": "intc_0 // 8", + "stack_out": [ + "receiver#0", + "rekeyBack#0", + "wallet#0", + "wallet#0", + "tmp%5#0", + "len%3#0", + "8" + ] + }, + "99": { + "op": "==", + "defined_out": [ + "eq%3#0", + "receiver#0", + "rekeyBack#0", + "tmp%5#0", + "wallet#0" + ], + "stack_out": [ + "receiver#0", + "rekeyBack#0", + "wallet#0", + "wallet#0", + "tmp%5#0", + "eq%3#0" + ] + }, + "100": { + "error": "invalid number of bytes for uint64", + "op": "assert // invalid number of bytes for uint64", + "stack_out": [ + "receiver#0", + "rekeyBack#0", + "wallet#0", + "wallet#0", + "tmp%5#0" + ] + }, + "101": { + "op": "btoi", + "defined_out": [ + "asset#0", + "receiver#0", + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "receiver#0", + "rekeyBack#0", + "wallet#0", + "wallet#0", + "asset#0" + ] + }, + "102": { + "op": "dup", + "stack_out": [ + "receiver#0", + "rekeyBack#0", + "wallet#0", + "wallet#0", + "asset#0", + "asset#0" + ] + }, + "103": { + "op": "cover 4", + "defined_out": [ + "asset#0", + "receiver#0", + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "receiver#0", + "asset#0", + "rekeyBack#0", + "wallet#0", + "wallet#0", + "asset#0" + ] + }, + "105": { + "op": "txna ApplicationArgs 5", + "defined_out": [ + "asset#0", + "receiver#0", + "rekeyBack#0", + "tmp%7#0", + "wallet#0" + ], + "stack_out": [ + "receiver#0", + "asset#0", + "rekeyBack#0", + "wallet#0", + "wallet#0", + "asset#0", + "tmp%7#0" + ] + }, + "108": { + "op": "dup", + "defined_out": [ + "asset#0", + "receiver#0", + "rekeyBack#0", + "tmp%7#0", + "tmp%7#0 (copy)", + "wallet#0" + ], + "stack_out": [ + "receiver#0", + "asset#0", + "rekeyBack#0", + "wallet#0", + "wallet#0", + "asset#0", + "tmp%7#0", + "tmp%7#0 (copy)" + ] + }, + "109": { + "op": "len", + "defined_out": [ + "asset#0", + "len%4#0", + "receiver#0", + "rekeyBack#0", + "tmp%7#0", + "wallet#0" + ], + "stack_out": [ + "receiver#0", + "asset#0", + "rekeyBack#0", + "wallet#0", + "wallet#0", + "asset#0", + "tmp%7#0", + "len%4#0" + ] + }, + "110": { + "op": "intc_0 // 8", + "stack_out": [ + "receiver#0", + "asset#0", + "rekeyBack#0", + "wallet#0", + "wallet#0", + "asset#0", + "tmp%7#0", + "len%4#0", + "8" + ] + }, + "111": { + "op": "==", + "defined_out": [ + "asset#0", + "eq%4#0", + "receiver#0", + "rekeyBack#0", + "tmp%7#0", + "wallet#0" + ], + "stack_out": [ + "receiver#0", + "asset#0", + "rekeyBack#0", + "wallet#0", + "wallet#0", + "asset#0", + "tmp%7#0", + "eq%4#0" + ] + }, + "112": { + "error": "invalid number of bytes for uint64", + "op": "assert // invalid number of bytes for uint64", + "stack_out": [ + "receiver#0", + "asset#0", + "rekeyBack#0", + "wallet#0", + "wallet#0", + "asset#0", + "tmp%7#0" + ] + }, + "113": { + "op": "btoi", + "defined_out": [ + "amount#0", + "asset#0", + "receiver#0", + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "receiver#0", + "asset#0", + "rekeyBack#0", + "wallet#0", + "wallet#0", + "asset#0", + "amount#0" + ] + }, + "114": { + "op": "cover 4", + "defined_out": [ + "amount#0", + "asset#0", + "receiver#0", + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "receiver#0", + "asset#0", + "amount#0", + "rekeyBack#0", + "wallet#0", + "wallet#0", + "asset#0" + ] + }, + "116": { + "op": "swap", + "stack_out": [ + "receiver#0", + "asset#0", + "amount#0", + "rekeyBack#0", + "wallet#0", + "asset#0", + "wallet#0" + ] + }, + "117": { + "op": "pushbytes \"spending_address\"", + "defined_out": [ + "\"spending_address\"", + "amount#0", + "asset#0", + "receiver#0", + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "receiver#0", + "asset#0", + "amount#0", + "rekeyBack#0", + "wallet#0", + "asset#0", + "wallet#0", + "\"spending_address\"" + ] + }, + "135": { + "op": "app_global_get_ex", + "defined_out": [ + "amount#0", + "asset#0", + "awst_tmp%1#0", + "receiver#0", + "rekeyBack#0", + "spendingAddressBytes#0", + "wallet#0" + ], + "stack_out": [ + "receiver#0", + "asset#0", + "amount#0", + "rekeyBack#0", + "wallet#0", + "asset#0", + "spendingAddressBytes#0", + "awst_tmp%1#0" + ] + }, + "136": { + "op": "pop", + "stack_out": [ + "receiver#0", + "asset#0", + "amount#0", + "rekeyBack#0", + "wallet#0", + "asset#0", + "spendingAddressBytes#0" + ] + }, + "137": { + "op": "cover 3", + "defined_out": [ + "amount#0", + "asset#0", + "receiver#0", + "rekeyBack#0", + "spendingAddressBytes#0", + "wallet#0" + ], + "stack_out": [ + "receiver#0", + "asset#0", + "amount#0", + "spendingAddressBytes#0", + "rekeyBack#0", + "wallet#0", + "asset#0" + ] + }, + "139": { + "op": "bnz pay_else_body@4", + "stack_out": [ + "receiver#0", + "asset#0", + "amount#0", + "spendingAddressBytes#0", + "rekeyBack#0", + "wallet#0" + ] + }, + "142": { + "op": "itxn_begin" + }, + "143": { + "callsub": "smart_contracts/utils/plugins.ts::rekeyAddress", + "op": "callsub rekeyAddress", + "defined_out": [ + "amount#0", + "asset#0", + "inner_txn_params%0%%param_RekeyTo_idx_0#0", + "receiver#0", + "spendingAddressBytes#0" + ], + "stack_out": [ + "receiver#0", + "asset#0", + "amount#0", + "spendingAddressBytes#0", + "inner_txn_params%0%%param_RekeyTo_idx_0#0" + ] + }, + "146": { + "op": "itxn_field RekeyTo", + "stack_out": [ + "receiver#0", + "asset#0", + "amount#0", + "spendingAddressBytes#0" + ] + }, + "148": { + "op": "dig 1", + "stack_out": [ + "receiver#0", + "asset#0", + "amount#0", + "spendingAddressBytes#0", + "amount#0" + ] + }, + "150": { + "op": "itxn_field Amount", + "stack_out": [ + "receiver#0", + "asset#0", + "amount#0", + "spendingAddressBytes#0" + ] + }, + "152": { + "op": "dig 3", + "stack_out": [ + "receiver#0", + "asset#0", + "amount#0", + "spendingAddressBytes#0", + "receiver#0" + ] + }, + "154": { + "op": "itxn_field Receiver", + "stack_out": [ + "receiver#0", + "asset#0", + "amount#0", + "spendingAddressBytes#0" + ] + }, + "156": { + "op": "dup", + "stack_out": [ + "receiver#0", + "asset#0", + "amount#0", + "spendingAddressBytes#0", + "spendingAddressBytes#0" + ] + }, + "157": { + "op": "itxn_field Sender", + "stack_out": [ + "receiver#0", + "asset#0", + "amount#0", + "spendingAddressBytes#0" + ] + }, + "159": { + "op": "intc_1 // 1", + "stack_out": [ + "receiver#0", + "asset#0", + "amount#0", + "spendingAddressBytes#0", + "1" + ] + }, + "160": { + "op": "itxn_field TypeEnum", + "stack_out": [ + "receiver#0", + "asset#0", + "amount#0", + "spendingAddressBytes#0" + ] + }, + "162": { + "op": "intc_2 // 0", + "stack_out": [ + "receiver#0", + "asset#0", + "amount#0", + "spendingAddressBytes#0", + "0" + ] + }, + "163": { + "op": "itxn_field Fee", + "stack_out": [ + "receiver#0", + "asset#0", + "amount#0", + "spendingAddressBytes#0" + ] + }, + "165": { + "op": "itxn_submit" + }, + "166": { + "block": "pay_after_if_else@6", + "stack_in": [ + "receiver#0", + "asset#0", + "amount#0", + "spendingAddressBytes#0" + ], + "op": "intc_1 // 1", + "defined_out": [ + "1" + ], + "stack_out": [ + "receiver#0", + "asset#0", + "amount#0", + "spendingAddressBytes#0", + "1" + ] + }, + "167": { + "op": "return", + "stack_out": [ + "receiver#0", + "asset#0", + "amount#0", + "spendingAddressBytes#0" + ] + }, + "168": { + "block": "pay_else_body@4", + "stack_in": [ + "receiver#0", + "asset#0", + "amount#0", + "spendingAddressBytes#0", + "rekeyBack#0", + "wallet#0" + ], + "op": "itxn_begin", + "defined_out": [ + "rekeyBack#0", + "wallet#0" + ] + }, + "169": { + "callsub": "smart_contracts/utils/plugins.ts::rekeyAddress", + "op": "callsub rekeyAddress", + "defined_out": [ + "inner_txn_params%1%%param_RekeyTo_idx_0#0" + ], + "stack_out": [ + "receiver#0", + "asset#0", + "amount#0", + "spendingAddressBytes#0", + "inner_txn_params%1%%param_RekeyTo_idx_0#0" + ] + }, + "172": { + "op": "itxn_field RekeyTo", + "stack_out": [ + "receiver#0", + "asset#0", + "amount#0", + "spendingAddressBytes#0" + ] + }, + "174": { + "op": "dig 2", + "defined_out": [ + "asset#0" + ], + "stack_out": [ + "receiver#0", + "asset#0", + "amount#0", + "spendingAddressBytes#0", + "asset#0" + ] + }, + "176": { + "op": "itxn_field XferAsset", + "stack_out": [ + "receiver#0", + "asset#0", + "amount#0", + "spendingAddressBytes#0" + ] + }, + "178": { + "op": "dig 1", + "defined_out": [ + "amount#0", + "asset#0" + ], + "stack_out": [ + "receiver#0", + "asset#0", + "amount#0", + "spendingAddressBytes#0", + "amount#0" + ] + }, + "180": { + "op": "itxn_field AssetAmount", + "stack_out": [ + "receiver#0", + "asset#0", + "amount#0", + "spendingAddressBytes#0" + ] + }, + "182": { + "op": "dig 3", + "defined_out": [ + "amount#0", + "asset#0", + "receiver#0" + ], + "stack_out": [ + "receiver#0", + "asset#0", + "amount#0", + "spendingAddressBytes#0", + "receiver#0" + ] + }, + "184": { + "op": "itxn_field AssetReceiver", + "stack_out": [ + "receiver#0", + "asset#0", + "amount#0", + "spendingAddressBytes#0" + ] + }, + "186": { + "op": "dup", + "defined_out": [ + "amount#0", + "asset#0", + "receiver#0", + "spendingAddressBytes#0" + ], + "stack_out": [ + "receiver#0", + "asset#0", + "amount#0", + "spendingAddressBytes#0", + "spendingAddressBytes#0" + ] + }, + "187": { + "op": "itxn_field Sender", + "stack_out": [ + "receiver#0", + "asset#0", + "amount#0", + "spendingAddressBytes#0" + ] + }, + "189": { + "op": "pushint 4 // 4", + "defined_out": [ + "4", + "amount#0", + "asset#0", + "receiver#0", + "spendingAddressBytes#0" + ], + "stack_out": [ + "receiver#0", + "asset#0", + "amount#0", + "spendingAddressBytes#0", + "4" + ] + }, + "191": { + "op": "itxn_field TypeEnum", + "stack_out": [ + "receiver#0", + "asset#0", + "amount#0", + "spendingAddressBytes#0" + ] + }, + "193": { + "op": "intc_2 // 0", + "defined_out": [ + "0", + "amount#0", + "asset#0", + "receiver#0", + "spendingAddressBytes#0" + ], + "stack_out": [ + "receiver#0", + "asset#0", + "amount#0", + "spendingAddressBytes#0", + "0" + ] + }, + "194": { + "op": "itxn_field Fee", + "stack_out": [ + "receiver#0", + "asset#0", + "amount#0", + "spendingAddressBytes#0" + ] + }, + "196": { + "op": "itxn_submit" + }, + "197": { + "op": "b pay_after_if_else@6" + } + } +} \ No newline at end of file diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/pay/PayPlugin.approval.teal b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/pay/PayPlugin.approval.teal new file mode 100644 index 000000000..afede1ed2 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/pay/PayPlugin.approval.teal @@ -0,0 +1,222 @@ +#pragma version 11 +#pragma typetrack false + +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: + intcblock 8 1 0 + // smart_contracts/plugins/pay/contract.algo.ts:5 + // export class PayPlugin extends Contract { + txn NumAppArgs + bz main___algots__.defaultCreate@5 + pushbytes 0x93d588b9 // method "pay(uint64,bool,address,uint64,uint64)void" + txna ApplicationArgs 0 + match main_pay_route@3 + err + +main_pay_route@3: + // smart_contracts/plugins/pay/contract.algo.ts:7 + // pay(wallet: Application, rekeyBack: boolean, receiver: Address, asset: uint64, amount: uint64): void { + txn OnCompletion + ! + txn ApplicationID + && + assert // OnCompletion must be NoOp && can only call when not creating + b pay + +main___algots__.defaultCreate@5: + // smart_contracts/plugins/pay/contract.algo.ts:5 + // export class PayPlugin extends Contract { + txn OnCompletion + ! + txn ApplicationID + ! + && + return // on error: OnCompletion must be NoOp && can only call when creating + + +// smart_contracts/utils/plugins.ts::rekeyAddress(rekeyBack: uint64, wallet: uint64) -> bytes: +rekeyAddress: + // smart_contracts/utils/plugins.ts:41 + // export function rekeyAddress(rekeyBack: boolean, wallet: Application): Account { + proto 2 1 + // smart_contracts/utils/plugins.ts:42 + // if (!rekeyBack) { + frame_dig -2 + bnz rekeyAddress_after_if_else@2 + // smart_contracts/utils/plugins.ts:43 + // return Global.zeroAddress + global ZeroAddress + retsub + +rekeyAddress_after_if_else@2: + // smart_contracts/utils/plugins.ts:46 + // return wallet.address + frame_dig -1 + app_params_get AppAddress + assert // application exists + retsub + + +// smart_contracts/plugins/pay/contract.algo.ts::PayPlugin.pay[routing]() -> void: +pay: + // smart_contracts/plugins/pay/contract.algo.ts:7 + // pay(wallet: Application, rekeyBack: boolean, receiver: Address, asset: uint64, amount: uint64): void { + txna ApplicationArgs 1 + dup + len + intc_0 // 8 + == + assert // invalid number of bytes for uint64 + btoi + dup + txna ApplicationArgs 2 + dup + len + intc_1 // 1 + == + assert // invalid number of bytes for bool8 + intc_2 // 0 + getbit + cover 2 + txna ApplicationArgs 3 + dup + cover 4 + len + pushint 32 // 32 + == + assert // invalid number of bytes for uint8[32] + txna ApplicationArgs 4 + dup + len + intc_0 // 8 + == + assert // invalid number of bytes for uint64 + btoi + dup + cover 4 + txna ApplicationArgs 5 + dup + len + intc_0 // 8 + == + assert // invalid number of bytes for uint64 + btoi + cover 4 + // smart_contracts/utils/plugins.ts:34-37 + // const [spendingAddressBytes] = op.AppGlobal.getExBytes( + // wallet, + // Bytes(AbstractAccountGlobalStateKeysSpendingAddress) + // ) + swap + // smart_contracts/utils/plugins.ts:36 + // Bytes(AbstractAccountGlobalStateKeysSpendingAddress) + pushbytes "spending_address" + // smart_contracts/utils/plugins.ts:34-37 + // const [spendingAddressBytes] = op.AppGlobal.getExBytes( + // wallet, + // Bytes(AbstractAccountGlobalStateKeysSpendingAddress) + // ) + app_global_get_ex + pop + cover 3 + // smart_contracts/plugins/pay/contract.algo.ts:10 + // if (asset === 0) { + bnz pay_else_body@4 + // smart_contracts/plugins/pay/contract.algo.ts:11-18 + // itxn + // .payment({ + // sender, + // receiver: receiver.native, + // amount, + // rekeyTo: rekeyAddress(rekeyBack, wallet) + // }) + // .submit() + itxn_begin + // smart_contracts/plugins/pay/contract.algo.ts:16 + // rekeyTo: rekeyAddress(rekeyBack, wallet) + callsub rekeyAddress + itxn_field RekeyTo + dig 1 + itxn_field Amount + dig 3 + itxn_field Receiver + dup + itxn_field Sender + // smart_contracts/plugins/pay/contract.algo.ts:11-17 + // itxn + // .payment({ + // sender, + // receiver: receiver.native, + // amount, + // rekeyTo: rekeyAddress(rekeyBack, wallet) + // }) + intc_1 // 1 + itxn_field TypeEnum + intc_2 // 0 + itxn_field Fee + // smart_contracts/plugins/pay/contract.algo.ts:11-18 + // itxn + // .payment({ + // sender, + // receiver: receiver.native, + // amount, + // rekeyTo: rekeyAddress(rekeyBack, wallet) + // }) + // .submit() + itxn_submit + +pay_after_if_else@6: + // smart_contracts/plugins/pay/contract.algo.ts:7 + // pay(wallet: Application, rekeyBack: boolean, receiver: Address, asset: uint64, amount: uint64): void { + intc_1 // 1 + return + +pay_else_body@4: + // smart_contracts/plugins/pay/contract.algo.ts:20-28 + // itxn + // .assetTransfer({ + // sender, + // assetReceiver: receiver.native, + // assetAmount: amount, + // xferAsset: asset, + // rekeyTo: rekeyAddress(rekeyBack, wallet) + // }) + // .submit() + itxn_begin + // smart_contracts/plugins/pay/contract.algo.ts:26 + // rekeyTo: rekeyAddress(rekeyBack, wallet) + callsub rekeyAddress + itxn_field RekeyTo + dig 2 + itxn_field XferAsset + dig 1 + itxn_field AssetAmount + dig 3 + itxn_field AssetReceiver + dup + itxn_field Sender + // smart_contracts/plugins/pay/contract.algo.ts:20-27 + // itxn + // .assetTransfer({ + // sender, + // assetReceiver: receiver.native, + // assetAmount: amount, + // xferAsset: asset, + // rekeyTo: rekeyAddress(rekeyBack, wallet) + // }) + pushint 4 // 4 + itxn_field TypeEnum + intc_2 // 0 + itxn_field Fee + // smart_contracts/plugins/pay/contract.algo.ts:20-28 + // itxn + // .assetTransfer({ + // sender, + // assetReceiver: receiver.native, + // assetAmount: amount, + // xferAsset: asset, + // rekeyTo: rekeyAddress(rekeyBack, wallet) + // }) + // .submit() + itxn_submit + b pay_after_if_else@6 diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/pay/PayPlugin.arc32.json b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/pay/PayPlugin.arc32.json new file mode 100644 index 000000000..2d8d65ec9 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/pay/PayPlugin.arc32.json @@ -0,0 +1,71 @@ +{ + "hints": { + "pay(uint64,bool,address,uint64,uint64)void": { + "call_config": { + "no_op": "CALL" + } + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgOCAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL3BheS9jb250cmFjdC5hbGdvLnRzOjUKICAgIC8vIGV4cG9ydCBjbGFzcyBQYXlQbHVnaW4gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANQogICAgcHVzaGJ5dGVzIDB4OTNkNTg4YjkgLy8gbWV0aG9kICJwYXkodWludDY0LGJvb2wsYWRkcmVzcyx1aW50NjQsdWludDY0KXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX3BheV9yb3V0ZUAzCiAgICBlcnIKCm1haW5fcGF5X3JvdXRlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9wYXkvY29udHJhY3QuYWxnby50czo3CiAgICAvLyBwYXkod2FsbGV0OiBBcHBsaWNhdGlvbiwgcmVrZXlCYWNrOiBib29sZWFuLCByZWNlaXZlcjogQWRkcmVzcywgYXNzZXQ6IHVpbnQ2NCwgYW1vdW50OiB1aW50NjQpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAmJgogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AgJiYgY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYiBwYXkKCm1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9wYXkvY29udHJhY3QuYWxnby50czo1CiAgICAvLyBleHBvcnQgY2xhc3MgUGF5UGx1Z2luIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4gLy8gb24gZXJyb3I6IE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AgJiYgY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCgoKLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL3BsdWdpbnMudHM6OnJla2V5QWRkcmVzcyhyZWtleUJhY2s6IHVpbnQ2NCwgd2FsbGV0OiB1aW50NjQpIC0+IGJ5dGVzOgpyZWtleUFkZHJlc3M6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvcGx1Z2lucy50czo0MQogICAgLy8gZXhwb3J0IGZ1bmN0aW9uIHJla2V5QWRkcmVzcyhyZWtleUJhY2s6IGJvb2xlYW4sIHdhbGxldDogQXBwbGljYXRpb24pOiBBY2NvdW50IHsKICAgIHByb3RvIDIgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL3BsdWdpbnMudHM6NDIKICAgIC8vIGlmICghcmVrZXlCYWNrKSB7CiAgICBmcmFtZV9kaWcgLTIKICAgIGJueiByZWtleUFkZHJlc3NfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvcGx1Z2lucy50czo0MwogICAgLy8gcmV0dXJuIEdsb2JhbC56ZXJvQWRkcmVzcwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICByZXRzdWIKCnJla2V5QWRkcmVzc19hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvcGx1Z2lucy50czo0NgogICAgLy8gcmV0dXJuIHdhbGxldC5hZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL3BheS9jb250cmFjdC5hbGdvLnRzOjpQYXlQbHVnaW4ucGF5W3JvdXRpbmddKCkgLT4gdm9pZDoKcGF5OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvcGF5L2NvbnRyYWN0LmFsZ28udHM6NwogICAgLy8gcGF5KHdhbGxldDogQXBwbGljYXRpb24sIHJla2V5QmFjazogYm9vbGVhbiwgcmVjZWl2ZXI6IEFkZHJlc3MsIGFzc2V0OiB1aW50NjQsIGFtb3VudDogdWludDY0KTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGJvb2w4CiAgICBpbnRjXzIgLy8gMAogICAgZ2V0Yml0CiAgICBjb3ZlciAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGNvdmVyIDQKICAgIGxlbgogICAgcHVzaGludCAzMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDhbMzJdCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICBjb3ZlciA0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgY292ZXIgNAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL3BsdWdpbnMudHM6MzQtMzcKICAgIC8vIGNvbnN0IFtzcGVuZGluZ0FkZHJlc3NCeXRlc10gPSBvcC5BcHBHbG9iYWwuZ2V0RXhCeXRlcygKICAgIC8vICAgd2FsbGV0LAogICAgLy8gICBCeXRlcyhBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNTcGVuZGluZ0FkZHJlc3MpCiAgICAvLyApCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvcGx1Z2lucy50czozNgogICAgLy8gQnl0ZXMoQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzU3BlbmRpbmdBZGRyZXNzKQogICAgcHVzaGJ5dGVzICJzcGVuZGluZ19hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL3BsdWdpbnMudHM6MzQtMzcKICAgIC8vIGNvbnN0IFtzcGVuZGluZ0FkZHJlc3NCeXRlc10gPSBvcC5BcHBHbG9iYWwuZ2V0RXhCeXRlcygKICAgIC8vICAgd2FsbGV0LAogICAgLy8gICBCeXRlcyhBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNTcGVuZGluZ0FkZHJlc3MpCiAgICAvLyApCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgcG9wCiAgICBjb3ZlciAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9wYXkvY29udHJhY3QuYWxnby50czoxMAogICAgLy8gaWYgKGFzc2V0ID09PSAwKSB7CiAgICBibnogcGF5X2Vsc2VfYm9keUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9wYXkvY29udHJhY3QuYWxnby50czoxMS0xOAogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyLAogICAgLy8gICAgIHJlY2VpdmVyOiByZWNlaXZlci5uYXRpdmUsCiAgICAvLyAgICAgYW1vdW50LAogICAgLy8gICAgIHJla2V5VG86IHJla2V5QWRkcmVzcyhyZWtleUJhY2ssIHdhbGxldCkKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9wYXkvY29udHJhY3QuYWxnby50czoxNgogICAgLy8gcmVrZXlUbzogcmVrZXlBZGRyZXNzKHJla2V5QmFjaywgd2FsbGV0KQogICAgY2FsbHN1YiByZWtleUFkZHJlc3MKICAgIGl0eG5fZmllbGQgUmVrZXlUbwogICAgZGlnIDEKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBkaWcgMwogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgZHVwCiAgICBpdHhuX2ZpZWxkIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvcGF5L2NvbnRyYWN0LmFsZ28udHM6MTEtMTcKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlciwKICAgIC8vICAgICByZWNlaXZlcjogcmVjZWl2ZXIubmF0aXZlLAogICAgLy8gICAgIGFtb3VudCwKICAgIC8vICAgICByZWtleVRvOiByZWtleUFkZHJlc3MocmVrZXlCYWNrLCB3YWxsZXQpCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18yIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9wYXkvY29udHJhY3QuYWxnby50czoxMS0xOAogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyLAogICAgLy8gICAgIHJlY2VpdmVyOiByZWNlaXZlci5uYXRpdmUsCiAgICAvLyAgICAgYW1vdW50LAogICAgLy8gICAgIHJla2V5VG86IHJla2V5QWRkcmVzcyhyZWtleUJhY2ssIHdhbGxldCkKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAoKcGF5X2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL3BheS9jb250cmFjdC5hbGdvLnRzOjcKICAgIC8vIHBheSh3YWxsZXQ6IEFwcGxpY2F0aW9uLCByZWtleUJhY2s6IGJvb2xlYW4sIHJlY2VpdmVyOiBBZGRyZXNzLCBhc3NldDogdWludDY0LCBhbW91bnQ6IHVpbnQ2NCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKcGF5X2Vsc2VfYm9keUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvcGF5L2NvbnRyYWN0LmFsZ28udHM6MjAtMjgKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIHNlbmRlciwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiByZWNlaXZlci5uYXRpdmUsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IGFtb3VudCwKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIHJla2V5VG86IHJla2V5QWRkcmVzcyhyZWtleUJhY2ssIHdhbGxldCkKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9wYXkvY29udHJhY3QuYWxnby50czoyNgogICAgLy8gcmVrZXlUbzogcmVrZXlBZGRyZXNzKHJla2V5QmFjaywgd2FsbGV0KQogICAgY2FsbHN1YiByZWtleUFkZHJlc3MKICAgIGl0eG5fZmllbGQgUmVrZXlUbwogICAgZGlnIDIKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBkaWcgMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZGlnIDMKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZHVwCiAgICBpdHhuX2ZpZWxkIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvcGF5L2NvbnRyYWN0LmFsZ28udHM6MjAtMjcKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIHNlbmRlciwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiByZWNlaXZlci5uYXRpdmUsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IGFtb3VudCwKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIHJla2V5VG86IHJla2V5QWRkcmVzcyhyZWtleUJhY2ssIHdhbGxldCkKICAgIC8vICAgfSkKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzIgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL3BheS9jb250cmFjdC5hbGdvLnRzOjIwLTI4CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBzZW5kZXIsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIubmF0aXZlLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiBhbW91bnQsCiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICByZWtleVRvOiByZWtleUFkZHJlc3MocmVrZXlCYWNrLCB3YWxsZXQpCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGIgcGF5X2FmdGVyX2lmX2Vsc2VANgo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "state": { + "global": { + "num_byte_slices": 0, + "num_uints": 0 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "schema": { + "global": { + "declared": {}, + "reserved": {} + }, + "local": { + "declared": {}, + "reserved": {} + } + }, + "contract": { + "name": "PayPlugin", + "methods": [ + { + "name": "pay", + "args": [ + { + "type": "uint64", + "name": "wallet" + }, + { + "type": "bool", + "name": "rekeyBack" + }, + { + "type": "address", + "name": "receiver" + }, + { + "type": "uint64", + "name": "asset" + }, + { + "type": "uint64", + "name": "amount" + } + ], + "readonly": false, + "returns": { + "type": "void" + } + } + ], + "networks": {} + }, + "bare_call_config": { + "no_op": "CREATE" + } +} \ No newline at end of file diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/pay/PayPlugin.arc56.json b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/pay/PayPlugin.arc56.json new file mode 100644 index 000000000..9bd4a924b --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/pay/PayPlugin.arc56.json @@ -0,0 +1,143 @@ +{ + "name": "PayPlugin", + "structs": {}, + "methods": [ + { + "name": "pay", + "args": [ + { + "type": "uint64", + "name": "wallet" + }, + { + "type": "bool", + "name": "rekeyBack" + }, + { + "type": "address", + "name": "receiver" + }, + { + "type": "uint64", + "name": "asset" + }, + { + "type": "uint64", + "name": "amount" + } + ], + "returns": { + "type": "void" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + } + ], + "arcs": [ + 22, + 28 + ], + "networks": {}, + "state": { + "schema": { + "global": { + "ints": 0, + "bytes": 0 + }, + "local": { + "ints": 0, + "bytes": 0 + } + }, + "keys": { + "global": {}, + "local": {}, + "box": {} + }, + "maps": { + "global": {}, + "local": {}, + "box": {} + } + }, + "bareActions": { + "create": [ + "NoOp" + ], + "call": [] + }, + "sourceInfo": { + "approval": { + "sourceInfo": [ + { + "pc": [ + 42 + ], + "errorMessage": "OnCompletion must be NoOp && can only call when creating" + }, + { + "pc": [ + 31 + ], + "errorMessage": "OnCompletion must be NoOp && can only call when not creating" + }, + { + "pc": [ + 58 + ], + "errorMessage": "application exists" + }, + { + "pc": [ + 77 + ], + "errorMessage": "invalid number of bytes for bool8" + }, + { + "pc": [ + 67, + 100, + 112 + ], + "errorMessage": "invalid number of bytes for uint64" + }, + { + "pc": [ + 92 + ], + "errorMessage": "invalid number of bytes for uint8[32]" + } + ], + "pcOffsetMethod": "none" + }, + "clear": { + "sourceInfo": [], + "pcOffsetMethod": "none" + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgOCAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL3BheS9jb250cmFjdC5hbGdvLnRzOjUKICAgIC8vIGV4cG9ydCBjbGFzcyBQYXlQbHVnaW4gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANQogICAgcHVzaGJ5dGVzIDB4OTNkNTg4YjkgLy8gbWV0aG9kICJwYXkodWludDY0LGJvb2wsYWRkcmVzcyx1aW50NjQsdWludDY0KXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX3BheV9yb3V0ZUAzCiAgICBlcnIKCm1haW5fcGF5X3JvdXRlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9wYXkvY29udHJhY3QuYWxnby50czo3CiAgICAvLyBwYXkod2FsbGV0OiBBcHBsaWNhdGlvbiwgcmVrZXlCYWNrOiBib29sZWFuLCByZWNlaXZlcjogQWRkcmVzcywgYXNzZXQ6IHVpbnQ2NCwgYW1vdW50OiB1aW50NjQpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAmJgogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AgJiYgY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYiBwYXkKCm1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9wYXkvY29udHJhY3QuYWxnby50czo1CiAgICAvLyBleHBvcnQgY2xhc3MgUGF5UGx1Z2luIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4gLy8gb24gZXJyb3I6IE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AgJiYgY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCgoKLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL3BsdWdpbnMudHM6OnJla2V5QWRkcmVzcyhyZWtleUJhY2s6IHVpbnQ2NCwgd2FsbGV0OiB1aW50NjQpIC0+IGJ5dGVzOgpyZWtleUFkZHJlc3M6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvcGx1Z2lucy50czo0MQogICAgLy8gZXhwb3J0IGZ1bmN0aW9uIHJla2V5QWRkcmVzcyhyZWtleUJhY2s6IGJvb2xlYW4sIHdhbGxldDogQXBwbGljYXRpb24pOiBBY2NvdW50IHsKICAgIHByb3RvIDIgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL3BsdWdpbnMudHM6NDIKICAgIC8vIGlmICghcmVrZXlCYWNrKSB7CiAgICBmcmFtZV9kaWcgLTIKICAgIGJueiByZWtleUFkZHJlc3NfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvcGx1Z2lucy50czo0MwogICAgLy8gcmV0dXJuIEdsb2JhbC56ZXJvQWRkcmVzcwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICByZXRzdWIKCnJla2V5QWRkcmVzc19hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvcGx1Z2lucy50czo0NgogICAgLy8gcmV0dXJuIHdhbGxldC5hZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL3BheS9jb250cmFjdC5hbGdvLnRzOjpQYXlQbHVnaW4ucGF5W3JvdXRpbmddKCkgLT4gdm9pZDoKcGF5OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvcGF5L2NvbnRyYWN0LmFsZ28udHM6NwogICAgLy8gcGF5KHdhbGxldDogQXBwbGljYXRpb24sIHJla2V5QmFjazogYm9vbGVhbiwgcmVjZWl2ZXI6IEFkZHJlc3MsIGFzc2V0OiB1aW50NjQsIGFtb3VudDogdWludDY0KTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGJvb2w4CiAgICBpbnRjXzIgLy8gMAogICAgZ2V0Yml0CiAgICBjb3ZlciAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGNvdmVyIDQKICAgIGxlbgogICAgcHVzaGludCAzMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDhbMzJdCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICBjb3ZlciA0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgY292ZXIgNAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL3BsdWdpbnMudHM6MzQtMzcKICAgIC8vIGNvbnN0IFtzcGVuZGluZ0FkZHJlc3NCeXRlc10gPSBvcC5BcHBHbG9iYWwuZ2V0RXhCeXRlcygKICAgIC8vICAgd2FsbGV0LAogICAgLy8gICBCeXRlcyhBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNTcGVuZGluZ0FkZHJlc3MpCiAgICAvLyApCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvcGx1Z2lucy50czozNgogICAgLy8gQnl0ZXMoQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzU3BlbmRpbmdBZGRyZXNzKQogICAgcHVzaGJ5dGVzICJzcGVuZGluZ19hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL3BsdWdpbnMudHM6MzQtMzcKICAgIC8vIGNvbnN0IFtzcGVuZGluZ0FkZHJlc3NCeXRlc10gPSBvcC5BcHBHbG9iYWwuZ2V0RXhCeXRlcygKICAgIC8vICAgd2FsbGV0LAogICAgLy8gICBCeXRlcyhBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNTcGVuZGluZ0FkZHJlc3MpCiAgICAvLyApCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgcG9wCiAgICBjb3ZlciAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9wYXkvY29udHJhY3QuYWxnby50czoxMAogICAgLy8gaWYgKGFzc2V0ID09PSAwKSB7CiAgICBibnogcGF5X2Vsc2VfYm9keUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9wYXkvY29udHJhY3QuYWxnby50czoxMS0xOAogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyLAogICAgLy8gICAgIHJlY2VpdmVyOiByZWNlaXZlci5uYXRpdmUsCiAgICAvLyAgICAgYW1vdW50LAogICAgLy8gICAgIHJla2V5VG86IHJla2V5QWRkcmVzcyhyZWtleUJhY2ssIHdhbGxldCkKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9wYXkvY29udHJhY3QuYWxnby50czoxNgogICAgLy8gcmVrZXlUbzogcmVrZXlBZGRyZXNzKHJla2V5QmFjaywgd2FsbGV0KQogICAgY2FsbHN1YiByZWtleUFkZHJlc3MKICAgIGl0eG5fZmllbGQgUmVrZXlUbwogICAgZGlnIDEKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBkaWcgMwogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgZHVwCiAgICBpdHhuX2ZpZWxkIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvcGF5L2NvbnRyYWN0LmFsZ28udHM6MTEtMTcKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlciwKICAgIC8vICAgICByZWNlaXZlcjogcmVjZWl2ZXIubmF0aXZlLAogICAgLy8gICAgIGFtb3VudCwKICAgIC8vICAgICByZWtleVRvOiByZWtleUFkZHJlc3MocmVrZXlCYWNrLCB3YWxsZXQpCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18yIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9wYXkvY29udHJhY3QuYWxnby50czoxMS0xOAogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyLAogICAgLy8gICAgIHJlY2VpdmVyOiByZWNlaXZlci5uYXRpdmUsCiAgICAvLyAgICAgYW1vdW50LAogICAgLy8gICAgIHJla2V5VG86IHJla2V5QWRkcmVzcyhyZWtleUJhY2ssIHdhbGxldCkKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAoKcGF5X2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL3BheS9jb250cmFjdC5hbGdvLnRzOjcKICAgIC8vIHBheSh3YWxsZXQ6IEFwcGxpY2F0aW9uLCByZWtleUJhY2s6IGJvb2xlYW4sIHJlY2VpdmVyOiBBZGRyZXNzLCBhc3NldDogdWludDY0LCBhbW91bnQ6IHVpbnQ2NCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKcGF5X2Vsc2VfYm9keUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvcGF5L2NvbnRyYWN0LmFsZ28udHM6MjAtMjgKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIHNlbmRlciwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiByZWNlaXZlci5uYXRpdmUsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IGFtb3VudCwKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIHJla2V5VG86IHJla2V5QWRkcmVzcyhyZWtleUJhY2ssIHdhbGxldCkKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9wYXkvY29udHJhY3QuYWxnby50czoyNgogICAgLy8gcmVrZXlUbzogcmVrZXlBZGRyZXNzKHJla2V5QmFjaywgd2FsbGV0KQogICAgY2FsbHN1YiByZWtleUFkZHJlc3MKICAgIGl0eG5fZmllbGQgUmVrZXlUbwogICAgZGlnIDIKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBkaWcgMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZGlnIDMKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZHVwCiAgICBpdHhuX2ZpZWxkIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvcGF5L2NvbnRyYWN0LmFsZ28udHM6MjAtMjcKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIHNlbmRlciwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiByZWNlaXZlci5uYXRpdmUsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IGFtb3VudCwKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIHJla2V5VG86IHJla2V5QWRkcmVzcyhyZWtleUJhY2ssIHdhbGxldCkKICAgIC8vICAgfSkKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzIgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL3BheS9jb250cmFjdC5hbGdvLnRzOjIwLTI4CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBzZW5kZXIsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIubmF0aXZlLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiBhbW91bnQsCiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICByZWtleVRvOiByZWtleUFkZHJlc3MocmVrZXlCYWNrLCB3YWxsZXQpCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGIgcGF5X2FmdGVyX2lmX2Vsc2VANgo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CyADCAEAMRtBABiABJPViLk2GgCOAQABADEZFDEYEERCABkxGRQxGBQQQ4oCAYv+QAADMgOJi/9yCESJNhoBSRUiEkQXSTYaAkkVIxJEJFNOAjYaA0lOBBWBIBJENhoESRUiEkQXSU4ENhoFSRUiEkQXTgRMgBBzcGVuZGluZ19hZGRyZXNzZUhOA0AAGrGI/5myIEsBsghLA7IHSbIAI7IQJLIBsyNDsYj/f7IgSwKyEUsBshJLA7IUSbIAgQSyECSyAbNC/94=", + "clear": "C4EBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 5, + "minor": 2, + "patch": 0 + } + }, + "events": [], + "templateVariables": {} +} \ No newline at end of file diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/pay/PayPlugin.clear.puya.map b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/pay/PayPlugin.clear.puya.map new file mode 100644 index 000000000..bf29998bd --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/pay/PayPlugin.clear.puya.map @@ -0,0 +1,25 @@ +{ + "version": 3, + "sources": [], + "mappings": ";;;", + "op_pc_offset": 0, + "pc_events": { + "1": { + "subroutine": "@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram", + "params": {}, + "block": "main", + "stack_in": [], + "op": "pushint 1 // 1", + "defined_out": [ + "1" + ], + "stack_out": [ + "1" + ] + }, + "3": { + "op": "return", + "stack_out": [] + } + } +} \ No newline at end of file diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/pay/PayPlugin.clear.teal b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/pay/PayPlugin.clear.teal new file mode 100644 index 000000000..42f81b0f1 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/pay/PayPlugin.clear.teal @@ -0,0 +1,7 @@ +#pragma version 11 +#pragma typetrack false + +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: + pushint 1 // 1 + return diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/pay/PayPluginClient.ts b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/pay/PayPluginClient.ts new file mode 100644 index 000000000..737fdd9ab --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/pay/PayPluginClient.ts @@ -0,0 +1,572 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^7 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, AppReturn, SendAppTransactionResult } from '@algorandfoundation/algokit-utils/types/app' +import { Arc56Contract, getArc56ReturnValue, getABIStructFromABITuple } from '@algorandfoundation/algokit-utils/types/app-arc56' +import { + AppClient as _AppClient, + AppClientMethodCallParams, + AppClientParams, + AppClientBareCallParams, + CallOnComplete, + AppClientCompilationParams, + ResolveAppClientByCreatorAndName, + ResolveAppClientByNetwork, + CloneAppClientParams, +} from '@algorandfoundation/algokit-utils/types/app-client' +import { AppFactory as _AppFactory, AppFactoryAppClientParams, AppFactoryResolveAppClientByCreatorAndNameParams, AppFactoryDeployParams, AppFactoryParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, AppCallMethodCall, AppMethodCallTransactionArgument, SimulateOptions, RawSimulateOptions, SkipSignaturesSimulateOptions } from '@algorandfoundation/algokit-utils/types/composer' +import { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { Address, encodeAddress, modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk' + +export const APP_SPEC: Arc56Contract = {"name":"PayPlugin","structs":{},"methods":[{"name":"pay","args":[{"type":"uint64","name":"wallet"},{"type":"bool","name":"rekeyBack"},{"type":"address","name":"receiver"},{"type":"uint64","name":"asset"},{"type":"uint64","name":"amount"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":0,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[42],"errorMessage":"OnCompletion must be NoOp && can only call when creating"},{"pc":[31],"errorMessage":"OnCompletion must be NoOp && can only call when not creating"},{"pc":[58],"errorMessage":"application exists"},{"pc":[77],"errorMessage":"invalid number of bytes for bool8"},{"pc":[67,100,112],"errorMessage":"invalid number of bytes for uint64"},{"pc":[92],"errorMessage":"invalid number of bytes for uint8[32]"}],"pcOffsetMethod":"none"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgOCAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL3BheS9jb250cmFjdC5hbGdvLnRzOjUKICAgIC8vIGV4cG9ydCBjbGFzcyBQYXlQbHVnaW4gZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANQogICAgcHVzaGJ5dGVzIDB4OTNkNTg4YjkgLy8gbWV0aG9kICJwYXkodWludDY0LGJvb2wsYWRkcmVzcyx1aW50NjQsdWludDY0KXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX3BheV9yb3V0ZUAzCiAgICBlcnIKCm1haW5fcGF5X3JvdXRlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9wYXkvY29udHJhY3QuYWxnby50czo3CiAgICAvLyBwYXkod2FsbGV0OiBBcHBsaWNhdGlvbiwgcmVrZXlCYWNrOiBib29sZWFuLCByZWNlaXZlcjogQWRkcmVzcywgYXNzZXQ6IHVpbnQ2NCwgYW1vdW50OiB1aW50NjQpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAmJgogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AgJiYgY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYiBwYXkKCm1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9wYXkvY29udHJhY3QuYWxnby50czo1CiAgICAvLyBleHBvcnQgY2xhc3MgUGF5UGx1Z2luIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4gLy8gb24gZXJyb3I6IE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AgJiYgY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCgoKLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL3BsdWdpbnMudHM6OnJla2V5QWRkcmVzcyhyZWtleUJhY2s6IHVpbnQ2NCwgd2FsbGV0OiB1aW50NjQpIC0+IGJ5dGVzOgpyZWtleUFkZHJlc3M6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvcGx1Z2lucy50czo0MQogICAgLy8gZXhwb3J0IGZ1bmN0aW9uIHJla2V5QWRkcmVzcyhyZWtleUJhY2s6IGJvb2xlYW4sIHdhbGxldDogQXBwbGljYXRpb24pOiBBY2NvdW50IHsKICAgIHByb3RvIDIgMQogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL3BsdWdpbnMudHM6NDIKICAgIC8vIGlmICghcmVrZXlCYWNrKSB7CiAgICBmcmFtZV9kaWcgLTIKICAgIGJueiByZWtleUFkZHJlc3NfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvcGx1Z2lucy50czo0MwogICAgLy8gcmV0dXJuIEdsb2JhbC56ZXJvQWRkcmVzcwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICByZXRzdWIKCnJla2V5QWRkcmVzc19hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvcGx1Z2lucy50czo0NgogICAgLy8gcmV0dXJuIHdhbGxldC5hZGRyZXNzCiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL3BheS9jb250cmFjdC5hbGdvLnRzOjpQYXlQbHVnaW4ucGF5W3JvdXRpbmddKCkgLT4gdm9pZDoKcGF5OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvcGF5L2NvbnRyYWN0LmFsZ28udHM6NwogICAgLy8gcGF5KHdhbGxldDogQXBwbGljYXRpb24sIHJla2V5QmFjazogYm9vbGVhbiwgcmVjZWl2ZXI6IEFkZHJlc3MsIGFzc2V0OiB1aW50NjQsIGFtb3VudDogdWludDY0KTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGJvb2w4CiAgICBpbnRjXzIgLy8gMAogICAgZ2V0Yml0CiAgICBjb3ZlciAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGNvdmVyIDQKICAgIGxlbgogICAgcHVzaGludCAzMiAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgdWludDhbMzJdCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICBjb3ZlciA0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgY292ZXIgNAogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL3BsdWdpbnMudHM6MzQtMzcKICAgIC8vIGNvbnN0IFtzcGVuZGluZ0FkZHJlc3NCeXRlc10gPSBvcC5BcHBHbG9iYWwuZ2V0RXhCeXRlcygKICAgIC8vICAgd2FsbGV0LAogICAgLy8gICBCeXRlcyhBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNTcGVuZGluZ0FkZHJlc3MpCiAgICAvLyApCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvcGx1Z2lucy50czozNgogICAgLy8gQnl0ZXMoQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzU3BlbmRpbmdBZGRyZXNzKQogICAgcHVzaGJ5dGVzICJzcGVuZGluZ19hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL3BsdWdpbnMudHM6MzQtMzcKICAgIC8vIGNvbnN0IFtzcGVuZGluZ0FkZHJlc3NCeXRlc10gPSBvcC5BcHBHbG9iYWwuZ2V0RXhCeXRlcygKICAgIC8vICAgd2FsbGV0LAogICAgLy8gICBCeXRlcyhBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNTcGVuZGluZ0FkZHJlc3MpCiAgICAvLyApCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgcG9wCiAgICBjb3ZlciAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9wYXkvY29udHJhY3QuYWxnby50czoxMAogICAgLy8gaWYgKGFzc2V0ID09PSAwKSB7CiAgICBibnogcGF5X2Vsc2VfYm9keUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9wYXkvY29udHJhY3QuYWxnby50czoxMS0xOAogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyLAogICAgLy8gICAgIHJlY2VpdmVyOiByZWNlaXZlci5uYXRpdmUsCiAgICAvLyAgICAgYW1vdW50LAogICAgLy8gICAgIHJla2V5VG86IHJla2V5QWRkcmVzcyhyZWtleUJhY2ssIHdhbGxldCkKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9wYXkvY29udHJhY3QuYWxnby50czoxNgogICAgLy8gcmVrZXlUbzogcmVrZXlBZGRyZXNzKHJla2V5QmFjaywgd2FsbGV0KQogICAgY2FsbHN1YiByZWtleUFkZHJlc3MKICAgIGl0eG5fZmllbGQgUmVrZXlUbwogICAgZGlnIDEKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBkaWcgMwogICAgaXR4bl9maWVsZCBSZWNlaXZlcgogICAgZHVwCiAgICBpdHhuX2ZpZWxkIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvcGF5L2NvbnRyYWN0LmFsZ28udHM6MTEtMTcKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlciwKICAgIC8vICAgICByZWNlaXZlcjogcmVjZWl2ZXIubmF0aXZlLAogICAgLy8gICAgIGFtb3VudCwKICAgIC8vICAgICByZWtleVRvOiByZWtleUFkZHJlc3MocmVrZXlCYWNrLCB3YWxsZXQpCiAgICAvLyAgIH0pCiAgICBpbnRjXzEgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18yIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9wYXkvY29udHJhY3QuYWxnby50czoxMS0xOAogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyLAogICAgLy8gICAgIHJlY2VpdmVyOiByZWNlaXZlci5uYXRpdmUsCiAgICAvLyAgICAgYW1vdW50LAogICAgLy8gICAgIHJla2V5VG86IHJla2V5QWRkcmVzcyhyZWtleUJhY2ssIHdhbGxldCkKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX3N1Ym1pdAoKcGF5X2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL3BheS9jb250cmFjdC5hbGdvLnRzOjcKICAgIC8vIHBheSh3YWxsZXQ6IEFwcGxpY2F0aW9uLCByZWtleUJhY2s6IGJvb2xlYW4sIHJlY2VpdmVyOiBBZGRyZXNzLCBhc3NldDogdWludDY0LCBhbW91bnQ6IHVpbnQ2NCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKcGF5X2Vsc2VfYm9keUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvcGF5L2NvbnRyYWN0LmFsZ28udHM6MjAtMjgKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIHNlbmRlciwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiByZWNlaXZlci5uYXRpdmUsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IGFtb3VudCwKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIHJla2V5VG86IHJla2V5QWRkcmVzcyhyZWtleUJhY2ssIHdhbGxldCkKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpCiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9wYXkvY29udHJhY3QuYWxnby50czoyNgogICAgLy8gcmVrZXlUbzogcmVrZXlBZGRyZXNzKHJla2V5QmFjaywgd2FsbGV0KQogICAgY2FsbHN1YiByZWtleUFkZHJlc3MKICAgIGl0eG5fZmllbGQgUmVrZXlUbwogICAgZGlnIDIKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBkaWcgMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZGlnIDMKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZHVwCiAgICBpdHhuX2ZpZWxkIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvcGF5L2NvbnRyYWN0LmFsZ28udHM6MjAtMjcKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIHNlbmRlciwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiByZWNlaXZlci5uYXRpdmUsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IGFtb3VudCwKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIHJla2V5VG86IHJla2V5QWRkcmVzcyhyZWtleUJhY2ssIHdhbGxldCkKICAgIC8vICAgfSkKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzIgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL3BheS9jb250cmFjdC5hbGdvLnRzOjIwLTI4CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICBzZW5kZXIsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIubmF0aXZlLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiBhbW91bnQsCiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICByZWtleVRvOiByZWtleUFkZHJlc3MocmVrZXlCYWNrLCB3YWxsZXQpCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKQogICAgaXR4bl9zdWJtaXQKICAgIGIgcGF5X2FmdGVyX2lmX2Vsc2VANgo=","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CyADCAEAMRtBABiABJPViLk2GgCOAQABADEZFDEYEERCABkxGRQxGBQQQ4oCAYv+QAADMgOJi/9yCESJNhoBSRUiEkQXSTYaAkkVIxJEJFNOAjYaA0lOBBWBIBJENhoESRUiEkQXSU4ENhoFSRUiEkQXTgRMgBBzcGVuZGluZ19hZGRyZXNzZUhOA0AAGrGI/5myIEsBsghLA7IHSbIAI7IQJLIBsyNDsYj/f7IgSwKyEUsBshJLA7IUSbIAgQSyECSyAbNC/94=","clear":"C4EBQw=="},"events":[],"templateVariables":{}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * The argument types for the PayPlugin contract + */ +export type PayPluginArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'pay(uint64,bool,address,uint64,uint64)void': { + wallet: bigint | number + rekeyBack: boolean + receiver: string + asset: bigint | number + amount: bigint | number + } + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'pay(uint64,bool,address,uint64,uint64)void': [wallet: bigint | number, rekeyBack: boolean, receiver: string, asset: bigint | number, amount: bigint | number] + } +} + +/** + * The return type for each method + */ +export type PayPluginReturns = { + 'pay(uint64,bool,address,uint64,uint64)void': void +} + +/** + * Defines the types of available calls and state of the PayPlugin smart contract. + */ +export type PayPluginTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'pay(uint64,bool,address,uint64,uint64)void' | 'pay', { + argsObj: PayPluginArgs['obj']['pay(uint64,bool,address,uint64,uint64)void'] + argsTuple: PayPluginArgs['tuple']['pay(uint64,bool,address,uint64,uint64)void'] + returns: PayPluginReturns['pay(uint64,bool,address,uint64,uint64)void'] + }> +} + +/** + * Defines the possible abi call signatures. + */ +export type PayPluginSignatures = keyof PayPluginTypes['methods'] +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the PayPlugin smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = PayPluginTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the PayPlugin smart contract to the method's return type + */ +export type MethodReturn = PayPluginTypes['methods'][TSignature]['returns'] + + +/** + * Defines supported create method params for this smart contract + */ +export type PayPluginCreateCallParams = + | Expand +/** + * Defines arguments required for the deploy method. + */ +export type PayPluginDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: PayPluginCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the PayPlugin smart contract + */ +export abstract class PayPluginParamsFactory { + /** + * Constructs a no op call for the pay(uint64,bool,address,uint64,uint64)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static pay(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'pay(uint64,bool,address,uint64,uint64)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.wallet, params.args.rekeyBack, params.args.receiver, params.args.asset, params.args.amount], + } + } +} + +/** + * A factory to create and deploy one or more instance of the PayPlugin smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class PayPluginFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `PayPluginFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new PayPluginClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new PayPluginClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the PayPlugin smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: PayPluginDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + }) + return { result: result.result, appClient: new PayPluginClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the PayPlugin smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the PayPlugin smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the PayPlugin smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new PayPluginClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the PayPlugin smart contract + */ +export class PayPluginClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `PayPluginClient` + * + * @param appClient An `AppClient` instance which has been created with the PayPlugin app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `PayPluginClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `PayPluginClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new PayPluginClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `PayPluginClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new PayPluginClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Makes a clear_state call to an existing instance of the PayPlugin smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the PayPlugin smart contract using the `pay(uint64,bool,address,uint64,uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + pay: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(PayPluginParamsFactory.pay(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Makes a clear_state call to an existing instance of the PayPlugin smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the PayPlugin smart contract using the `pay(uint64,bool,address,uint64,uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + pay: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(PayPluginParamsFactory.pay(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Makes a clear_state call to an existing instance of the PayPlugin smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the PayPlugin smart contract using the `pay(uint64,bool,address,uint64,uint64)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + pay: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(PayPluginParamsFactory.pay(params)) + return {...result, return: result.return as unknown as (undefined | PayPluginReturns['pay(uint64,bool,address,uint64,uint64)void'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new PayPluginClient(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current PayPlugin app + */ + state = { + } + + public newGroup(): PayPluginComposer { + const client = this + const composer = this.algorand.newGroup() + let promiseChain:Promise = Promise.resolve() + const resultMappers: Array any)> = [] + return { + /** + * Add a pay(uint64,bool,address,uint64,uint64)void method call against the PayPlugin contract + */ + pay(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.pay(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a clear state call to the PayPlugin contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue) + } + } + } as unknown as PayPluginComposer + } +} +export type PayPluginComposer = { + /** + * Calls the pay(uint64,bool,address,uint64,uint64)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + pay(params?: CallParams): PayPluginComposer<[...TReturns, PayPluginReturns['pay(uint64,bool,address,uint64,uint64)void'] | undefined]> + + /** + * Makes a clear_state call to an existing instance of the PayPlugin smart contract. + * + * @param args The arguments for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): PayPluginComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): PayPluginComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: modelsv2.SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: modelsv2.SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: modelsv2.SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type PayPluginComposerResults = Expand + diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/subscription/SubscriptionPlugin.approval.puya.map b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/subscription/SubscriptionPlugin.approval.puya.map new file mode 100644 index 000000000..af432afb9 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/subscription/SubscriptionPlugin.approval.puya.map @@ -0,0 +1,915 @@ +{ + "version": 3, + "sources": [ + "../../../plugins/subscription/contract.algo.ts", + "../../../utils/plugins.ts" + ], + "mappings": ";;;;;AAWE;AAAkD;AAAlD;AAFF;;AAAA;;;AAAA;;;;;;AAAA;;;AAAA;;;;AAAA;AAIE;;AAAA;AAAA;;AAAA;AAAA;AAAA;;;AAJF;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAIE;;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AAAA;AAAA;;AAAA;AAAA;ACoB+B;AAEvB;;;;;;;;;;;;;;;;;;AAFuB;AAAA;AAAA;ADZtB;;AAAe;AAVxB;AAUwB;AAAA;AAAf;AAAwC;AAAxC;AAAP;AAVF;AAW2B;;AAAzB;AAEA;AAGY;AAAA;ACcV;;;AACK;;;;ADde;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAJtB;;;AAAA;;;AAAA;AAXF;AAAA;ACgCO;;AAAA;;AAAA;ADhBQ", + "op_pc_offset": 2, + "pc_events": { + "0": { + "op": "txn ApplicationID", + "defined_out": [ + "reinterpret_bool%0#0" + ], + "stack_out": [ + "reinterpret_bool%0#0" + ] + }, + "2": { + "op": "bnz main_after_if_else@2", + "stack_out": [] + }, + "5": { + "op": "bytec_0 // \"lastPayment\"", + "defined_out": [ + "\"lastPayment\"" + ], + "stack_out": [ + "\"lastPayment\"" + ] + }, + "6": { + "op": "intc_0 // 0", + "defined_out": [ + "\"lastPayment\"", + "0" + ], + "stack_out": [ + "\"lastPayment\"", + "0" + ] + }, + "7": { + "op": "app_global_put", + "stack_out": [] + }, + "8": { + "block": "main_after_if_else@2", + "stack_in": [], + "op": "txn NumAppArgs", + "defined_out": [ + "tmp%0#1" + ], + "stack_out": [ + "tmp%0#1" + ] + }, + "10": { + "op": "bz main___algots__.defaultCreate@7", + "stack_out": [] + }, + "13": { + "op": "pushbytes 0xb060ba58 // method \"makePayment(uint64,bool,address)void\"", + "defined_out": [ + "Method(makePayment(uint64,bool,address)void)" + ], + "stack_out": [ + "Method(makePayment(uint64,bool,address)void)" + ] + }, + "19": { + "op": "txna ApplicationArgs 0", + "defined_out": [ + "Method(makePayment(uint64,bool,address)void)", + "tmp%2#0" + ], + "stack_out": [ + "Method(makePayment(uint64,bool,address)void)", + "tmp%2#0" + ] + }, + "22": { + "op": "match main_makePayment_route@5", + "stack_out": [] + }, + "26": { + "op": "err" + }, + "27": { + "block": "main_makePayment_route@5", + "stack_in": [], + "op": "txn OnCompletion", + "defined_out": [ + "tmp%3#0" + ], + "stack_out": [ + "tmp%3#0" + ] + }, + "29": { + "op": "!", + "defined_out": [ + "tmp%4#0" + ], + "stack_out": [ + "tmp%4#0" + ] + }, + "30": { + "op": "txn ApplicationID", + "defined_out": [ + "tmp%4#0", + "tmp%5#0" + ], + "stack_out": [ + "tmp%4#0", + "tmp%5#0" + ] + }, + "32": { + "op": "&&", + "defined_out": [ + "tmp%7#0" + ], + "stack_out": [ + "tmp%7#0" + ] + }, + "33": { + "error": "OnCompletion must be NoOp && can only call when not creating", + "op": "assert // OnCompletion must be NoOp && can only call when not creating", + "stack_out": [] + }, + "34": { + "op": "b makePayment" + }, + "37": { + "block": "main___algots__.defaultCreate@7", + "stack_in": [], + "op": "txn OnCompletion", + "defined_out": [ + "tmp%8#0" + ], + "stack_out": [ + "tmp%8#0" + ] + }, + "39": { + "op": "!", + "defined_out": [ + "tmp%9#0" + ], + "stack_out": [ + "tmp%9#0" + ] + }, + "40": { + "op": "txn ApplicationID", + "defined_out": [ + "tmp%10#0", + "tmp%9#0" + ], + "stack_out": [ + "tmp%9#0", + "tmp%10#0" + ] + }, + "42": { + "op": "!", + "defined_out": [ + "tmp%11#0", + "tmp%9#0" + ], + "stack_out": [ + "tmp%9#0", + "tmp%11#0" + ] + }, + "43": { + "op": "&&", + "defined_out": [ + "tmp%12#0" + ], + "stack_out": [ + "tmp%12#0" + ] + }, + "44": { + "error": "OnCompletion must be NoOp && can only call when creating", + "op": "return // on error: OnCompletion must be NoOp && can only call when creating", + "defined_out": [], + "stack_out": [] + }, + "45": { + "subroutine": "smart_contracts/plugins/subscription/contract.algo.ts::SubscriptionPlugin.makePayment[routing]", + "params": {}, + "block": "makePayment", + "stack_in": [], + "op": "txna ApplicationArgs 1", + "defined_out": [ + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0" + ] + }, + "48": { + "op": "dup", + "defined_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ], + "stack_out": [ + "tmp%0#0", + "tmp%0#0 (copy)" + ] + }, + "49": { + "op": "len", + "defined_out": [ + "len%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "len%0#0" + ] + }, + "50": { + "op": "pushint 8 // 8", + "defined_out": [ + "8", + "len%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "len%0#0", + "8" + ] + }, + "52": { + "op": "==", + "defined_out": [ + "eq%0#0", + "tmp%0#0" + ], + "stack_out": [ + "tmp%0#0", + "eq%0#0" + ] + }, + "53": { + "error": "invalid number of bytes for uint64", + "op": "assert // invalid number of bytes for uint64", + "stack_out": [ + "tmp%0#0" + ] + }, + "54": { + "op": "btoi", + "defined_out": [ + "wallet#0" + ], + "stack_out": [ + "wallet#0" + ] + }, + "55": { + "op": "dup", + "defined_out": [ + "wallet#0" + ], + "stack_out": [ + "wallet#0", + "wallet#0" + ] + }, + "56": { + "op": "txna ApplicationArgs 2", + "defined_out": [ + "tmp%2#0", + "wallet#0" + ], + "stack_out": [ + "wallet#0", + "wallet#0", + "tmp%2#0" + ] + }, + "59": { + "op": "dup", + "defined_out": [ + "tmp%2#0", + "tmp%2#0 (copy)", + "wallet#0" + ], + "stack_out": [ + "wallet#0", + "wallet#0", + "tmp%2#0", + "tmp%2#0 (copy)" + ] + }, + "60": { + "op": "len", + "defined_out": [ + "len%1#0", + "tmp%2#0", + "wallet#0" + ], + "stack_out": [ + "wallet#0", + "wallet#0", + "tmp%2#0", + "len%1#0" + ] + }, + "61": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "len%1#0", + "tmp%2#0", + "wallet#0" + ], + "stack_out": [ + "wallet#0", + "wallet#0", + "tmp%2#0", + "len%1#0", + "1" + ] + }, + "62": { + "op": "==", + "defined_out": [ + "eq%1#0", + "tmp%2#0", + "wallet#0" + ], + "stack_out": [ + "wallet#0", + "wallet#0", + "tmp%2#0", + "eq%1#0" + ] + }, + "63": { + "error": "invalid number of bytes for bool8", + "op": "assert // invalid number of bytes for bool8", + "stack_out": [ + "wallet#0", + "wallet#0", + "tmp%2#0" + ] + }, + "64": { + "op": "intc_0 // 0", + "stack_out": [ + "wallet#0", + "wallet#0", + "tmp%2#0", + "0" + ] + }, + "65": { + "op": "getbit", + "defined_out": [ + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "wallet#0", + "wallet#0", + "rekeyBack#0" + ] + }, + "66": { + "op": "txna ApplicationArgs 3", + "defined_out": [ + "_acctRef#0", + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "wallet#0", + "wallet#0", + "rekeyBack#0", + "_acctRef#0" + ] + }, + "69": { + "op": "len", + "defined_out": [ + "len%2#0", + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "wallet#0", + "wallet#0", + "rekeyBack#0", + "len%2#0" + ] + }, + "70": { + "op": "pushint 32 // 32", + "defined_out": [ + "32", + "len%2#0", + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "wallet#0", + "wallet#0", + "rekeyBack#0", + "len%2#0", + "32" + ] + }, + "72": { + "op": "==", + "defined_out": [ + "eq%2#0", + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "wallet#0", + "wallet#0", + "rekeyBack#0", + "eq%2#0" + ] + }, + "73": { + "error": "invalid number of bytes for uint8[32]", + "op": "assert // invalid number of bytes for uint8[32]", + "stack_out": [ + "wallet#0", + "wallet#0", + "rekeyBack#0" + ] + }, + "74": { + "op": "swap", + "stack_out": [ + "wallet#0", + "rekeyBack#0", + "wallet#0" + ] + }, + "75": { + "op": "pushbytes \"spending_address\"", + "defined_out": [ + "\"spending_address\"", + "rekeyBack#0", + "wallet#0" + ], + "stack_out": [ + "wallet#0", + "rekeyBack#0", + "wallet#0", + "\"spending_address\"" + ] + }, + "93": { + "op": "app_global_get_ex", + "defined_out": [ + "awst_tmp%1#0", + "rekeyBack#0", + "spendingAddressBytes#0", + "wallet#0" + ], + "stack_out": [ + "wallet#0", + "rekeyBack#0", + "spendingAddressBytes#0", + "awst_tmp%1#0" + ] + }, + "94": { + "op": "pop", + "stack_out": [ + "wallet#0", + "rekeyBack#0", + "spendingAddressBytes#0" + ] + }, + "95": { + "op": "swap", + "defined_out": [ + "rekeyBack#0", + "spendingAddressBytes#0", + "wallet#0" + ], + "stack_out": [ + "wallet#0", + "spendingAddressBytes#0", + "rekeyBack#0" + ] + }, + "96": { + "op": "global Round", + "defined_out": [ + "rekeyBack#0", + "spendingAddressBytes#0", + "tmp%1#1", + "wallet#0" + ], + "stack_out": [ + "wallet#0", + "spendingAddressBytes#0", + "rekeyBack#0", + "tmp%1#1" + ] + }, + "98": { + "op": "intc_0 // 0", + "stack_out": [ + "wallet#0", + "spendingAddressBytes#0", + "rekeyBack#0", + "tmp%1#1", + "0" + ] + }, + "99": { + "op": "bytec_0 // \"lastPayment\"", + "defined_out": [ + "\"lastPayment\"", + "0", + "rekeyBack#0", + "spendingAddressBytes#0", + "tmp%1#1", + "wallet#0" + ], + "stack_out": [ + "wallet#0", + "spendingAddressBytes#0", + "rekeyBack#0", + "tmp%1#1", + "0", + "\"lastPayment\"" + ] + }, + "100": { + "op": "app_global_get_ex", + "defined_out": [ + "maybe_exists%0#0", + "maybe_value%0#0", + "rekeyBack#0", + "spendingAddressBytes#0", + "tmp%1#1", + "wallet#0" + ], + "stack_out": [ + "wallet#0", + "spendingAddressBytes#0", + "rekeyBack#0", + "tmp%1#1", + "maybe_value%0#0", + "maybe_exists%0#0" + ] + }, + "101": { + "error": "check GlobalState exists", + "op": "assert // check GlobalState exists", + "stack_out": [ + "wallet#0", + "spendingAddressBytes#0", + "rekeyBack#0", + "tmp%1#1", + "maybe_value%0#0" + ] + }, + "102": { + "op": "-", + "defined_out": [ + "rekeyBack#0", + "spendingAddressBytes#0", + "tmp%2#1", + "wallet#0" + ], + "stack_out": [ + "wallet#0", + "spendingAddressBytes#0", + "rekeyBack#0", + "tmp%2#1" + ] + }, + "103": { + "op": "intc_2 // TMPL_FREQUENCY", + "defined_out": [ + "TMPL_FREQUENCY", + "rekeyBack#0", + "spendingAddressBytes#0", + "tmp%2#1", + "wallet#0" + ], + "stack_out": [ + "wallet#0", + "spendingAddressBytes#0", + "rekeyBack#0", + "tmp%2#1", + "TMPL_FREQUENCY" + ] + }, + "104": { + "op": ">", + "defined_out": [ + "rekeyBack#0", + "spendingAddressBytes#0", + "tmp%3#1", + "wallet#0" + ], + "stack_out": [ + "wallet#0", + "spendingAddressBytes#0", + "rekeyBack#0", + "tmp%3#1" + ] + }, + "105": { + "op": "assert", + "stack_out": [ + "wallet#0", + "spendingAddressBytes#0", + "rekeyBack#0" + ] + }, + "106": { + "op": "bytec_0 // \"lastPayment\"", + "stack_out": [ + "wallet#0", + "spendingAddressBytes#0", + "rekeyBack#0", + "\"lastPayment\"" + ] + }, + "107": { + "op": "global Round", + "defined_out": [ + "\"lastPayment\"", + "rekeyBack#0", + "spendingAddressBytes#0", + "tmp%4#1", + "wallet#0" + ], + "stack_out": [ + "wallet#0", + "spendingAddressBytes#0", + "rekeyBack#0", + "\"lastPayment\"", + "tmp%4#1" + ] + }, + "109": { + "op": "app_global_put", + "stack_out": [ + "wallet#0", + "spendingAddressBytes#0", + "rekeyBack#0" + ] + }, + "110": { + "op": "itxn_begin" + }, + "111": { + "op": "intc_3 // TMPL_AMOUNT", + "defined_out": [ + "inner_txn_params%0%%param_Amount_idx_0#0", + "rekeyBack#0", + "spendingAddressBytes#0", + "wallet#0" + ], + "stack_out": [ + "wallet#0", + "spendingAddressBytes#0", + "rekeyBack#0", + "inner_txn_params%0%%param_Amount_idx_0#0" + ] + }, + "112": { + "op": "swap", + "defined_out": [ + "inner_txn_params%0%%param_Amount_idx_0#0", + "rekeyBack#0", + "spendingAddressBytes#0", + "wallet#0" + ], + "stack_out": [ + "wallet#0", + "spendingAddressBytes#0", + "inner_txn_params%0%%param_Amount_idx_0#0", + "rekeyBack#0" + ] + }, + "113": { + "op": "bnz makePayment_after_if_else@5", + "stack_out": [ + "wallet#0", + "spendingAddressBytes#0", + "inner_txn_params%0%%param_Amount_idx_0#0" + ] + }, + "116": { + "op": "global ZeroAddress", + "defined_out": [ + "inner_txn_params%0%%param_Amount_idx_0#0", + "inner_txn_params%0%%param_RekeyTo_idx_0#0", + "spendingAddressBytes#0", + "wallet#0" + ], + "stack_out": [ + "wallet#0", + "spendingAddressBytes#0", + "inner_txn_params%0%%param_Amount_idx_0#0", + "inner_txn_params%0%%param_RekeyTo_idx_0#0" + ] + }, + "118": { + "block": "makePayment_after_inlined_smart_contracts/utils/plugins.ts::rekeyAddress@6", + "stack_in": [ + "wallet#0", + "spendingAddressBytes#0", + "inner_txn_params%0%%param_Amount_idx_0#0", + "inner_txn_params%0%%param_RekeyTo_idx_0#0" + ], + "op": "itxn_field RekeyTo", + "defined_out": [], + "stack_out": [ + "wallet#0", + "spendingAddressBytes#0", + "inner_txn_params%0%%param_Amount_idx_0#0" + ] + }, + "120": { + "op": "pushbytes base32(46XYR7OTRZXISI2TRSBDWPUVQT4ECBWNI7TFWPPS6EKAPJ7W5OBQ)", + "defined_out": [ + "46XYR7OTRZXISI2TRSBDWPUVQT4ECBWNI7TFWPPS6EKAPJ7W5OBQ" + ], + "stack_out": [ + "wallet#0", + "spendingAddressBytes#0", + "inner_txn_params%0%%param_Amount_idx_0#0", + "46XYR7OTRZXISI2TRSBDWPUVQT4ECBWNI7TFWPPS6EKAPJ7W5OBQ" + ] + }, + "154": { + "op": "itxn_field Receiver", + "stack_out": [ + "wallet#0", + "spendingAddressBytes#0", + "inner_txn_params%0%%param_Amount_idx_0#0" + ] + }, + "156": { + "op": "dup", + "defined_out": [ + "inner_txn_params%0%%param_Amount_idx_0#0" + ], + "stack_out": [ + "wallet#0", + "spendingAddressBytes#0", + "inner_txn_params%0%%param_Amount_idx_0#0", + "inner_txn_params%0%%param_Amount_idx_0#0" + ] + }, + "157": { + "op": "itxn_field Amount", + "stack_out": [ + "wallet#0", + "spendingAddressBytes#0", + "inner_txn_params%0%%param_Amount_idx_0#0" + ] + }, + "159": { + "op": "dig 1", + "defined_out": [ + "inner_txn_params%0%%param_Amount_idx_0#0", + "spendingAddressBytes#0" + ], + "stack_out": [ + "wallet#0", + "spendingAddressBytes#0", + "inner_txn_params%0%%param_Amount_idx_0#0", + "spendingAddressBytes#0" + ] + }, + "161": { + "op": "itxn_field Sender", + "stack_out": [ + "wallet#0", + "spendingAddressBytes#0", + "inner_txn_params%0%%param_Amount_idx_0#0" + ] + }, + "163": { + "op": "intc_1 // 1", + "defined_out": [ + "1", + "inner_txn_params%0%%param_Amount_idx_0#0", + "spendingAddressBytes#0" + ], + "stack_out": [ + "wallet#0", + "spendingAddressBytes#0", + "inner_txn_params%0%%param_Amount_idx_0#0", + "1" + ] + }, + "164": { + "op": "itxn_field TypeEnum", + "stack_out": [ + "wallet#0", + "spendingAddressBytes#0", + "inner_txn_params%0%%param_Amount_idx_0#0" + ] + }, + "166": { + "op": "intc_0 // 0", + "defined_out": [ + "0", + "inner_txn_params%0%%param_Amount_idx_0#0", + "spendingAddressBytes#0" + ], + "stack_out": [ + "wallet#0", + "spendingAddressBytes#0", + "inner_txn_params%0%%param_Amount_idx_0#0", + "0" + ] + }, + "167": { + "op": "itxn_field Fee", + "stack_out": [ + "wallet#0", + "spendingAddressBytes#0", + "inner_txn_params%0%%param_Amount_idx_0#0" + ] + }, + "169": { + "op": "itxn_submit" + }, + "170": { + "op": "intc_1 // 1", + "stack_out": [ + "wallet#0", + "spendingAddressBytes#0", + "inner_txn_params%0%%param_Amount_idx_0#0", + "1" + ] + }, + "171": { + "op": "return", + "stack_out": [ + "wallet#0", + "spendingAddressBytes#0", + "inner_txn_params%0%%param_Amount_idx_0#0" + ] + }, + "172": { + "block": "makePayment_after_if_else@5", + "stack_in": [ + "wallet#0", + "spendingAddressBytes#0", + "inner_txn_params%0%%param_Amount_idx_0#0" + ], + "op": "dig 2", + "defined_out": [ + "wallet#0" + ], + "stack_out": [ + "wallet#0", + "spendingAddressBytes#0", + "inner_txn_params%0%%param_Amount_idx_0#0", + "wallet#0" + ] + }, + "174": { + "op": "app_params_get AppAddress", + "defined_out": [ + "check%0#0", + "value%0#0", + "wallet#0" + ], + "stack_out": [ + "wallet#0", + "spendingAddressBytes#0", + "inner_txn_params%0%%param_Amount_idx_0#0", + "value%0#0", + "check%0#0" + ] + }, + "176": { + "error": "application exists", + "op": "assert // application exists", + "defined_out": [ + "inner_txn_params%0%%param_RekeyTo_idx_0#0", + "wallet#0" + ], + "stack_out": [ + "wallet#0", + "spendingAddressBytes#0", + "inner_txn_params%0%%param_Amount_idx_0#0", + "inner_txn_params%0%%param_RekeyTo_idx_0#0" + ] + }, + "177": { + "op": "b makePayment_after_inlined_smart_contracts/utils/plugins.ts::rekeyAddress@6" + } + } +} \ No newline at end of file diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/subscription/SubscriptionPlugin.approval.teal b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/subscription/SubscriptionPlugin.approval.teal new file mode 100644 index 000000000..99e7096c2 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/subscription/SubscriptionPlugin.approval.teal @@ -0,0 +1,192 @@ +#pragma version 11 +#pragma typetrack false + +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: + intcblock 0 1 TMPL_FREQUENCY TMPL_AMOUNT + bytecblock "lastPayment" + txn ApplicationID + bnz main_after_if_else@2 + // smart_contracts/plugins/subscription/contract.algo.ts:12 + // lastPayment = GlobalState({ initialValue: 0 }); + bytec_0 // "lastPayment" + intc_0 // 0 + app_global_put + +main_after_if_else@2: + // smart_contracts/plugins/subscription/contract.algo.ts:10 + // export class SubscriptionPlugin extends Contract { + txn NumAppArgs + bz main___algots__.defaultCreate@7 + pushbytes 0xb060ba58 // method "makePayment(uint64,bool,address)void" + txna ApplicationArgs 0 + match main_makePayment_route@5 + err + +main_makePayment_route@5: + // smart_contracts/plugins/subscription/contract.algo.ts:14-19 + // makePayment( + // wallet: Application, + // rekeyBack: boolean, + // // eslint-disable-next-line no-unused-vars + // _acctRef: Address + // ): void { + txn OnCompletion + ! + txn ApplicationID + && + assert // OnCompletion must be NoOp && can only call when not creating + b makePayment + +main___algots__.defaultCreate@7: + // smart_contracts/plugins/subscription/contract.algo.ts:10 + // export class SubscriptionPlugin extends Contract { + txn OnCompletion + ! + txn ApplicationID + ! + && + return // on error: OnCompletion must be NoOp && can only call when creating + + +// smart_contracts/plugins/subscription/contract.algo.ts::SubscriptionPlugin.makePayment[routing]() -> void: +makePayment: + // smart_contracts/plugins/subscription/contract.algo.ts:14-19 + // makePayment( + // wallet: Application, + // rekeyBack: boolean, + // // eslint-disable-next-line no-unused-vars + // _acctRef: Address + // ): void { + txna ApplicationArgs 1 + dup + len + pushint 8 // 8 + == + assert // invalid number of bytes for uint64 + btoi + dup + txna ApplicationArgs 2 + dup + len + intc_1 // 1 + == + assert // invalid number of bytes for bool8 + intc_0 // 0 + getbit + txna ApplicationArgs 3 + len + pushint 32 // 32 + == + assert // invalid number of bytes for uint8[32] + // smart_contracts/utils/plugins.ts:34-37 + // const [spendingAddressBytes] = op.AppGlobal.getExBytes( + // wallet, + // Bytes(AbstractAccountGlobalStateKeysSpendingAddress) + // ) + swap + // smart_contracts/utils/plugins.ts:36 + // Bytes(AbstractAccountGlobalStateKeysSpendingAddress) + pushbytes "spending_address" + // smart_contracts/utils/plugins.ts:34-37 + // const [spendingAddressBytes] = op.AppGlobal.getExBytes( + // wallet, + // Bytes(AbstractAccountGlobalStateKeysSpendingAddress) + // ) + app_global_get_ex + pop + swap + // smart_contracts/plugins/subscription/contract.algo.ts:22 + // assert(Global.round - this.lastPayment.value > FREQUENCY); + global Round + intc_0 // 0 + // smart_contracts/plugins/subscription/contract.algo.ts:12 + // lastPayment = GlobalState({ initialValue: 0 }); + bytec_0 // "lastPayment" + // smart_contracts/plugins/subscription/contract.algo.ts:22 + // assert(Global.round - this.lastPayment.value > FREQUENCY); + app_global_get_ex + assert // check GlobalState exists + - + intc_2 // TMPL_FREQUENCY + > + assert + // smart_contracts/plugins/subscription/contract.algo.ts:12 + // lastPayment = GlobalState({ initialValue: 0 }); + bytec_0 // "lastPayment" + // smart_contracts/plugins/subscription/contract.algo.ts:23 + // this.lastPayment.value = Global.round; + global Round + app_global_put + // smart_contracts/plugins/subscription/contract.algo.ts:25-32 + // itxn + // .payment({ + // sender, + // amount: AMOUNT, + // receiver: Account(Bytes.fromBase32("46XYR7OTRZXISI2TRSBDWPUVQT4ECBWNI7TFWPPS6EKAPJ7W5OBXSNG66M").slice(0, 32)), + // rekeyTo: rekeyAddress(rekeyBack, wallet) + // }) + // .submit(); + itxn_begin + // smart_contracts/plugins/subscription/contract.algo.ts:28 + // amount: AMOUNT, + intc_3 // TMPL_AMOUNT + swap + // smart_contracts/utils/plugins.ts:42 + // if (!rekeyBack) { + bnz makePayment_after_if_else@5 + // smart_contracts/utils/plugins.ts:43 + // return Global.zeroAddress + global ZeroAddress + +makePayment_after_inlined_smart_contracts/utils/plugins.ts::rekeyAddress@6: + itxn_field RekeyTo + // smart_contracts/plugins/subscription/contract.algo.ts:29 + // receiver: Account(Bytes.fromBase32("46XYR7OTRZXISI2TRSBDWPUVQT4ECBWNI7TFWPPS6EKAPJ7W5OBXSNG66M").slice(0, 32)), + pushbytes base32(46XYR7OTRZXISI2TRSBDWPUVQT4ECBWNI7TFWPPS6EKAPJ7W5OBQ) + itxn_field Receiver + dup + itxn_field Amount + dig 1 + itxn_field Sender + // smart_contracts/plugins/subscription/contract.algo.ts:25-31 + // itxn + // .payment({ + // sender, + // amount: AMOUNT, + // receiver: Account(Bytes.fromBase32("46XYR7OTRZXISI2TRSBDWPUVQT4ECBWNI7TFWPPS6EKAPJ7W5OBXSNG66M").slice(0, 32)), + // rekeyTo: rekeyAddress(rekeyBack, wallet) + // }) + intc_1 // 1 + itxn_field TypeEnum + intc_0 // 0 + itxn_field Fee + // smart_contracts/plugins/subscription/contract.algo.ts:25-32 + // itxn + // .payment({ + // sender, + // amount: AMOUNT, + // receiver: Account(Bytes.fromBase32("46XYR7OTRZXISI2TRSBDWPUVQT4ECBWNI7TFWPPS6EKAPJ7W5OBXSNG66M").slice(0, 32)), + // rekeyTo: rekeyAddress(rekeyBack, wallet) + // }) + // .submit(); + itxn_submit + // smart_contracts/plugins/subscription/contract.algo.ts:14-19 + // makePayment( + // wallet: Application, + // rekeyBack: boolean, + // // eslint-disable-next-line no-unused-vars + // _acctRef: Address + // ): void { + intc_1 // 1 + return + +makePayment_after_if_else@5: + // smart_contracts/utils/plugins.ts:46 + // return wallet.address + dig 2 + app_params_get AppAddress + assert // application exists + // smart_contracts/plugins/subscription/contract.algo.ts:30 + // rekeyTo: rekeyAddress(rekeyBack, wallet) + b makePayment_after_inlined_smart_contracts/utils/plugins.ts::rekeyAddress@6 diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/subscription/SubscriptionPlugin.arc32.json b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/subscription/SubscriptionPlugin.arc32.json new file mode 100644 index 000000000..d7353311b --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/subscription/SubscriptionPlugin.arc32.json @@ -0,0 +1,68 @@ +{ + "hints": { + "makePayment(uint64,bool,address)void": { + "call_config": { + "no_op": "CALL" + } + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIFRNUExfRlJFUVVFTkNZIFRNUExfQU1PVU5UCiAgICBieXRlY2Jsb2NrICJsYXN0UGF5bWVudCIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL3N1YnNjcmlwdGlvbi9jb250cmFjdC5hbGdvLnRzOjEyCiAgICAvLyBsYXN0UGF5bWVudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJsYXN0UGF5bWVudCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9zdWJzY3JpcHRpb24vY29udHJhY3QuYWxnby50czoxMAogICAgLy8gZXhwb3J0IGNsYXNzIFN1YnNjcmlwdGlvblBsdWdpbiBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA3CiAgICBwdXNoYnl0ZXMgMHhiMDYwYmE1OCAvLyBtZXRob2QgIm1ha2VQYXltZW50KHVpbnQ2NCxib29sLGFkZHJlc3Mpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fbWFrZVBheW1lbnRfcm91dGVANQogICAgZXJyCgptYWluX21ha2VQYXltZW50X3JvdXRlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9zdWJzY3JpcHRpb24vY29udHJhY3QuYWxnby50czoxNC0xOQogICAgLy8gbWFrZVBheW1lbnQoCiAgICAvLyAgIHdhbGxldDogQXBwbGljYXRpb24sCiAgICAvLyAgIHJla2V5QmFjazogYm9vbGVhbiwKICAgIC8vICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzCiAgICAvLyAgIF9hY2N0UmVmOiBBZGRyZXNzCiAgICAvLyApOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAmJgogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AgJiYgY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYiBtYWtlUGF5bWVudAoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL3N1YnNjcmlwdGlvbi9jb250cmFjdC5hbGdvLnRzOjEwCiAgICAvLyBleHBvcnQgY2xhc3MgU3Vic2NyaXB0aW9uUGx1Z2luIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4gLy8gb24gZXJyb3I6IE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AgJiYgY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCgoKLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvc3Vic2NyaXB0aW9uL2NvbnRyYWN0LmFsZ28udHM6OlN1YnNjcmlwdGlvblBsdWdpbi5tYWtlUGF5bWVudFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm1ha2VQYXltZW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvc3Vic2NyaXB0aW9uL2NvbnRyYWN0LmFsZ28udHM6MTQtMTkKICAgIC8vIG1ha2VQYXltZW50KAogICAgLy8gICB3YWxsZXQ6IEFwcGxpY2F0aW9uLAogICAgLy8gICByZWtleUJhY2s6IGJvb2xlYW4sCiAgICAvLyAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycwogICAgLy8gICBfYWNjdFJlZjogQWRkcmVzcwogICAgLy8gKTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA4IC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGJvb2w4CiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBsZW4KICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ4WzMyXQogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL3BsdWdpbnMudHM6MzQtMzcKICAgIC8vIGNvbnN0IFtzcGVuZGluZ0FkZHJlc3NCeXRlc10gPSBvcC5BcHBHbG9iYWwuZ2V0RXhCeXRlcygKICAgIC8vICAgd2FsbGV0LAogICAgLy8gICBCeXRlcyhBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNTcGVuZGluZ0FkZHJlc3MpCiAgICAvLyApCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvcGx1Z2lucy50czozNgogICAgLy8gQnl0ZXMoQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzU3BlbmRpbmdBZGRyZXNzKQogICAgcHVzaGJ5dGVzICJzcGVuZGluZ19hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL3BsdWdpbnMudHM6MzQtMzcKICAgIC8vIGNvbnN0IFtzcGVuZGluZ0FkZHJlc3NCeXRlc10gPSBvcC5BcHBHbG9iYWwuZ2V0RXhCeXRlcygKICAgIC8vICAgd2FsbGV0LAogICAgLy8gICBCeXRlcyhBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNTcGVuZGluZ0FkZHJlc3MpCiAgICAvLyApCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgcG9wCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9zdWJzY3JpcHRpb24vY29udHJhY3QuYWxnby50czoyMgogICAgLy8gYXNzZXJ0KEdsb2JhbC5yb3VuZCAtIHRoaXMubGFzdFBheW1lbnQudmFsdWUgPiBGUkVRVUVOQ1kpOwogICAgZ2xvYmFsIFJvdW5kCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvc3Vic2NyaXB0aW9uL2NvbnRyYWN0LmFsZ28udHM6MTIKICAgIC8vIGxhc3RQYXltZW50ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gImxhc3RQYXltZW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvc3Vic2NyaXB0aW9uL2NvbnRyYWN0LmFsZ28udHM6MjIKICAgIC8vIGFzc2VydChHbG9iYWwucm91bmQgLSB0aGlzLmxhc3RQYXltZW50LnZhbHVlID4gRlJFUVVFTkNZKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAtCiAgICBpbnRjXzIgLy8gVE1QTF9GUkVRVUVOQ1kKICAgID4KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvc3Vic2NyaXB0aW9uL2NvbnRyYWN0LmFsZ28udHM6MTIKICAgIC8vIGxhc3RQYXltZW50ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gImxhc3RQYXltZW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvc3Vic2NyaXB0aW9uL2NvbnRyYWN0LmFsZ28udHM6MjMKICAgIC8vIHRoaXMubGFzdFBheW1lbnQudmFsdWUgPSBHbG9iYWwucm91bmQ7CiAgICBnbG9iYWwgUm91bmQKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9zdWJzY3JpcHRpb24vY29udHJhY3QuYWxnby50czoyNS0zMgogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyLAogICAgLy8gICAgIGFtb3VudDogQU1PVU5ULAogICAgLy8gICAgIHJlY2VpdmVyOiBBY2NvdW50KEJ5dGVzLmZyb21CYXNlMzIoIjQ2WFlSN09UUlpYSVNJMlRSU0JEV1BVVlFUNEVDQldOSTdURldQUFM2RUtBUEo3VzVPQlhTTkc2Nk0iKS5zbGljZSgwLCAzMikpLAogICAgLy8gICAgIHJla2V5VG86IHJla2V5QWRkcmVzcyhyZWtleUJhY2ssIHdhbGxldCkKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvc3Vic2NyaXB0aW9uL2NvbnRyYWN0LmFsZ28udHM6MjgKICAgIC8vIGFtb3VudDogQU1PVU5ULAogICAgaW50Y18zIC8vIFRNUExfQU1PVU5UCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvcGx1Z2lucy50czo0MgogICAgLy8gaWYgKCFyZWtleUJhY2spIHsKICAgIGJueiBtYWtlUGF5bWVudF9hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9wbHVnaW5zLnRzOjQzCiAgICAvLyByZXR1cm4gR2xvYmFsLnplcm9BZGRyZXNzCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKCm1ha2VQYXltZW50X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzL3V0aWxzL3BsdWdpbnMudHM6OnJla2V5QWRkcmVzc0A2OgogICAgaXR4bl9maWVsZCBSZWtleVRvCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9zdWJzY3JpcHRpb24vY29udHJhY3QuYWxnby50czoyOQogICAgLy8gcmVjZWl2ZXI6IEFjY291bnQoQnl0ZXMuZnJvbUJhc2UzMigiNDZYWVI3T1RSWlhJU0kyVFJTQkRXUFVWUVQ0RUNCV05JN1RGV1BQUzZFS0FQSjdXNU9CWFNORzY2TSIpLnNsaWNlKDAsIDMyKSksCiAgICBwdXNoYnl0ZXMgYmFzZTMyKDQ2WFlSN09UUlpYSVNJMlRSU0JEV1BVVlFUNEVDQldOSTdURldQUFM2RUtBUEo3VzVPQlEpCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBkdXAKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBkaWcgMQogICAgaXR4bl9maWVsZCBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL3N1YnNjcmlwdGlvbi9jb250cmFjdC5hbGdvLnRzOjI1LTMxCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICBzZW5kZXIsCiAgICAvLyAgICAgYW1vdW50OiBBTU9VTlQsCiAgICAvLyAgICAgcmVjZWl2ZXI6IEFjY291bnQoQnl0ZXMuZnJvbUJhc2UzMigiNDZYWVI3T1RSWlhJU0kyVFJTQkRXUFVWUVQ0RUNCV05JN1RGV1BQUzZFS0FQSjdXNU9CWFNORzY2TSIpLnNsaWNlKDAsIDMyKSksCiAgICAvLyAgICAgcmVrZXlUbzogcmVrZXlBZGRyZXNzKHJla2V5QmFjaywgd2FsbGV0KQogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvc3Vic2NyaXB0aW9uL2NvbnRyYWN0LmFsZ28udHM6MjUtMzIKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlciwKICAgIC8vICAgICBhbW91bnQ6IEFNT1VOVCwKICAgIC8vICAgICByZWNlaXZlcjogQWNjb3VudChCeXRlcy5mcm9tQmFzZTMyKCI0NlhZUjdPVFJaWElTSTJUUlNCRFdQVVZRVDRFQ0JXTkk3VEZXUFBTNkVLQVBKN1c1T0JYU05HNjZNIikuc2xpY2UoMCwgMzIpKSwKICAgIC8vICAgICByZWtleVRvOiByZWtleUFkZHJlc3MocmVrZXlCYWNrLCB3YWxsZXQpCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9zdWJzY3JpcHRpb24vY29udHJhY3QuYWxnby50czoxNC0xOQogICAgLy8gbWFrZVBheW1lbnQoCiAgICAvLyAgIHdhbGxldDogQXBwbGljYXRpb24sCiAgICAvLyAgIHJla2V5QmFjazogYm9vbGVhbiwKICAgIC8vICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzCiAgICAvLyAgIF9hY2N0UmVmOiBBZGRyZXNzCiAgICAvLyApOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1ha2VQYXltZW50X2FmdGVyX2lmX2Vsc2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9wbHVnaW5zLnRzOjQ2CiAgICAvLyByZXR1cm4gd2FsbGV0LmFkZHJlc3MKICAgIGRpZyAyCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9zdWJzY3JpcHRpb24vY29udHJhY3QuYWxnby50czozMAogICAgLy8gcmVrZXlUbzogcmVrZXlBZGRyZXNzKHJla2V5QmFjaywgd2FsbGV0KQogICAgYiBtYWtlUGF5bWVudF9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy91dGlscy9wbHVnaW5zLnRzOjpyZWtleUFkZHJlc3NANgo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "state": { + "global": { + "num_byte_slices": 0, + "num_uints": 1 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "schema": { + "global": { + "declared": { + "lastPayment": { + "type": "uint64", + "key": "lastPayment" + } + }, + "reserved": {} + }, + "local": { + "declared": {}, + "reserved": {} + } + }, + "contract": { + "name": "SubscriptionPlugin", + "methods": [ + { + "name": "makePayment", + "args": [ + { + "type": "uint64", + "name": "wallet" + }, + { + "type": "bool", + "name": "rekeyBack" + }, + { + "type": "address", + "name": "_acctRef" + } + ], + "readonly": false, + "returns": { + "type": "void" + } + } + ], + "networks": {} + }, + "bare_call_config": { + "no_op": "CREATE" + } +} \ No newline at end of file diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/subscription/SubscriptionPlugin.arc56.json b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/subscription/SubscriptionPlugin.arc56.json new file mode 100644 index 000000000..9d3eca62b --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/subscription/SubscriptionPlugin.arc56.json @@ -0,0 +1,152 @@ +{ + "name": "SubscriptionPlugin", + "structs": {}, + "methods": [ + { + "name": "makePayment", + "args": [ + { + "type": "uint64", + "name": "wallet" + }, + { + "type": "bool", + "name": "rekeyBack" + }, + { + "type": "address", + "name": "_acctRef" + } + ], + "returns": { + "type": "void" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [], + "recommendations": {} + } + ], + "arcs": [ + 22, + 28 + ], + "networks": {}, + "state": { + "schema": { + "global": { + "ints": 1, + "bytes": 0 + }, + "local": { + "ints": 0, + "bytes": 0 + } + }, + "keys": { + "global": { + "lastPayment": { + "keyType": "AVMString", + "valueType": "AVMUint64", + "key": "bGFzdFBheW1lbnQ=" + } + }, + "local": {}, + "box": {} + }, + "maps": { + "global": {}, + "local": {}, + "box": {} + } + }, + "bareActions": { + "create": [ + "NoOp" + ], + "call": [] + }, + "sourceInfo": { + "approval": { + "sourceInfo": [ + { + "pc": [ + 44 + ], + "errorMessage": "OnCompletion must be NoOp && can only call when creating" + }, + { + "pc": [ + 33 + ], + "errorMessage": "OnCompletion must be NoOp && can only call when not creating" + }, + { + "pc": [ + 176 + ], + "errorMessage": "application exists" + }, + { + "pc": [ + 101 + ], + "errorMessage": "check GlobalState exists" + }, + { + "pc": [ + 63 + ], + "errorMessage": "invalid number of bytes for bool8" + }, + { + "pc": [ + 53 + ], + "errorMessage": "invalid number of bytes for uint64" + }, + { + "pc": [ + 73 + ], + "errorMessage": "invalid number of bytes for uint8[32]" + } + ], + "pcOffsetMethod": "cblocks" + }, + "clear": { + "sourceInfo": [], + "pcOffsetMethod": "none" + } + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIFRNUExfRlJFUVVFTkNZIFRNUExfQU1PVU5UCiAgICBieXRlY2Jsb2NrICJsYXN0UGF5bWVudCIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL3N1YnNjcmlwdGlvbi9jb250cmFjdC5hbGdvLnRzOjEyCiAgICAvLyBsYXN0UGF5bWVudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJsYXN0UGF5bWVudCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9zdWJzY3JpcHRpb24vY29udHJhY3QuYWxnby50czoxMAogICAgLy8gZXhwb3J0IGNsYXNzIFN1YnNjcmlwdGlvblBsdWdpbiBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA3CiAgICBwdXNoYnl0ZXMgMHhiMDYwYmE1OCAvLyBtZXRob2QgIm1ha2VQYXltZW50KHVpbnQ2NCxib29sLGFkZHJlc3Mpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fbWFrZVBheW1lbnRfcm91dGVANQogICAgZXJyCgptYWluX21ha2VQYXltZW50X3JvdXRlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9zdWJzY3JpcHRpb24vY29udHJhY3QuYWxnby50czoxNC0xOQogICAgLy8gbWFrZVBheW1lbnQoCiAgICAvLyAgIHdhbGxldDogQXBwbGljYXRpb24sCiAgICAvLyAgIHJla2V5QmFjazogYm9vbGVhbiwKICAgIC8vICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzCiAgICAvLyAgIF9hY2N0UmVmOiBBZGRyZXNzCiAgICAvLyApOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAmJgogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AgJiYgY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYiBtYWtlUGF5bWVudAoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL3N1YnNjcmlwdGlvbi9jb250cmFjdC5hbGdvLnRzOjEwCiAgICAvLyBleHBvcnQgY2xhc3MgU3Vic2NyaXB0aW9uUGx1Z2luIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4gLy8gb24gZXJyb3I6IE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AgJiYgY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCgoKLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvc3Vic2NyaXB0aW9uL2NvbnRyYWN0LmFsZ28udHM6OlN1YnNjcmlwdGlvblBsdWdpbi5tYWtlUGF5bWVudFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm1ha2VQYXltZW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvc3Vic2NyaXB0aW9uL2NvbnRyYWN0LmFsZ28udHM6MTQtMTkKICAgIC8vIG1ha2VQYXltZW50KAogICAgLy8gICB3YWxsZXQ6IEFwcGxpY2F0aW9uLAogICAgLy8gICByZWtleUJhY2s6IGJvb2xlYW4sCiAgICAvLyAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycwogICAgLy8gICBfYWNjdFJlZjogQWRkcmVzcwogICAgLy8gKTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA4IC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGJvb2w4CiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBsZW4KICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ4WzMyXQogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL3BsdWdpbnMudHM6MzQtMzcKICAgIC8vIGNvbnN0IFtzcGVuZGluZ0FkZHJlc3NCeXRlc10gPSBvcC5BcHBHbG9iYWwuZ2V0RXhCeXRlcygKICAgIC8vICAgd2FsbGV0LAogICAgLy8gICBCeXRlcyhBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNTcGVuZGluZ0FkZHJlc3MpCiAgICAvLyApCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvcGx1Z2lucy50czozNgogICAgLy8gQnl0ZXMoQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzU3BlbmRpbmdBZGRyZXNzKQogICAgcHVzaGJ5dGVzICJzcGVuZGluZ19hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL3BsdWdpbnMudHM6MzQtMzcKICAgIC8vIGNvbnN0IFtzcGVuZGluZ0FkZHJlc3NCeXRlc10gPSBvcC5BcHBHbG9iYWwuZ2V0RXhCeXRlcygKICAgIC8vICAgd2FsbGV0LAogICAgLy8gICBCeXRlcyhBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNTcGVuZGluZ0FkZHJlc3MpCiAgICAvLyApCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgcG9wCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9zdWJzY3JpcHRpb24vY29udHJhY3QuYWxnby50czoyMgogICAgLy8gYXNzZXJ0KEdsb2JhbC5yb3VuZCAtIHRoaXMubGFzdFBheW1lbnQudmFsdWUgPiBGUkVRVUVOQ1kpOwogICAgZ2xvYmFsIFJvdW5kCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvc3Vic2NyaXB0aW9uL2NvbnRyYWN0LmFsZ28udHM6MTIKICAgIC8vIGxhc3RQYXltZW50ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gImxhc3RQYXltZW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvc3Vic2NyaXB0aW9uL2NvbnRyYWN0LmFsZ28udHM6MjIKICAgIC8vIGFzc2VydChHbG9iYWwucm91bmQgLSB0aGlzLmxhc3RQYXltZW50LnZhbHVlID4gRlJFUVVFTkNZKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAtCiAgICBpbnRjXzIgLy8gVE1QTF9GUkVRVUVOQ1kKICAgID4KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvc3Vic2NyaXB0aW9uL2NvbnRyYWN0LmFsZ28udHM6MTIKICAgIC8vIGxhc3RQYXltZW50ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gImxhc3RQYXltZW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvc3Vic2NyaXB0aW9uL2NvbnRyYWN0LmFsZ28udHM6MjMKICAgIC8vIHRoaXMubGFzdFBheW1lbnQudmFsdWUgPSBHbG9iYWwucm91bmQ7CiAgICBnbG9iYWwgUm91bmQKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9zdWJzY3JpcHRpb24vY29udHJhY3QuYWxnby50czoyNS0zMgogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyLAogICAgLy8gICAgIGFtb3VudDogQU1PVU5ULAogICAgLy8gICAgIHJlY2VpdmVyOiBBY2NvdW50KEJ5dGVzLmZyb21CYXNlMzIoIjQ2WFlSN09UUlpYSVNJMlRSU0JEV1BVVlFUNEVDQldOSTdURldQUFM2RUtBUEo3VzVPQlhTTkc2Nk0iKS5zbGljZSgwLCAzMikpLAogICAgLy8gICAgIHJla2V5VG86IHJla2V5QWRkcmVzcyhyZWtleUJhY2ssIHdhbGxldCkKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvc3Vic2NyaXB0aW9uL2NvbnRyYWN0LmFsZ28udHM6MjgKICAgIC8vIGFtb3VudDogQU1PVU5ULAogICAgaW50Y18zIC8vIFRNUExfQU1PVU5UCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvcGx1Z2lucy50czo0MgogICAgLy8gaWYgKCFyZWtleUJhY2spIHsKICAgIGJueiBtYWtlUGF5bWVudF9hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9wbHVnaW5zLnRzOjQzCiAgICAvLyByZXR1cm4gR2xvYmFsLnplcm9BZGRyZXNzCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKCm1ha2VQYXltZW50X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzL3V0aWxzL3BsdWdpbnMudHM6OnJla2V5QWRkcmVzc0A2OgogICAgaXR4bl9maWVsZCBSZWtleVRvCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9zdWJzY3JpcHRpb24vY29udHJhY3QuYWxnby50czoyOQogICAgLy8gcmVjZWl2ZXI6IEFjY291bnQoQnl0ZXMuZnJvbUJhc2UzMigiNDZYWVI3T1RSWlhJU0kyVFJTQkRXUFVWUVQ0RUNCV05JN1RGV1BQUzZFS0FQSjdXNU9CWFNORzY2TSIpLnNsaWNlKDAsIDMyKSksCiAgICBwdXNoYnl0ZXMgYmFzZTMyKDQ2WFlSN09UUlpYSVNJMlRSU0JEV1BVVlFUNEVDQldOSTdURldQUFM2RUtBUEo3VzVPQlEpCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBkdXAKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBkaWcgMQogICAgaXR4bl9maWVsZCBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL3N1YnNjcmlwdGlvbi9jb250cmFjdC5hbGdvLnRzOjI1LTMxCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICBzZW5kZXIsCiAgICAvLyAgICAgYW1vdW50OiBBTU9VTlQsCiAgICAvLyAgICAgcmVjZWl2ZXI6IEFjY291bnQoQnl0ZXMuZnJvbUJhc2UzMigiNDZYWVI3T1RSWlhJU0kyVFJTQkRXUFVWUVQ0RUNCV05JN1RGV1BQUzZFS0FQSjdXNU9CWFNORzY2TSIpLnNsaWNlKDAsIDMyKSksCiAgICAvLyAgICAgcmVrZXlUbzogcmVrZXlBZGRyZXNzKHJla2V5QmFjaywgd2FsbGV0KQogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvc3Vic2NyaXB0aW9uL2NvbnRyYWN0LmFsZ28udHM6MjUtMzIKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlciwKICAgIC8vICAgICBhbW91bnQ6IEFNT1VOVCwKICAgIC8vICAgICByZWNlaXZlcjogQWNjb3VudChCeXRlcy5mcm9tQmFzZTMyKCI0NlhZUjdPVFJaWElTSTJUUlNCRFdQVVZRVDRFQ0JXTkk3VEZXUFBTNkVLQVBKN1c1T0JYU05HNjZNIikuc2xpY2UoMCwgMzIpKSwKICAgIC8vICAgICByZWtleVRvOiByZWtleUFkZHJlc3MocmVrZXlCYWNrLCB3YWxsZXQpCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9zdWJzY3JpcHRpb24vY29udHJhY3QuYWxnby50czoxNC0xOQogICAgLy8gbWFrZVBheW1lbnQoCiAgICAvLyAgIHdhbGxldDogQXBwbGljYXRpb24sCiAgICAvLyAgIHJla2V5QmFjazogYm9vbGVhbiwKICAgIC8vICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzCiAgICAvLyAgIF9hY2N0UmVmOiBBZGRyZXNzCiAgICAvLyApOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1ha2VQYXltZW50X2FmdGVyX2lmX2Vsc2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9wbHVnaW5zLnRzOjQ2CiAgICAvLyByZXR1cm4gd2FsbGV0LmFkZHJlc3MKICAgIGRpZyAyCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9zdWJzY3JpcHRpb24vY29udHJhY3QuYWxnby50czozMAogICAgLy8gcmVrZXlUbzogcmVrZXlBZGRyZXNzKHJla2V5QmFjaywgd2FsbGV0KQogICAgYiBtYWtlUGF5bWVudF9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy91dGlscy9wbHVnaW5zLnRzOjpyZWtleUFkZHJlc3NANgo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CyAEAAEAACYBC2xhc3RQYXltZW50MRhAAAMoImcxG0EAGIAEsGC6WDYaAI4BAAEAMRkUMRgQREIACDEZFDEYFBBDNhoBSRWBCBJEF0k2GgJJFSMSRCJTNhoDFYEgEkRMgBBzcGVuZGluZ19hZGRyZXNzZUhMMgYiKGVECSQNRCgyBmexJUxAADgyA7IggCDnr4j9045uiSNTjII7PpWE+EEGzUfmWz3y8RQHp/brg7IHSbIISwGyACOyECKyAbMjQ0sCcghEQv/C", + "clear": "C4EBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 5, + "minor": 2, + "patch": 0 + } + }, + "events": [], + "templateVariables": { + "FREQUENCY": { + "type": "AVMUint64" + }, + "AMOUNT": { + "type": "AVMUint64" + } + } +} \ No newline at end of file diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/subscription/SubscriptionPlugin.clear.puya.map b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/subscription/SubscriptionPlugin.clear.puya.map new file mode 100644 index 000000000..bf29998bd --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/subscription/SubscriptionPlugin.clear.puya.map @@ -0,0 +1,25 @@ +{ + "version": 3, + "sources": [], + "mappings": ";;;", + "op_pc_offset": 0, + "pc_events": { + "1": { + "subroutine": "@algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram", + "params": {}, + "block": "main", + "stack_in": [], + "op": "pushint 1 // 1", + "defined_out": [ + "1" + ], + "stack_out": [ + "1" + ] + }, + "3": { + "op": "return", + "stack_out": [] + } + } +} \ No newline at end of file diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/subscription/SubscriptionPlugin.clear.teal b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/subscription/SubscriptionPlugin.clear.teal new file mode 100644 index 000000000..42f81b0f1 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/subscription/SubscriptionPlugin.clear.teal @@ -0,0 +1,7 @@ +#pragma version 11 +#pragma typetrack false + +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: + pushint 1 // 1 + return diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/subscription/SubscriptionPluginClient.ts b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/subscription/SubscriptionPluginClient.ts new file mode 100644 index 000000000..7ef4464a5 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/artifacts/plugins/subscription/SubscriptionPluginClient.ts @@ -0,0 +1,612 @@ +/* eslint-disable */ +/** + * This file was automatically generated by @algorandfoundation/algokit-client-generator. + * DO NOT MODIFY IT BY HAND. + * requires: @algorandfoundation/algokit-utils: ^7 + */ +import { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client' +import { ABIReturn, AppReturn, SendAppTransactionResult } from '@algorandfoundation/algokit-utils/types/app' +import { Arc56Contract, getArc56ReturnValue, getABIStructFromABITuple } from '@algorandfoundation/algokit-utils/types/app-arc56' +import { + AppClient as _AppClient, + AppClientMethodCallParams, + AppClientParams, + AppClientBareCallParams, + CallOnComplete, + AppClientCompilationParams, + ResolveAppClientByCreatorAndName, + ResolveAppClientByNetwork, + CloneAppClientParams, +} from '@algorandfoundation/algokit-utils/types/app-client' +import { AppFactory as _AppFactory, AppFactoryAppClientParams, AppFactoryResolveAppClientByCreatorAndNameParams, AppFactoryDeployParams, AppFactoryParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory' +import { TransactionComposer, AppCallMethodCall, AppMethodCallTransactionArgument, SimulateOptions, RawSimulateOptions, SkipSignaturesSimulateOptions } from '@algorandfoundation/algokit-utils/types/composer' +import { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction' +import { Address, encodeAddress, modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk' + +export const APP_SPEC: Arc56Contract = {"name":"SubscriptionPlugin","structs":{},"methods":[{"name":"makePayment","args":[{"type":"uint64","name":"wallet"},{"type":"bool","name":"rekeyBack"},{"type":"address","name":"_acctRef"}],"returns":{"type":"void"},"actions":{"create":[],"call":["NoOp"]},"readonly":false,"events":[],"recommendations":{}}],"arcs":[22,28],"networks":{},"state":{"schema":{"global":{"ints":1,"bytes":0},"local":{"ints":0,"bytes":0}},"keys":{"global":{"lastPayment":{"keyType":"AVMString","valueType":"AVMUint64","key":"bGFzdFBheW1lbnQ="}},"local":{},"box":{}},"maps":{"global":{},"local":{},"box":{}}},"bareActions":{"create":["NoOp"],"call":[]},"sourceInfo":{"approval":{"sourceInfo":[{"pc":[44],"errorMessage":"OnCompletion must be NoOp && can only call when creating"},{"pc":[33],"errorMessage":"OnCompletion must be NoOp && can only call when not creating"},{"pc":[176],"errorMessage":"application exists"},{"pc":[101],"errorMessage":"check GlobalState exists"},{"pc":[63],"errorMessage":"invalid number of bytes for bool8"},{"pc":[53],"errorMessage":"invalid number of bytes for uint64"},{"pc":[73],"errorMessage":"invalid number of bytes for uint8[32]"}],"pcOffsetMethod":"cblocks"},"clear":{"sourceInfo":[],"pcOffsetMethod":"none"}},"source":{"approval":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIFRNUExfRlJFUVVFTkNZIFRNUExfQU1PVU5UCiAgICBieXRlY2Jsb2NrICJsYXN0UGF5bWVudCIKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL3N1YnNjcmlwdGlvbi9jb250cmFjdC5hbGdvLnRzOjEyCiAgICAvLyBsYXN0UGF5bWVudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJsYXN0UGF5bWVudCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9zdWJzY3JpcHRpb24vY29udHJhY3QuYWxnby50czoxMAogICAgLy8gZXhwb3J0IGNsYXNzIFN1YnNjcmlwdGlvblBsdWdpbiBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX19fYWxnb3RzX18uZGVmYXVsdENyZWF0ZUA3CiAgICBwdXNoYnl0ZXMgMHhiMDYwYmE1OCAvLyBtZXRob2QgIm1ha2VQYXltZW50KHVpbnQ2NCxib29sLGFkZHJlc3Mpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fbWFrZVBheW1lbnRfcm91dGVANQogICAgZXJyCgptYWluX21ha2VQYXltZW50X3JvdXRlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9zdWJzY3JpcHRpb24vY29udHJhY3QuYWxnby50czoxNC0xOQogICAgLy8gbWFrZVBheW1lbnQoCiAgICAvLyAgIHdhbGxldDogQXBwbGljYXRpb24sCiAgICAvLyAgIHJla2V5QmFjazogYm9vbGVhbiwKICAgIC8vICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzCiAgICAvLyAgIF9hY2N0UmVmOiBBZGRyZXNzCiAgICAvLyApOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAmJgogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AgJiYgY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgYiBtYWtlUGF5bWVudAoKbWFpbl9fX2FsZ290c19fLmRlZmF1bHRDcmVhdGVANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL3N1YnNjcmlwdGlvbi9jb250cmFjdC5hbGdvLnRzOjEwCiAgICAvLyBleHBvcnQgY2xhc3MgU3Vic2NyaXB0aW9uUGx1Z2luIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICByZXR1cm4gLy8gb24gZXJyb3I6IE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AgJiYgY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCgoKLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvc3Vic2NyaXB0aW9uL2NvbnRyYWN0LmFsZ28udHM6OlN1YnNjcmlwdGlvblBsdWdpbi5tYWtlUGF5bWVudFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm1ha2VQYXltZW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvc3Vic2NyaXB0aW9uL2NvbnRyYWN0LmFsZ28udHM6MTQtMTkKICAgIC8vIG1ha2VQYXltZW50KAogICAgLy8gICB3YWxsZXQ6IEFwcGxpY2F0aW9uLAogICAgLy8gICByZWtleUJhY2s6IGJvb2xlYW4sCiAgICAvLyAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycwogICAgLy8gICBfYWNjdFJlZjogQWRkcmVzcwogICAgLy8gKTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgcHVzaGludCA4IC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGJvb2w4CiAgICBpbnRjXzAgLy8gMAogICAgZ2V0Yml0CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBsZW4KICAgIHB1c2hpbnQgMzIgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIHVpbnQ4WzMyXQogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL3BsdWdpbnMudHM6MzQtMzcKICAgIC8vIGNvbnN0IFtzcGVuZGluZ0FkZHJlc3NCeXRlc10gPSBvcC5BcHBHbG9iYWwuZ2V0RXhCeXRlcygKICAgIC8vICAgd2FsbGV0LAogICAgLy8gICBCeXRlcyhBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNTcGVuZGluZ0FkZHJlc3MpCiAgICAvLyApCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvcGx1Z2lucy50czozNgogICAgLy8gQnl0ZXMoQWJzdHJhY3RBY2NvdW50R2xvYmFsU3RhdGVLZXlzU3BlbmRpbmdBZGRyZXNzKQogICAgcHVzaGJ5dGVzICJzcGVuZGluZ19hZGRyZXNzIgogICAgLy8gc21hcnRfY29udHJhY3RzL3V0aWxzL3BsdWdpbnMudHM6MzQtMzcKICAgIC8vIGNvbnN0IFtzcGVuZGluZ0FkZHJlc3NCeXRlc10gPSBvcC5BcHBHbG9iYWwuZ2V0RXhCeXRlcygKICAgIC8vICAgd2FsbGV0LAogICAgLy8gICBCeXRlcyhBYnN0cmFjdEFjY291bnRHbG9iYWxTdGF0ZUtleXNTcGVuZGluZ0FkZHJlc3MpCiAgICAvLyApCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgcG9wCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9zdWJzY3JpcHRpb24vY29udHJhY3QuYWxnby50czoyMgogICAgLy8gYXNzZXJ0KEdsb2JhbC5yb3VuZCAtIHRoaXMubGFzdFBheW1lbnQudmFsdWUgPiBGUkVRVUVOQ1kpOwogICAgZ2xvYmFsIFJvdW5kCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvc3Vic2NyaXB0aW9uL2NvbnRyYWN0LmFsZ28udHM6MTIKICAgIC8vIGxhc3RQYXltZW50ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gImxhc3RQYXltZW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvc3Vic2NyaXB0aW9uL2NvbnRyYWN0LmFsZ28udHM6MjIKICAgIC8vIGFzc2VydChHbG9iYWwucm91bmQgLSB0aGlzLmxhc3RQYXltZW50LnZhbHVlID4gRlJFUVVFTkNZKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAtCiAgICBpbnRjXzIgLy8gVE1QTF9GUkVRVUVOQ1kKICAgID4KICAgIGFzc2VydAogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvc3Vic2NyaXB0aW9uL2NvbnRyYWN0LmFsZ28udHM6MTIKICAgIC8vIGxhc3RQYXltZW50ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gImxhc3RQYXltZW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvc3Vic2NyaXB0aW9uL2NvbnRyYWN0LmFsZ28udHM6MjMKICAgIC8vIHRoaXMubGFzdFBheW1lbnQudmFsdWUgPSBHbG9iYWwucm91bmQ7CiAgICBnbG9iYWwgUm91bmQKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9zdWJzY3JpcHRpb24vY29udHJhY3QuYWxnby50czoyNS0zMgogICAgLy8gaXR4bgogICAgLy8gICAucGF5bWVudCh7CiAgICAvLyAgICAgc2VuZGVyLAogICAgLy8gICAgIGFtb3VudDogQU1PVU5ULAogICAgLy8gICAgIHJlY2VpdmVyOiBBY2NvdW50KEJ5dGVzLmZyb21CYXNlMzIoIjQ2WFlSN09UUlpYSVNJMlRSU0JEV1BVVlFUNEVDQldOSTdURldQUFM2RUtBUEo3VzVPQlhTTkc2Nk0iKS5zbGljZSgwLCAzMikpLAogICAgLy8gICAgIHJla2V5VG86IHJla2V5QWRkcmVzcyhyZWtleUJhY2ssIHdhbGxldCkKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvc3Vic2NyaXB0aW9uL2NvbnRyYWN0LmFsZ28udHM6MjgKICAgIC8vIGFtb3VudDogQU1PVU5ULAogICAgaW50Y18zIC8vIFRNUExfQU1PVU5UCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvdXRpbHMvcGx1Z2lucy50czo0MgogICAgLy8gaWYgKCFyZWtleUJhY2spIHsKICAgIGJueiBtYWtlUGF5bWVudF9hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9wbHVnaW5zLnRzOjQzCiAgICAvLyByZXR1cm4gR2xvYmFsLnplcm9BZGRyZXNzCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKCm1ha2VQYXltZW50X2FmdGVyX2lubGluZWRfc21hcnRfY29udHJhY3RzL3V0aWxzL3BsdWdpbnMudHM6OnJla2V5QWRkcmVzc0A2OgogICAgaXR4bl9maWVsZCBSZWtleVRvCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9zdWJzY3JpcHRpb24vY29udHJhY3QuYWxnby50czoyOQogICAgLy8gcmVjZWl2ZXI6IEFjY291bnQoQnl0ZXMuZnJvbUJhc2UzMigiNDZYWVI3T1RSWlhJU0kyVFJTQkRXUFVWUVQ0RUNCV05JN1RGV1BQUzZFS0FQSjdXNU9CWFNORzY2TSIpLnNsaWNlKDAsIDMyKSksCiAgICBwdXNoYnl0ZXMgYmFzZTMyKDQ2WFlSN09UUlpYSVNJMlRSU0JEV1BVVlFUNEVDQldOSTdURldQUFM2RUtBUEo3VzVPQlEpCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBkdXAKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBkaWcgMQogICAgaXR4bl9maWVsZCBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9wbHVnaW5zL3N1YnNjcmlwdGlvbi9jb250cmFjdC5hbGdvLnRzOjI1LTMxCiAgICAvLyBpdHhuCiAgICAvLyAgIC5wYXltZW50KHsKICAgIC8vICAgICBzZW5kZXIsCiAgICAvLyAgICAgYW1vdW50OiBBTU9VTlQsCiAgICAvLyAgICAgcmVjZWl2ZXI6IEFjY291bnQoQnl0ZXMuZnJvbUJhc2UzMigiNDZYWVI3T1RSWlhJU0kyVFJTQkRXUFVWUVQ0RUNCV05JN1RGV1BQUzZFS0FQSjdXNU9CWFNORzY2TSIpLnNsaWNlKDAsIDMyKSksCiAgICAvLyAgICAgcmVrZXlUbzogcmVrZXlBZGRyZXNzKHJla2V5QmFjaywgd2FsbGV0KQogICAgLy8gICB9KQogICAgaW50Y18xIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL3BsdWdpbnMvc3Vic2NyaXB0aW9uL2NvbnRyYWN0LmFsZ28udHM6MjUtMzIKICAgIC8vIGl0eG4KICAgIC8vICAgLnBheW1lbnQoewogICAgLy8gICAgIHNlbmRlciwKICAgIC8vICAgICBhbW91bnQ6IEFNT1VOVCwKICAgIC8vICAgICByZWNlaXZlcjogQWNjb3VudChCeXRlcy5mcm9tQmFzZTMyKCI0NlhZUjdPVFJaWElTSTJUUlNCRFdQVVZRVDRFQ0JXTkk3VEZXUFBTNkVLQVBKN1c1T0JYU05HNjZNIikuc2xpY2UoMCwgMzIpKSwKICAgIC8vICAgICByZWtleVRvOiByZWtleUFkZHJlc3MocmVrZXlCYWNrLCB3YWxsZXQpCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9zdWJzY3JpcHRpb24vY29udHJhY3QuYWxnby50czoxNC0xOQogICAgLy8gbWFrZVBheW1lbnQoCiAgICAvLyAgIHdhbGxldDogQXBwbGljYXRpb24sCiAgICAvLyAgIHJla2V5QmFjazogYm9vbGVhbiwKICAgIC8vICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzCiAgICAvLyAgIF9hY2N0UmVmOiBBZGRyZXNzCiAgICAvLyApOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1ha2VQYXltZW50X2FmdGVyX2lmX2Vsc2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy91dGlscy9wbHVnaW5zLnRzOjQ2CiAgICAvLyByZXR1cm4gd2FsbGV0LmFkZHJlc3MKICAgIGRpZyAyCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvcGx1Z2lucy9zdWJzY3JpcHRpb24vY29udHJhY3QuYWxnby50czozMAogICAgLy8gcmVrZXlUbzogcmVrZXlBZGRyZXNzKHJla2V5QmFjaywgd2FsbGV0KQogICAgYiBtYWtlUGF5bWVudF9hZnRlcl9pbmxpbmVkX3NtYXJ0X2NvbnRyYWN0cy91dGlscy9wbHVnaW5zLnRzOjpyZWtleUFkZHJlc3NANgo=","clear":"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},"byteCode":{"approval":"CyAEAAEAACYBC2xhc3RQYXltZW50MRhAAAMoImcxG0EAGIAEsGC6WDYaAI4BAAEAMRkUMRgQREIACDEZFDEYFBBDNhoBSRWBCBJEF0k2GgJJFSMSRCJTNhoDFYEgEkRMgBBzcGVuZGluZ19hZGRyZXNzZUhMMgYiKGVECSQNRCgyBmexJUxAADgyA7IggCDnr4j9045uiSNTjII7PpWE+EEGzUfmWz3y8RQHp/brg7IHSbIISwGyACOyECKyAbMjQ0sCcghEQv/C","clear":"C4EBQw=="},"events":[],"templateVariables":{"FREQUENCY":{"type":"AVMUint64"},"AMOUNT":{"type":"AVMUint64"}}} as unknown as Arc56Contract + +/** + * A state record containing binary data + */ +export interface BinaryState { + /** + * Gets the state value as a Uint8Array + */ + asByteArray(): Uint8Array | undefined + /** + * Gets the state value as a string + */ + asString(): string | undefined +} + +class BinaryStateValue implements BinaryState { + constructor(private value: Uint8Array | undefined) {} + + asByteArray(): Uint8Array | undefined { + return this.value + } + + asString(): string | undefined { + return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined + } +} + +/** + * Expands types for IntelliSense so they are more human readable + * See https://stackoverflow.com/a/69288824 + */ +export type Expand = T extends (...args: infer A) => infer R + ? (...args: Expand) => Expand + : T extends infer O + ? { [K in keyof O]: O[K] } + : never + + +/** + * Deploy-time template variables + */ +export type TemplateVariables = { + FREQUENCY: bigint, + AMOUNT: bigint, +} + +/** + * The argument types for the SubscriptionPlugin contract + */ +export type SubscriptionPluginArgs = { + /** + * The object representation of the arguments for each method + */ + obj: { + 'makePayment(uint64,bool,address)void': { + wallet: bigint | number + rekeyBack: boolean + _acctRef: string + } + } + /** + * The tuple representation of the arguments for each method + */ + tuple: { + 'makePayment(uint64,bool,address)void': [wallet: bigint | number, rekeyBack: boolean, _acctRef: string] + } +} + +/** + * The return type for each method + */ +export type SubscriptionPluginReturns = { + 'makePayment(uint64,bool,address)void': void +} + +/** + * Defines the types of available calls and state of the SubscriptionPlugin smart contract. + */ +export type SubscriptionPluginTypes = { + /** + * Maps method signatures / names to their argument and return types. + */ + methods: + & Record<'makePayment(uint64,bool,address)void' | 'makePayment', { + argsObj: SubscriptionPluginArgs['obj']['makePayment(uint64,bool,address)void'] + argsTuple: SubscriptionPluginArgs['tuple']['makePayment(uint64,bool,address)void'] + returns: SubscriptionPluginReturns['makePayment(uint64,bool,address)void'] + }> + /** + * Defines the shape of the state of the application. + */ + state: { + global: { + keys: { + lastPayment: bigint + } + maps: {} + } + } +} + +/** + * Defines the possible abi call signatures. + */ +export type SubscriptionPluginSignatures = keyof SubscriptionPluginTypes['methods'] +/** + * Defines an object containing all relevant parameters for a single call to the contract. + */ +export type CallParams = Expand< + Omit & + { + /** The args for the ABI method call, either as an ordered array or an object */ + args: Expand + } +> +/** + * Maps a method signature from the SubscriptionPlugin smart contract to the method's arguments in either tuple or struct form + */ +export type MethodArgs = SubscriptionPluginTypes['methods'][TSignature]['argsObj' | 'argsTuple'] +/** + * Maps a method signature from the SubscriptionPlugin smart contract to the method's return type + */ +export type MethodReturn = SubscriptionPluginTypes['methods'][TSignature]['returns'] + +/** + * Defines the shape of the keyed global state of the application. + */ +export type GlobalKeysState = SubscriptionPluginTypes['state']['global']['keys'] + + +/** + * Defines supported create method params for this smart contract + */ +export type SubscriptionPluginCreateCallParams = + | Expand +/** + * Defines arguments required for the deploy method. + */ +export type SubscriptionPluginDeployParams = Expand & { + /** + * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available) + */ + createParams?: SubscriptionPluginCreateCallParams +}> + + +/** + * Exposes methods for constructing `AppClient` params objects for ABI calls to the SubscriptionPlugin smart contract + */ +export abstract class SubscriptionPluginParamsFactory { + /** + * Constructs a no op call for the makePayment(uint64,bool,address)void ABI method + * + * @param params Parameters for the call + * @returns An `AppClientMethodCallParams` object for the call + */ + static makePayment(params: CallParams & CallOnComplete): AppClientMethodCallParams & CallOnComplete { + return { + ...params, + method: 'makePayment(uint64,bool,address)void' as const, + args: Array.isArray(params.args) ? params.args : [params.args.wallet, params.args.rekeyBack, params.args._acctRef], + } + } +} + +/** + * A factory to create and deploy one or more instance of the SubscriptionPlugin smart contract and to create one or more app clients to interact with those (or other) app instances + */ +export class SubscriptionPluginFactory { + /** + * The underlying `AppFactory` for when you want to have more flexibility + */ + public readonly appFactory: _AppFactory + + /** + * Creates a new instance of `SubscriptionPluginFactory` + * + * @param params The parameters to initialise the app factory with + */ + constructor(params: Omit) { + this.appFactory = new _AppFactory({ + ...params, + appSpec: APP_SPEC, + }) + } + + /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */ + public get appName() { + return this.appFactory.appName + } + + /** The ARC-56 app spec being used */ + get appSpec() { + return APP_SPEC + } + + /** A reference to the underlying `AlgorandClient` this app factory is using. */ + public get algorand(): AlgorandClient { + return this.appFactory.algorand + } + + /** + * Returns a new `AppClient` client for an app instance of the given ID. + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public getAppClientById(params: AppFactoryAppClientParams) { + return new SubscriptionPluginClient(this.appFactory.getAppClientById(params)) + } + + /** + * Returns a new `AppClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * + * Automatically populates appName, defaultSender and source maps from the factory + * if not specified in the params. + * @param params The parameters to create the app client + * @returns The `AppClient` + */ + public async getAppClientByCreatorAndName( + params: AppFactoryResolveAppClientByCreatorAndNameParams, + ) { + return new SubscriptionPluginClient(await this.appFactory.getAppClientByCreatorAndName(params)) + } + + /** + * Idempotently deploys the SubscriptionPlugin smart contract. + * + * @param params The arguments for the contract calls and any additional parameters for the call + * @returns The deployment result + */ + public async deploy(params: SubscriptionPluginDeployParams = {}) { + const result = await this.appFactory.deploy({ + ...params, + }) + return { result: result.result, appClient: new SubscriptionPluginClient(result.appClient) } + } + + /** + * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the SubscriptionPlugin smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The params for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.params.bare.create(params) + }, + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the SubscriptionPlugin smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The transaction for a create call + */ + bare: (params?: Expand) => { + return this.appFactory.createTransaction.bare.create(params) + }, + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Gets available create methods + */ + create: { + /** + * Creates a new instance of the SubscriptionPlugin smart contract using a bare call. + * + * @param params The params for the bare (raw) call + * @returns The create result + */ + bare: async (params?: Expand) => { + const result = await this.appFactory.send.bare.create(params) + return { result: result.result, appClient: new SubscriptionPluginClient(result.appClient) } + }, + }, + + } + +} +/** + * A client to make calls to the SubscriptionPlugin smart contract + */ +export class SubscriptionPluginClient { + /** + * The underlying `AppClient` for when you want to have more flexibility + */ + public readonly appClient: _AppClient + + /** + * Creates a new instance of `SubscriptionPluginClient` + * + * @param appClient An `AppClient` instance which has been created with the SubscriptionPlugin app spec + */ + constructor(appClient: _AppClient) + /** + * Creates a new instance of `SubscriptionPluginClient` + * + * @param params The parameters to initialise the app client with + */ + constructor(params: Omit) + constructor(appClientOrParams: _AppClient | Omit) { + this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({ + ...appClientOrParams, + appSpec: APP_SPEC, + }) + } + + /** + * Returns a new `SubscriptionPluginClient` client, resolving the app by creator address and name + * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note). + * @param params The parameters to create the app client + */ + public static async fromCreatorAndName(params: Omit): Promise { + return new SubscriptionPluginClient(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC})) + } + + /** + * Returns an `SubscriptionPluginClient` instance for the current network based on + * pre-determined network-specific app IDs specified in the ARC-56 app spec. + * + * If no IDs are in the app spec or the network isn't recognised, an error is thrown. + * @param params The parameters to create the app client + */ + static async fromNetwork( + params: Omit + ): Promise { + return new SubscriptionPluginClient(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC})) + } + + /** The ID of the app instance this client is linked to. */ + public get appId() { + return this.appClient.appId + } + + /** The app address of the app instance this client is linked to. */ + public get appAddress() { + return this.appClient.appAddress + } + + /** The name of the app. */ + public get appName() { + return this.appClient.appName + } + + /** The ARC-56 app spec being used */ + public get appSpec() { + return this.appClient.appSpec + } + + /** A reference to the underlying `AlgorandClient` this app client is using. */ + public get algorand(): AlgorandClient { + return this.appClient.algorand + } + + /** + * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation. + */ + readonly params = { + /** + * Makes a clear_state call to an existing instance of the SubscriptionPlugin smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.params.bare.clearState(params) + }, + + /** + * Makes a call to the SubscriptionPlugin smart contract using the `makePayment(uint64,bool,address)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call params + */ + makePayment: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.params.call(SubscriptionPluginParamsFactory.makePayment(params)) + }, + + } + + /** + * Create transactions for the current app + */ + readonly createTransaction = { + /** + * Makes a clear_state call to an existing instance of the SubscriptionPlugin smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.createTransaction.bare.clearState(params) + }, + + /** + * Makes a call to the SubscriptionPlugin smart contract using the `makePayment(uint64,bool,address)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call transaction + */ + makePayment: (params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + return this.appClient.createTransaction.call(SubscriptionPluginParamsFactory.makePayment(params)) + }, + + } + + /** + * Send calls to the current app + */ + readonly send = { + /** + * Makes a clear_state call to an existing instance of the SubscriptionPlugin smart contract. + * + * @param params The params for the bare (raw) call + * @returns The clearState result + */ + clearState: (params?: Expand) => { + return this.appClient.send.bare.clearState(params) + }, + + /** + * Makes a call to the SubscriptionPlugin smart contract using the `makePayment(uint64,bool,address)void` ABI method. + * + * @param params The params for the smart contract call + * @returns The call result + */ + makePayment: async (params: CallParams & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => { + const result = await this.appClient.send.call(SubscriptionPluginParamsFactory.makePayment(params)) + return {...result, return: result.return as unknown as (undefined | SubscriptionPluginReturns['makePayment(uint64,bool,address)void'])} + }, + + } + + /** + * Clone this app client with different params + * + * @param params The params to use for the the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value. + * @returns A new app client with the altered params + */ + public clone(params: CloneAppClientParams) { + return new SubscriptionPluginClient(this.appClient.clone(params)) + } + + /** + * Methods to access state for the current SubscriptionPlugin app + */ + state = { + /** + * Methods to access global state for the current SubscriptionPlugin app + */ + global: { + /** + * Get all current keyed values from global state + */ + getAll: async (): Promise>> => { + const result = await this.appClient.state.global.getAll() + return { + lastPayment: result.lastPayment, + } + }, + /** + * Get the current value of the lastPayment key in global state + */ + lastPayment: async (): Promise => { return (await this.appClient.state.global.getValue("lastPayment")) as bigint | undefined }, + }, + } + + public newGroup(): SubscriptionPluginComposer { + const client = this + const composer = this.algorand.newGroup() + let promiseChain:Promise = Promise.resolve() + const resultMappers: Array any)> = [] + return { + /** + * Add a makePayment(uint64,bool,address)void method call against the SubscriptionPlugin contract + */ + makePayment(params: CallParams & {onComplete?: OnApplicationComplete.NoOpOC}) { + promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.makePayment(params))) + resultMappers.push(undefined) + return this + }, + /** + * Add a clear state call to the SubscriptionPlugin contract + */ + clearState(params: AppClientBareCallParams) { + promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params))) + return this + }, + addTransaction(txn: Transaction, signer?: TransactionSigner) { + promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer)) + return this + }, + async composer() { + await promiseChain + return composer + }, + async simulate(options?: SimulateOptions) { + await promiseChain + const result = await (!options ? composer.simulate() : composer.simulate(options)) + return { + ...result, + returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue) + } + }, + async send(params?: SendParams) { + await promiseChain + const result = await composer.send(params) + return { + ...result, + returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue) + } + } + } as unknown as SubscriptionPluginComposer + } +} +export type SubscriptionPluginComposer = { + /** + * Calls the makePayment(uint64,bool,address)void ABI method. + * + * @param args The arguments for the contract call + * @param params Any additional parameters for the call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + makePayment(params?: CallParams): SubscriptionPluginComposer<[...TReturns, SubscriptionPluginReturns['makePayment(uint64,bool,address)void'] | undefined]> + + /** + * Makes a clear_state call to an existing instance of the SubscriptionPlugin smart contract. + * + * @param args The arguments for the bare call + * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions + */ + clearState(params?: AppClientBareCallParams): SubscriptionPluginComposer<[...TReturns, undefined]> + + /** + * Adds a transaction to the composer + * + * @param txn A transaction to add to the transaction group + * @param signer The optional signer to use when signing this transaction. + */ + addTransaction(txn: Transaction, signer?: TransactionSigner): SubscriptionPluginComposer + /** + * Returns the underlying AtomicTransactionComposer instance + */ + composer(): Promise + /** + * Simulates the transaction group and returns the result + */ + simulate(): Promise & { simulateResponse: modelsv2.SimulateResponse }> + simulate(options: SkipSignaturesSimulateOptions): Promise & { simulateResponse: modelsv2.SimulateResponse }> + simulate(options: RawSimulateOptions): Promise & { simulateResponse: modelsv2.SimulateResponse }> + /** + * Sends the transaction group to the network and returns the results + */ + send(params?: SendParams): Promise> +} +export type SubscriptionPluginComposerResults = Expand + diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/escrow/constants.ts b/assets/arc-0058/projects/arc-0058/smart_contracts/escrow/constants.ts new file mode 100644 index 000000000..188f0cf8c --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/escrow/constants.ts @@ -0,0 +1,14 @@ +import { uint64 } from "@algorandfoundation/algorand-typescript"; + +export const EscrowGlobalStateKeysCreator = 'creator'; + +export const NewCostForARC58: uint64 = 150_000 + +export const GlobalStateKeyBytesCost: uint64 = 50_000 + +export const MinPages: uint64 = 100_000; + +export const ARC58WalletIDsByAccountsMbr: uint64 = 12_100; +export const MinWalletIDsByAccountsMbr: uint64 = 8_900; + +export const BoxCostPerByte: uint64 = 400; \ No newline at end of file diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/escrow/contract.algo.ts b/assets/arc-0058/projects/arc-0058/smart_contracts/escrow/contract.algo.ts new file mode 100644 index 000000000..7a0ad03a6 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/escrow/contract.algo.ts @@ -0,0 +1,35 @@ +import { Account, assert, bytes, Contract, Global, GlobalState, itxn, Txn } from "@algorandfoundation/algorand-typescript" +import { ERR_ONLY_CREATOR_CAN_REKEY, ERR_ONLY_FACTORY_CAN_DELETE } from "./errors" +import { abimethod } from "@algorandfoundation/algorand-typescript/arc4" +import { EscrowGlobalStateKeysCreator } from "./constants"; + +export class Escrow extends Contract { + + creator = GlobalState({ key: EscrowGlobalStateKeysCreator }) + + @abimethod({ onCreate: 'require' }) + create(creator: bytes): void { + this.creator.value = creator + } + + rekey(rekeyTo: Account): void { + assert(Txn.sender === Global.creatorAddress, ERR_ONLY_CREATOR_CAN_REKEY) + + itxn + .payment({ + amount: 0, + receiver: Global.currentApplicationAddress, + rekeyTo + }) + .submit() + } + + @abimethod({ allowActions: 'DeleteApplication' }) + delete(): void { + assert(Txn.sender === Global.creatorAddress, ERR_ONLY_FACTORY_CAN_DELETE) + + itxn + .payment({ closeRemainderTo: Global.creatorAddress }) + .submit() + } +} \ No newline at end of file diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/escrow/errors.ts b/assets/arc-0058/projects/arc-0058/smart_contracts/escrow/errors.ts new file mode 100644 index 000000000..3d96e93e9 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/escrow/errors.ts @@ -0,0 +1,7 @@ +export const ERR_ONLY_CREATOR_CAN_REKEY = 'only the creator can rekey an escrow contract' +export const ERR_ONLY_FACTORY_CAN_DELETE = 'only the factory can delete an escrow contract' +export const ERR_ALREADY_REGISTERED = 'already registered' +export const ERR_DOESNT_EXIST = 'does not exist' +export const ERR_FORBIDDEN = 'forbidden' +export const ERR_INVALID_APP = 'invalid app to register' +export const ERR_INVALID_CREATOR = 'invalid creator' \ No newline at end of file diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/escrow/factory.algo.ts b/assets/arc-0058/projects/arc-0058/smart_contracts/escrow/factory.algo.ts new file mode 100644 index 000000000..276f0b780 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/escrow/factory.algo.ts @@ -0,0 +1,200 @@ +import { Account, Application, assert, assertMatch, BoxMap, Bytes, bytes, Contract, Global, GlobalState, gtxn, itxn, op, Txn, uint64 } from "@algorandfoundation/algorand-typescript"; +import { abimethod, Address, compileArc4, DynamicArray, DynamicBytes, StaticBytes } from "@algorandfoundation/algorand-typescript/arc4"; +import { Escrow } from "./contract.algo"; +import { btoi, itob } from "@algorandfoundation/algorand-typescript/op"; +import { ERR_ALREADY_REGISTERED, ERR_FORBIDDEN, ERR_INVALID_APP, ERR_INVALID_CREATOR } from "./errors"; +import { ERR_DOESNT_EXIST } from './errors' +import { ERR_INVALID_PAYMENT } from "../utils/errors"; +import { BoxCostPerByte, EscrowGlobalStateKeysCreator, GlobalStateKeyBytesCost, MinPages, MinWalletIDsByAccountsMbr } from "./constants"; + +function bytes16(acc: Account): bytes<16> { + return acc.bytes.slice(0, 16).toFixed({ length: 16 }) +} + +export class EscrowFactory extends Contract { + + // 8 or 16 bytes + walletIDsByAccounts = BoxMap, bytes>({ keyPrefix: '' }) + + private mbr(length: uint64): uint64 { + return MinWalletIDsByAccountsMbr + (length * BoxCostPerByte) + } + + private getCreator(): bytes { + const nonAppCaller = Global.callerApplicationId === 0 + return nonAppCaller + ? Bytes(bytes16(Txn.sender)) + : Bytes(itob(Global.callerApplicationId)) + } + + new(payment: gtxn.PaymentTxn): uint64 { + const nonAppCaller = Global.callerApplicationId === 0 + const creator = this.getCreator() + + const escrow = compileArc4(Escrow); + + const childAppMBR: uint64 = ( + MinPages + + GlobalStateKeyBytesCost + ) + + assertMatch( + payment, + { + receiver: Global.currentApplicationAddress, + amount: childAppMBR + Global.minBalance, + }, + ERR_INVALID_PAYMENT + ) + + const newEscrow = escrow.call.create( + { + args: [creator], + } + ).itxn.createdApp + + itxn + .payment({ + receiver: newEscrow.address, + amount: Global.minBalance + }) + .submit() + + escrow.call.rekey({ + appId: newEscrow.id, + args: [ + nonAppCaller ? Txn.sender : Global.callerApplicationAddress + ] + }) + + return newEscrow.id + } + + register(payment: gtxn.PaymentTxn, app: uint64): void { + // only apps can call this method + assert(Global.callerApplicationId !== 0) + // this way we ensure apps are always either + // registering themselves or escrows they can prove they created + assert(app === 0 || Application(app).creator === Global.currentApplicationAddress, ERR_INVALID_APP) + + let creator = Bytes('') + if (Application(app).creator === Global.currentApplicationAddress) { + creator = op.AppGlobal.getExBytes(app, Bytes(EscrowGlobalStateKeysCreator))[0] + assert(btoi(creator) === Global.callerApplicationId, ERR_INVALID_CREATOR) + } else { + creator = Bytes(itob(Global.callerApplicationId)) + app = Global.callerApplicationId + } + + const appAddress = bytes16(Application(app).address) + assert(!this.walletIDsByAccounts(appAddress).exists, ERR_ALREADY_REGISTERED) + + assertMatch( + payment, + { + receiver: Global.currentApplicationAddress, + amount: this.mbr(creator.length), + }, + ERR_INVALID_PAYMENT + ) + + this.walletIDsByAccounts(appAddress).value = creator + } + + delete(id: uint64): void { + const caller = Global.callerApplicationId + const key = bytes16(Application(id).address) + assert(this.walletIDsByAccounts(key).exists, ERR_DOESNT_EXIST) + + const creator = this.walletIDsByAccounts(key).value + if (creator.length === 8) { + assert(caller === btoi(creator), ERR_FORBIDDEN); + } else { + assert(Bytes(bytes16(Txn.sender)) === creator, ERR_FORBIDDEN); + } + + const spendingAccount = compileArc4(Escrow); + + const refundAmount: uint64 = ( + MinPages + + GlobalStateKeyBytesCost + + this.mbr(creator.length) + ) + + spendingAccount.call.delete({ appId: id }) + + this.walletIDsByAccounts(key).delete() + + itxn + .payment({ + receiver: creator.length === 8 ? Global.callerApplicationAddress : Txn.sender, + amount: refundAmount + }) + .submit() + } + + // @ts-ignore + @abimethod({ readonly: true }) + cost(): uint64 { + return ( + MinPages + + GlobalStateKeyBytesCost + + Global.minBalance + ) + } + + // @ts-ignore + @abimethod({ readonly: true }) + registerCost(): uint64 { + return this.mbr(8) + } + + // @ts-ignore + @abimethod({ readonly: true }) + exists(address: Address): boolean { + return this.walletIDsByAccounts(bytes16(address.native)).exists + } + + // @ts-ignore + @abimethod({ readonly: true }) + get(address: Address): bytes { + if (!this.walletIDsByAccounts(bytes16(address.native)).exists) { + return Bytes('') + } + return this.walletIDsByAccounts(bytes16(address.native)).value + } + + // @ts-ignore + @abimethod({ readonly: true }) + mustGet(address: Address): bytes { + assert(this.walletIDsByAccounts(bytes16(address.native)).exists, 'Account not found') + return this.walletIDsByAccounts(bytes16(address.native)).value + } + + // @ts-ignore + @abimethod({ readonly: true }) + getList(addresses: DynamicArray
): DynamicArray { + const apps = new DynamicArray() + for (let i: uint64 = 0; i < addresses.length; i++) { + const address = addresses[i] + if (this.walletIDsByAccounts(bytes16(address.native)).exists) { + apps.push(new DynamicBytes(this.walletIDsByAccounts(bytes16(address.native)).value)) + } else { + apps.push(new DynamicBytes('')) + } + } + return apps + } + + // @ts-ignore + @abimethod({ readonly: true }) + mustGetList(addresses: DynamicArray
): DynamicArray { + const apps = new DynamicArray() + for (let i: uint64 = 0; i < addresses.length; i++) { + const address = addresses[i] + assert(this.walletIDsByAccounts(bytes16(address.native)).exists, 'Account not found') + apps.push(new DynamicBytes(this.walletIDsByAccounts(bytes16(address.native)).value)) + } + return apps + } +} \ No newline at end of file diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/index.ts b/assets/arc-0058/projects/arc-0058/smart_contracts/index.ts new file mode 100644 index 000000000..6030d0e18 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/index.ts @@ -0,0 +1,62 @@ +import { Config } from '@algorandfoundation/algokit-utils' +import { registerDebugEventHandlers } from '@algorandfoundation/algokit-utils-debug' +import { consoleLogger } from '@algorandfoundation/algokit-utils/types/logging' +import * as fs from 'node:fs' +import * as path from 'node:path' + +// Uncomment the traceAll option to enable auto generation of AVM Debugger compliant sourceMap and simulation trace file for all AVM calls. +// Learn more about using AlgoKit AVM Debugger to debug your TEAL source codes and inspect various kinds of Algorand transactions in atomic groups -> https://github.com/algorandfoundation/algokit-avm-vscode-Debugger + +Config.configure({ + logger: consoleLogger, + debug: true, + // traceAll: true, +}) +registerDebugEventHandlers() + +// base directory +const baseDir = path.resolve(__dirname) + +// function to validate and dynamically import a module +async function importDeployerIfExists(dir: string) { + const deployerPath = path.resolve(dir, 'deploy-config') + if (fs.existsSync(deployerPath + '.ts') || fs.existsSync(deployerPath + '.js')) { + const deployer = await import(deployerPath) + return { ...deployer, name: path.basename(dir) } + } + return null +} + +// get a list of all deployers from the subdirectories +async function getDeployers() { + const directories = fs + .readdirSync(baseDir, { withFileTypes: true }) + .filter((dirent) => dirent.isDirectory()) + .map((dirent) => path.resolve(baseDir, dirent.name)) + + const deployers = await Promise.all(directories.map(importDeployerIfExists)) + return deployers.filter((deployer) => deployer !== null) // Filter out null values +} + +// execute all the deployers +(async () => { + const contractName = process.argv.length > 2 ? process.argv[2] : undefined + const contractDeployers = await getDeployers() + + const filteredDeployers = contractName + ? contractDeployers.filter(deployer => deployer.name === contractName) + : contractDeployers + + if (contractName && filteredDeployers.length === 0) { + console.warn(`No deployer found for contract name: ${contractName}`) + return + } + + for (const deployer of filteredDeployers) { + try { + await deployer.deploy() + } catch (e) { + console.error(`Error deploying ${deployer.name}:`, e) + } + } +})() diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/plugins/abstract_account_plugins.test.ts b/assets/arc-0058/projects/arc-0058/smart_contracts/plugins/abstract_account_plugins.test.ts new file mode 100644 index 000000000..93a2319be --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/plugins/abstract_account_plugins.test.ts @@ -0,0 +1,357 @@ +import { describe, test, beforeAll, beforeEach, expect } from '@jest/globals'; +import { algorandFixture } from '@algorandfoundation/algokit-utils/testing'; +import * as algokit from '@algorandfoundation/algokit-utils'; +import algosdk, { encodeUint64, makeBasicAccountTransactionSigner } from 'algosdk'; +import { AbstractedAccountClient, AbstractedAccountFactory } from '../artifacts/abstracted_account/AbstractedAccountClient'; +import { SubscriptionPluginClient, SubscriptionPluginFactory } from '../artifacts/plugins/subscription/SubscriptionPluginClient'; +import { OptInPluginClient, OptInPluginFactory } from '../artifacts/plugins/optin/OptInPluginClient'; +import { EscrowFactoryFactory } from '../artifacts/escrow/EscrowFactoryClient'; + +const ZERO_ADDRESS = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY5HFKQ'; +algokit.Config.configure({ populateAppCallResources: true }); +const fixture = algorandFixture(); + +describe('Abstracted Subscription Program', () => { + /** Alice's externally owned account (ie. a keypair account she has in Pera) */ + let aliceEOA: algosdk.Account; + /** The address of Alice's new abstracted account. Sends app calls from aliceEOA unless otherwise specified */ + let aliceAbstractedAccount: string; + /** The client for Alice's abstracted account */ + let abstractedAccountClient: AbstractedAccountClient; + /** The client for the subscription plugin */ + let subPluginClient: SubscriptionPluginClient; + /** The ID of the subscription plugin */ + let subPluginID: bigint; + /** The client for the opt-in plugin */ + let optInPluginClient: OptInPluginClient; + /** The ID of the opt-in plugin */ + let optInPluginID: bigint; + /** The suggested params for transactions */ + let suggestedParams: algosdk.SuggestedParams; + + /** The maximum uint64 value. Used to indicate a never-expiring plugin */ + const maxUint64 = BigInt('18446744073709551615'); + + beforeEach(fixture.beforeEach); + + beforeAll(async () => { + await fixture.beforeEach(); + const { algorand, testAccount } = fixture.context; + suggestedParams = await algorand.getSuggestedParams(); + aliceEOA = testAccount; + + const escrowFactory = new EscrowFactoryFactory({ + defaultSender: aliceEOA.addr, + defaultSigner: makeBasicAccountTransactionSigner(aliceEOA), + algorand + }) + + const escrowFactoryResults = await escrowFactory.send.create.bare() + + await escrowFactoryResults.appClient.appClient.fundAppAccount({ amount: (100_000).microAlgos() }); + + const minter = new AbstractedAccountFactory({ + defaultSender: aliceEOA.addr, + defaultSigner: makeBasicAccountTransactionSigner(aliceEOA), + algorand + }); + + const results = await minter.send.create.createApplication({ + args: { + admin: aliceEOA.addr.toString(), + controlledAddress: ZERO_ADDRESS, + escrowFactory: escrowFactoryResults.appClient.appId, + }, + }); + abstractedAccountClient = results.appClient; + aliceAbstractedAccount = abstractedAccountClient.appAddress.toString(); + + // Fund the abstracted account with 0.2 ALGO so it can hold an ASA + await abstractedAccountClient.appClient.fundAppAccount({ amount: algokit.microAlgos(200_000) }); + + const subPluginMinter = new SubscriptionPluginFactory({ + defaultSender: aliceEOA.addr, + defaultSigner: makeBasicAccountTransactionSigner(aliceEOA), + algorand + }); + + const subPluginMintResults = await subPluginMinter.send.create.bare({ + deployTimeParams: { + FREQUENCY: BigInt(1), // 1 round + AMOUNT: BigInt(100_000) // 100_000 microAlgos + } + }); + subPluginClient = subPluginMintResults.appClient; + subPluginID = subPluginClient.appId; + + const optinPluginMinter = new OptInPluginFactory({ + defaultSender: aliceEOA.addr, + defaultSigner: makeBasicAccountTransactionSigner(aliceEOA), + algorand + }); + + const optInMintResults = await optinPluginMinter.send.create.bare(); + optInPluginClient = optInMintResults.appClient; + optInPluginID = optInPluginClient.appId; + }); + + describe('Unnamed Subscription Plugin', () => { + /** Another account that the subscription payments will go to */ + const joe = '46XYR7OTRZXISI2TRSBDWPUVQT4ECBWNI7TFWPPS6EKAPJ7W5OBXSNG66M'; + // const joe = ZERO_ADDRESS; + /** The box key for the subscription plugin */ + let pluginBox: Uint8Array; + /** The boxes to pass to app calls */ + let boxes: Uint8Array[]; + + beforeAll(() => { + /** The box key for a plugin is `p + plugin ID + allowed caller` */ + pluginBox = new Uint8Array( + Buffer.concat([ + Buffer.from('p'), + Buffer.from(encodeUint64(subPluginID)), + algosdk.decodeAddress(ZERO_ADDRESS).publicKey, + ]) + ); + boxes = [pluginBox]; + }); + + test('Alice adds the app to the abstracted account', async () => { + // const { algorand } = fixture.context; + + const mbr = (await abstractedAccountClient.send.mbr({ + args: { + methodCount: 0, + plugin: '', + escrow: '', + groups: 0n + } + })).return + + if (mbr === undefined) { + throw new Error('MBR is undefined'); + } + + await abstractedAccountClient.appClient.fundAppAccount({ + amount: mbr.plugins.microAlgo() + }); + + await abstractedAccountClient.send.arc58AddPlugin({ + args: { + // Add the subscription plugin + plugin: subPluginID, + // Set address to ZERO_ADDRESS so anyone can call it + caller: ZERO_ADDRESS, + // Dont create an escrow for this plugin + escrow: '', + // Set adminPrivileges to false so it cant change the admin account + admin: false, + // Delegation type of other + delegationType: 3, + // Set end to maxUint64 so it never expires + lastValid: maxUint64, + // Set cooldown to 0 so it can always be called + cooldown: 0, + methods: [], + useRounds: false, + useExecutionKey: false, + defaultToEscrow: false + }, + }); + }); + + test('Someone calls the program to trigger payment', async () => { + const { algod, testAccount } = fixture.context; + + boxes = [ + new Uint8Array( + Buffer.concat([ + Buffer.from('p'), + Buffer.from(encodeUint64(subPluginID)), + algosdk.decodeAddress(ZERO_ADDRESS).publicKey, + ]) + ), + ]; + + const alicePreBalance = await algod.accountInformation(aliceAbstractedAccount).do(); + const joePreBalance = await algod.accountInformation(joe).do(); + + // Get the call to the subscription plugin + const makePaymentTxn = ( + (await subPluginClient + .createTransaction + .makePayment({ + sender: testAccount.addr, + // Send a payment from the abstracted account to Joe + args: { + wallet: abstractedAccountClient.appId, + rekeyBack: true, + _acctRef: joe + }, + // Double the fee to cover the inner txn fee + extraFee: (1_000).microAlgos(), + }) + ).transactions + )[0]; + + // Compose the group needed to actually use the plugin + await abstractedAccountClient + .newGroup() + // Step one: rekey to the plugin + .arc58RekeyToPlugin({ + sender: testAccount.addr, + signer: makeBasicAccountTransactionSigner(testAccount), + args: { + plugin: subPluginID, + global: true, + escrow: '', + methodOffsets: [], + fundsRequest: [] + }, + extraFee: (1_000).microAlgos(), + boxReferences: boxes, + accountReferences: [aliceAbstractedAccount, joe], + }) + // Step two: Call the plugin + .addTransaction(makePaymentTxn, testAccount.signer) + // Step three: Call verify auth addr to rekey back to the abstracted account + .arc58VerifyAuthAddress() + .send(); + + // Verify the payment was made + const alicePostBalance = await algod.accountInformation(aliceAbstractedAccount).do(); + const joePostBalance = await algod.accountInformation(joe).do(); + expect(alicePostBalance.amount).toBe(alicePreBalance.amount - BigInt(100_000)); + expect(joePostBalance.amount).toBe(joePreBalance.amount + BigInt(100_000)); + }); + }); + + describe('Named OptIn Plugin', () => { + let bob: algosdk.Account; + let asset: bigint; + + const nameBox = new Uint8Array(Buffer.concat([Buffer.from('n'), Buffer.from('optIn')])); + + let pluginBox: Uint8Array; + + const boxes: Uint8Array[] = [nameBox]; + + beforeAll(async () => { + bob = fixture.context.testAccount; + const { algorand } = fixture.context; + + // Create an asset + const txn = await algorand.send.assetCreate({ + sender: bob.addr, + total: BigInt(1), + decimals: 0, + defaultFrozen: false, + }); + + asset = BigInt(txn.confirmation!.assetIndex!); + + pluginBox = new Uint8Array( + Buffer.concat([ + Buffer.from('p'), + Buffer.from(encodeUint64(optInPluginID)), + algosdk.decodeAddress(ZERO_ADDRESS).publicKey, + ]) + ); + + boxes.push(pluginBox); + }); + + test('Alice adds the app to the abstracted account', async () => { + const mbr = (await abstractedAccountClient.send.mbr({ + args: { + methodCount: 0, + plugin: 'optIn', + escrow: '', + groups: 0n + } + })).return + + if (mbr === undefined) { + throw new Error('MBR is undefined'); + } + + await abstractedAccountClient.appClient.fundAppAccount({ + sender: aliceEOA.addr, + signer: makeBasicAccountTransactionSigner(aliceEOA), + amount: algokit.microAlgos(Number(mbr.plugins + mbr.namedPlugins)) + }); + + // Add opt-in plugin + await abstractedAccountClient.send.arc58AddNamedPlugin({ + sender: aliceEOA.addr, + signer: makeBasicAccountTransactionSigner(aliceEOA), + args: { + name: 'optIn', + plugin: optInPluginID, + caller: ZERO_ADDRESS, + admin: false, + delegationType: 3, + escrow: '', + lastValid: maxUint64, + cooldown: 0, + methods: [], + useRounds: false, + useExecutionKey: false, + defaultToEscrow: false + } + }); + }); + + test("Bob opts Alice's abstracted account into the asset", async () => { + // Form a payment from bob to alice's abstracted account to cover the MBR + const mbrPayment = algosdk.makePaymentTxnWithSuggestedParamsFromObject({ + sender: bob.addr, + receiver: aliceAbstractedAccount, + amount: 100_000, + suggestedParams, + }); + + // Form the group txn needed to call the opt-in plugin + const optInGroup = ( + await (optInPluginClient + .createTransaction + .optInToAsset({ + sender: bob.addr, + args: { + wallet: abstractedAccountClient.appId, + rekeyBack: true, + assets: [asset], + mbrPayment + }, + extraFee: (1_000).microAlgo() + })) + ).transactions; + + // Compose the group needed to actually use the plugin + await abstractedAccountClient + .newGroup() + // Rekey to the opt-in plugin + .arc58RekeyToNamedPlugin({ + sender: bob.addr, + signer: makeBasicAccountTransactionSigner(bob), + args: { + name: 'optIn', + global: true, + escrow: '', + methodOffsets: [], + fundsRequest: [] + }, + extraFee: (1_000).microAlgo(), + boxReferences: boxes, + assetReferences: [asset], + }) + // Add the mbr payment + .addTransaction(optInGroup[0], makeBasicAccountTransactionSigner(bob)) // mbrPayment + // Add the opt-in plugin call + .addTransaction(optInGroup[1], makeBasicAccountTransactionSigner(bob)) // optInToAsset + // Call verify auth addr to verify the abstracted account is rekeyed back to itself + .arc58VerifyAuthAddress() + .send(); + }); + }); +}); diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/plugins/optin/contract.algo.ts b/assets/arc-0058/projects/arc-0058/smart_contracts/plugins/optin/contract.algo.ts new file mode 100644 index 000000000..37e2af71f --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/plugins/optin/contract.algo.ts @@ -0,0 +1,34 @@ +import { Application, Asset, Global, gtxn, itxn, assertMatch, uint64, assert, Contract } from "@algorandfoundation/algorand-typescript"; +import { ERR_INVALID_PAYMENT } from "../../utils/errors"; +import { ERR_ALREADY_OPTED_IN } from "./errors"; +import { getSpendingAccount, rekeyAddress } from "../../utils/plugins"; + +export class OptInPlugin extends Contract { + + optInToAsset(wallet: Application, rekeyBack: boolean, assets: uint64[], mbrPayment: gtxn.PaymentTxn): void { + const sender = getSpendingAccount(wallet) + + assertMatch( + mbrPayment, + { + receiver: sender, + amount: Global.assetOptInMinBalance * assets.length + }, + ERR_INVALID_PAYMENT + ) + + for (let i: uint64 = 0; i < assets.length; i++) { + assert(!sender.isOptedIn(Asset(assets[i])), ERR_ALREADY_OPTED_IN) + + itxn + .assetTransfer({ + sender, + assetReceiver: sender, + assetAmount: 0, + xferAsset: Asset(assets[i]), + rekeyTo: rekeyAddress(rekeyBack, wallet) + }) + .submit(); + } + } +} diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/plugins/optin/errors.ts b/assets/arc-0058/projects/arc-0058/smart_contracts/plugins/optin/errors.ts new file mode 100644 index 000000000..e7f1a3137 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/plugins/optin/errors.ts @@ -0,0 +1 @@ +export const ERR_ALREADY_OPTED_IN = 'already opted in' \ No newline at end of file diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/plugins/pay/contract.algo.ts b/assets/arc-0058/projects/arc-0058/smart_contracts/plugins/pay/contract.algo.ts new file mode 100644 index 000000000..ef6028a6a --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/plugins/pay/contract.algo.ts @@ -0,0 +1,31 @@ +import { Application, itxn, uint64, Contract } from "@algorandfoundation/algorand-typescript"; +import { getSpendingAccount, rekeyAddress } from "../../utils/plugins"; +import { Address } from "@algorandfoundation/algorand-typescript/arc4"; + +export class PayPlugin extends Contract { + + pay(wallet: Application, rekeyBack: boolean, receiver: Address, asset: uint64, amount: uint64): void { + const sender = getSpendingAccount(wallet) + + if (asset === 0) { + itxn + .payment({ + sender, + receiver: receiver.native, + amount, + rekeyTo: rekeyAddress(rekeyBack, wallet) + }) + .submit() + } else { + itxn + .assetTransfer({ + sender, + assetReceiver: receiver.native, + assetAmount: amount, + xferAsset: asset, + rekeyTo: rekeyAddress(rekeyBack, wallet) + }) + .submit() + } + } +} diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/plugins/subscription/contract.algo.ts b/assets/arc-0058/projects/arc-0058/smart_contracts/plugins/subscription/contract.algo.ts new file mode 100644 index 000000000..9d8b6f165 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/plugins/subscription/contract.algo.ts @@ -0,0 +1,34 @@ +import { GlobalState, uint64, Global, assert, Account, Bytes, Application, itxn, TemplateVar } from '@algorandfoundation/algorand-typescript'; +import { Address, Contract } from '@algorandfoundation/algorand-typescript/arc4'; +import { getSpendingAccount, rekeyAddress } from '../../utils/plugins'; + +/** How frequent this payment can be made */ +const FREQUENCY: uint64 = TemplateVar('FREQUENCY'); // 1 +/** Amount of the payment */ +const AMOUNT: uint64 = TemplateVar('AMOUNT'); // 100_000 + +export class SubscriptionPlugin extends Contract { + + lastPayment = GlobalState({ initialValue: 0 }); + + makePayment( + wallet: Application, + rekeyBack: boolean, + // eslint-disable-next-line no-unused-vars + _acctRef: Address + ): void { + const sender = getSpendingAccount(wallet); + + assert(Global.round - this.lastPayment.value > FREQUENCY); + this.lastPayment.value = Global.round; + + itxn + .payment({ + sender, + amount: AMOUNT, + receiver: Account(Bytes.fromBase32("46XYR7OTRZXISI2TRSBDWPUVQT4ECBWNI7TFWPPS6EKAPJ7W5OBXSNG66M").slice(0, 32)), + rekeyTo: rekeyAddress(rekeyBack, wallet) + }) + .submit(); + } +} diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/utils/errors.ts b/assets/arc-0058/projects/arc-0058/smart_contracts/utils/errors.ts new file mode 100644 index 000000000..d5228f42c --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/utils/errors.ts @@ -0,0 +1 @@ +export const ERR_INVALID_PAYMENT = 'invalid payment'; \ No newline at end of file diff --git a/assets/arc-0058/projects/arc-0058/smart_contracts/utils/plugins.ts b/assets/arc-0058/projects/arc-0058/smart_contracts/utils/plugins.ts new file mode 100644 index 000000000..4f60730ce --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/smart_contracts/utils/plugins.ts @@ -0,0 +1,47 @@ +import { Account, Application, Bytes, Global, op } from "@algorandfoundation/algorand-typescript"; +import { AbstractAccountGlobalStateKeysControlledAddress, AbstractAccountGlobalStateKeysSpendingAddress } from "../abstracted_account/constants"; + +export type Arc58Accounts = { + walletAddress: Account; + origin: Account; + sender: Account; +}; + +export function getAccounts(wallet: Application): Arc58Accounts { + const origin = getOriginAccount(wallet) + const sender = getSpendingAccount(wallet) + return { + walletAddress: wallet.address, + origin, + sender, + } +} + +/** + * getOriginAddress returns the origin address of the contract + * @param wallet The application to get the controlled address from + * @returns The controlled address of the contract + */ +export function getOriginAccount(wallet: Application): Account { + const [controlledAccountBytes] = op.AppGlobal.getExBytes( + wallet, + Bytes(AbstractAccountGlobalStateKeysControlledAddress) + ) + return Account(Bytes(controlledAccountBytes)) +} + +export function getSpendingAccount(wallet: Application): Account { + const [spendingAddressBytes] = op.AppGlobal.getExBytes( + wallet, + Bytes(AbstractAccountGlobalStateKeysSpendingAddress) + ) + return Account(Bytes(spendingAddressBytes)) +} + +export function rekeyAddress(rekeyBack: boolean, wallet: Application): Account { + if (!rekeyBack) { + return Global.zeroAddress + } + + return wallet.address +} \ No newline at end of file diff --git a/assets/arc-0058/projects/arc-0058/tsconfig.json b/assets/arc-0058/projects/arc-0058/tsconfig.json new file mode 100644 index 000000000..962d80d48 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "target": "es2022", + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "strict": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "allowJs": false, + "allowSyntheticDefaultImports": true, + "module": "CommonJS", + "moduleResolution": "Node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true + }, + "include": ["smart_contracts/**/*.ts"], + "exclude": ["node_modules", "dist", "coverage"] +} diff --git a/assets/arc-0058/projects/arc-0058/tsconfig.test.json b/assets/arc-0058/projects/arc-0058/tsconfig.test.json new file mode 100644 index 000000000..6cc09d969 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/tsconfig.test.json @@ -0,0 +1,14 @@ +{ + "extends": "@tsconfig/node22/tsconfig.json", + "compilerOptions": { + "noEmit": true, + "target": "ES2023", + "module": "ESNext", + "lib": ["ES2023"], + "moduleResolution": "Bundler", + "resolveJsonModule": true, + "esModuleInterop": true + }, + "include": ["**/*.ts", "**/*.mts"], + "exclude": ["node_modules"] +} diff --git a/assets/arc-0058/projects/arc-0058/vitest.config.mts b/assets/arc-0058/projects/arc-0058/vitest.config.mts new file mode 100644 index 000000000..abb2d2a78 --- /dev/null +++ b/assets/arc-0058/projects/arc-0058/vitest.config.mts @@ -0,0 +1,21 @@ +import { puyaTsTransformer } from '@algorandfoundation/algorand-typescript-testing/vitest-transformer' +import typescript from '@rollup/plugin-typescript' +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + esbuild: {}, + test: { + testTimeout: 10000, + coverage: { + provider: 'v8', + }, + }, + plugins: [ + typescript({ + tsconfig: './tsconfig.test.json', + transformers: { + before: [puyaTsTransformer], + }, + }), + ], +})